我目前正在从事 edX 类(class)提供的一个小项目。我坚持一件事,从用户那里获取值并将它们存储在二维数组中。但是,这些值应该在一个范围内,所以我需要重新提示同样的事情,这就是满足的必要条件。
我自己找到了解决方案,但我不知道这是一种常见做法还是有更好的方法。
让我解释一下;
所以我有这样的数组:
int[][] userCoordinates = new int[5][2];
我想用用户的坐标信息填充这个数组,但坐标应该在0到9之间。
我做了这样的事情;
int coordinateValueX = 0, coordinateValueY = 0;
Scanner input = new Scanner(System.in);
for (int i = 0; i < userCoordinates.length; i++) {
// X - Value
for (int j = 0; j <= 0; j++) {
System.out.print("Enter X coordinate for your " + (i + 1) + ". ship:");
coordinateValueX = input.nextInt();
if (gridCheck(coordinateValueX)) {
j--;
}
}
// Y - Value
for (int j = 1; j <= 1; j++) {
System.out.print("Enter Y coordinate for your " + (i + 1) + ". ship:");
coordinateValueY = input.nextInt();
if (gridCheck(coordinateValueY)) {
j--;
}
}
}
gridCheck方法是这样的:
public static boolean gridCheck(int coordinateValue) {
boolean flag = false;
if (coordinateValue > 9 || coordinateValue < 0) {
System.err.println("Invalid grid, please give your coordinate again.");
flag = true;
}
return flag;
}
我尝试使用 while-continue,但问题是当用户给出错误的 Y 值时,它会再次询问 x 值,因为它会迭代到下一个循环。
欢迎提出建议,提前致谢。
最佳答案
你的问题与数组无关,都是关于输入的。
创建一个方法,向用户请求一个值,并且在获得特定范围内的值之前不会返回,例如:
private int askForInt(Scanner scanner, String coordName, int max) {
while (true) {
System.out.print("Give your " + coordName + " coordinate: ");
int i = input.nextInt();
input.nextLine(); // clear new line from buffer
if (i >= 0 && i <= max) {
return i;
}
System.err.println("Please enter a number between 0 and " + max);
}
}
现在您的主要代码变得干净简单。不需要递减循环变量(通常应该避免在循环内修改循环变量 - 阅读代码时会很困惑),并且您可以专注于循环的主要逻辑,而不会因为错误的用户输入而烦恼。
关于java - 不断询问,直到使用二维数组给出正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59988940/