![](/img/trans.png)
[英]Keep getting java.util.NoSuchElementException error when trying to make a loop
[英]While trying to make a TicTacToe Program in Java, I keep getting a NoSuchElementException error
我已經編寫了一些方法,並且在嘗試運行main時始終出現NoSuchElementException錯誤,這使我可以玩Tic Tac Toe游戲。 當我嘗試使用enterMove()從用戶獲取行和列值時,會發生這種情況,如下所示:
import java.util.Scanner;
public class TicTacToeMethods {
// Create a new board for players to use
public static String[][] createBoard(){
String[][] board = new String[3][3];
for(int r = 0; r < 3; r++){
for(int c = 0; c < 3; c++){
board[r][c] = " _ ";
}
}
return board;
}
// Display the board each time a move is made
public static String displayBoard(String[][] board){
String graphicalBoard = "";
for(int r = 0; r < 3; r++){
for(int c = 0; c < 3; c++){
graphicalBoard += board[r][c];
}
graphicalBoard += "\n";
}
return graphicalBoard;
}
// Check to see if the game has been won
public static String gameWon(String[][] board){
/*
Board setup reference
A B C
D E F
G E H
A = (0,0) B = (0,1) C = (0,2)
D = (1,0) E = (1,1) F = (1,2)
G = (2,0) H = (2,1) I = (2,2)
*/
String winner = "";
boolean xWon = false;
boolean oWon = false;
// Check if X won
boolean firstRowX = (board[0][0].equals(" X ") && board[0][1].equals(" X ") && board[0][2].equals(" X "));
boolean secondRowX = (board[1][0].equals(" X ") && board[1][1].equals(" X ") && board[1][2].equals(" X "));
boolean thirdRowX = (board[2][0].equals(" X ") && board[2][1].equals(" X ") && board[2][2].equals(" X "));
boolean diagonalOneX = (board[0][0].equals(" X ") && board[1][1].equals(" X ") && board[2][2].equals(" X "));
boolean diagonalTwoX = (board[0][2].equals(" X ") && board[1][1].equals(" X ") && board[2][0].equals(" X "));
boolean[] resultsForX = {firstRowX,secondRowX,thirdRowX,diagonalOneX,diagonalTwoX};
// Check if O won
boolean firstRowO = (board[0][0].equals(" O ") && board[0][1].equals(" O ") && board[0][2].equals(" O "));
boolean secondRowO = (board[1][0].equals(" O ") && board[1][1].equals(" O ") && board[1][2].equals(" O "));
boolean thirdRowO = (board[2][0].equals(" O ") && board[2][1].equals(" O ") && board[2][2].equals(" O "));
boolean diagonalOneO = (board[0][0].equals(" O ") && board[1][1].equals(" O ") && board[2][2].equals(" O "));
boolean diagonalTwoO = (board[0][2].equals(" O ") && board[1][1].equals(" O ") && board[2][0].equals(" O "));
boolean[] resultsForO = {firstRowO,secondRowO,thirdRowO,diagonalOneO,diagonalTwoO};
for(boolean each : resultsForX){
if(each == true){
xWon = true;
break;
}
}
for(boolean each : resultsForO){
if(each == true){
oWon = true;
break;
}
}
// Return a winner, or a blank if no one has won
if(xWon){
winner = "X";
}
if(oWon){
winner = "O";
}
return winner;
}
// Validate a player's move
public static boolean validMove(int row, int column, String[][] board){
return ((board[row][column] != " X ") && (board[row][column] != " O "));
}
// Enter a move for the turn player
public static void enterMove(String turnPlayer,String[][] board){
Scanner keyboard = new Scanner(System.in);
//int row, column;
boolean valid;
System.out.print("Enter a row value for your move (1 - 3): ");
**int row = keyboard.nextInt();**
System.out.print("Enter a column value for your move (1 - 3): ");
int column = keyboard.nextInt();
valid = validMove(row - 1,column - 1,board);
while(!valid){
System.out.print("Enter a row value for your move (1 - 3): ");
row = keyboard.nextInt();
System.out.print("Enter a column value for your move (1 - 3): ");
column = keyboard.nextInt();
valid = validMove(row - 1,column - 1,board);
}
switch(turnPlayer){
case "X":
board[row - 1][column - 1] = " X ";
break;
case "O":
board[row - 1][column - 1] = " O ";
break;
default:
break;
}
keyboard.close();
}
}
我有什么問題允許用戶從1-3(而不是0-2)中選擇數組嗎? 還是應該更改其他內容? 先感謝您!
注意-在EnterMove()中,有問題的行已用星號包圍
編輯:Stacktrace根據要求
您正在關閉Scanner
元素,因此正在關閉基礎InputStream
, System.in
因此,其他掃描程序無法再次讀取,並且將引發java.util.NoSuchElementException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.