二维数组和用户输入

时间:2016-06-02 16:39:19

标签: java arrays user-input

我很好奇是否有办法使用scanner类来获取用户输入以初始化数组中的行和列。

例如,如果您有一个三乘三的数组,并且您希望用户选择要转到的行和列

类似的东西:

Scanner input = new Scanner(System.in);

int[][] arrayOfChoice = new int[][];

int user = arrayOfChoice[input.nextInt()][input.nextInt] = some value

我没有试过这个,但我怀疑它是否有效,但希望它能让我知道我想要做什么,如果有办法实现这一点,我会很高兴听到它。

修改

让我试着澄清一下我想做什么

import java.util.Scanner;
import java.util.Arrays;

public class ScannerTest
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);

        int[][] arrayHu = new int[3][3];

        System.out.println("please enter the row and colum you would like to fill:");

        int[input.nextInt();][input.nextInt();] = 1;

        System.out.println(Arrays.toString(arrayhu));
    }
}

类似这样的用户可以输入哪一行和列来将值1放入。我该怎么做,谢谢

2 个答案:

答案 0 :(得分:0)

是的,您可以这样做,但只能在try catch语句中执行。 你写的最后一行也错了

int user = arrayOfChoice[input.nextInt()][input.nextInt()] = some_value

some_value将分配给数组和用户

答案 1 :(得分:0)

它确实有效但您的代码存在一些问题。以下行

int[][] arrayOfChoice = new int[][];

无法工作,因为您需要初始化数组或给它维度。

int[][] arrayOfChoice = new int[3][3];
int[][] arrayOfChoice = new int[][]{{0, 0, 0}, {0, 0, 0}, {0, 0, 0}};

也是最后一行:

int user = arrayOfChoice[input.nextInt()][input.nextInt] = some value

变量用户和用户输入的两点的索引都等于“某个值”。我不确定这是否是你想要实现的目标。

另外我要提醒用户的输入可能无效(非数字,超出数组边界等)会导致程序崩溃。也许使用try catch块(因为这意味着用户只能在try catch块中定义,我将它移到外面)。

int user = 5;
try
{
    arrayOfChoice[input.nextInt()][input.nextInt()] = user;
}
catch(Exception e) 
{
    System.out.println("Invalid input!");
}

编辑tic tac toe游戏:

我说的一切仍然适用。有很多方法可以做到这一点,但这是一个例子。

1.创建一个转向计数器,扫描仪和电路板。

int turn = 0;
int[][] board = new int[3][3];
Scanner input = new Scanner(System.in);

2.创建while循环打印板并要求用户输入:

for(int[] i : board)
{
    for(int j : i)
    {
        System.out.print(j + " ");
    }
    System.out.println();
}
System.out.println("Enter an x and y value:");

3.获取用户的输入:

board[input.nextInt()][input.nextInt()] = ((turn % 2) == 0 ? 2 : 1);

4.创建功能以检查棋盘是否胜出,如果找到则突破循环。一半可以写成如下,但也必须检查对角线。

/*Check row and column.*/
for(int i = 0; i < 3; i++)
{
    if((board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][0] != 0) || 
        (board[0][i] == board[1][i] && board[0][i] == board[2][i] && board[0][i] != 0))
    {
        return true;
    }
}

5.如果没有找到胜利者,请增加转弯计数器并在循环时启动。如果获胜者是打印赢家

System.out.println("Player " + ((turn % 2) == 0 ? 2 : 1) + " is the winner!");

6.关闭扫描仪。

input.close();