在Java中调用后输入函数是否出错?

时间:2016-06-09 03:43:14

标签: java

我有一个问题是当我为数组2d输入值有效时,一切都已完成,但是当我为totalRow或totalColumn变量输入错误的值时,我的输入函数强制我输入double并在第二个中获取值。 这是我的代码:

public static void input() {
    Scanner sc = new Scanner(System.in);
    try {
        System.out.println("Input total totalRow: ");
        totalRow = sc.nextInt();
        // verify value input must be a positive integer and greater than zero
        if (totalRow <= 0) {
            System.out.println("Input value must be a positive integer and greater than zero!");
            input();
        }

        System.out.println("Input total totalColumn: ");
        totalColumn = sc.nextInt();
        // verify value input must be a positive integer and greater than zero
        if (totalRow <= 0) {
            System.out.println("Input value must be a positive integer and greater than zero!");
            input();
        }

        // check case array must be square array
        if (totalRow != totalColumn) {
            System.out.println("Array must be square!");
            input();
        }
    } catch (InputMismatchException e) {
        // print message when user input other than integer
        System.out.println("Please input an integer!");
        input();
    }

    // initialize array with totalRow and totalColumn
    array = new char[totalRow][totalColumn];

    // input value for array
    for (int i = 0; i < totalRow; i++) {
        for (int j = 0; j < totalColumn; j++) {
            array[i][j] = sc.next().charAt(0);
        }
    }
}

示例:我输入2和a totalRow和totalColumn:消息出现,我重新输入是2和2,但我已输入1 2 3 4 5 6 7 8为数组,值为5。

2 个答案:

答案 0 :(得分:2)

这里有一些让你的代码失败的事情:

  1. 错字:您正在检查totalRow <= 0两次(确保复制粘贴错误)
  2. 如果条件不满足,则再次调用输入: 执行此操作将使该方法的递归实现,这可能导致不希望重复的序列,使用户和开发人员疯狂

  3. 您忘记了scanner.nextInt不会消耗您输入的最后一个换行符

  4. 我建议通过执行以下操作来修改代码:

    if (totalRow <= 0) {
            System.out.println("Input value must be a positive integer and greater than zero!");
            //input();
            }
    
            System.out.println("Input total totalColumn: ");
            totalColumn = sc.nextInt();
            sc.nextLine();
            // verify value input must be a positive integer and greater than
            // zero
            if (totalColumn <= 0) {
            System.out.println("......
    

答案 1 :(得分:0)

递归算法存在问题。即使它适用于正确的输入,输入错误也会反复询问值。因为当你犯了任何错误输入()功能将从头开始。因此,如果您想更好地使用递归来为 input_Total_Column() input_Total_Row()使用单独的函数。 还有一个复制粘贴错误。您在代码中检查了两次 totalColumn&lt; = 0 //你的代码//

`for(int i = 0; i&lt; totalRow; i ++){

    for (int j = 0; j < totalColumn; j++) {

        array[i][j] = sc.next().charAt(0);

    }
}

}`

如果你在raw中输入值,这似乎是一个不正确的逻辑。 charAt(0)将在inedex 0处返回一个字符(只有。所以它始终会在开始时返回字符。请尝试这样做。 string array_input = sc.nextLine(); 使用.split()函数拆分字符串。 然后,您可以使用相应字符串值的Integer.parseInt()轻松地将值转换为整数。