我很好奇是否有办法使用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放入。我该怎么做,谢谢
答案 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();