0

ここに画像の説明を入力いくつかのメソッドを作成しましたが、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();

}

}

配列の 0 ~ 2 ではなく、ユーザーが 1 ~ 3 から選択できるようにするのに何か問題がありますか? または、何か他のものを変更する必要がありますか?前もって感謝します!

注 - 問題のある行は、enterMove() でアスタリスクで囲まれています。

編集: 要求に応じてスタック トレース

4

1 に答える 1

0

Scanner要素を閉じているため、基になるInputStreamSystem.in

そのため、他のスキャナーは再度読み取ることができず、java.util.NoSuchElementExceptionWill がスローされます。

于 2014-03-23T23:32:17.227 に答える