java - 不断询问,直到使用二维数组给出正确的值

标签 java arrays input

我目前正在从事 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/

相关文章:

java - 如何在 Wildfly 中配置 Jackson?

javascript - 寻址 JSON 数组中的对象

c++ - Fstream 类 - 关于'>>'运算符的问题

javascript - 调用类函数未按预期响应

html - 在页面中将标签和输入居中

java - Spring/Eclipse 项目突然记录一切

java - 如何在Eclipse中检查项目内的所有文件是否已保存?

java - 延迟一段时间后跳转到方法时出错

javascript - 如何根据对象数组中的用户条目进行过滤

css - 防止元素在更改浏览器选项卡时丢失 CSS "focus"