Java 为什么下面的程序不起作用?

Java 为什么下面的程序不起作用?,java,Java,我不明白为什么下面的程序不起作用。请帮帮我,我哪里出错了。多谢各位 import java.util.Scanner; public class LargestNumber { public static void main(String[] args) { int[] numbers = new int[100]; int largestNumber = 0; System.out.println("Enter numbers. Wh

我不明白为什么下面的程序不起作用。请帮帮我,我哪里出错了。多谢各位

import java.util.Scanner;

public class LargestNumber {
    public static void main(String[] args) {
        int[] numbers = new int[100];
        int largestNumber = 0;

        System.out.println("Enter numbers. When you want to finish, type 'finish'.");
        Scanner sc = new Scanner(System.in);

        do {
            if (sc.hasNextInt()) {
                for (int counter = 0; counter < 10; counter++)
                    numbers[counter] = sc.nextInt();
            }
            if (!sc.hasNextInt() && !sc.hasNext("finish")) {
                System.out.println("It's neither number nor 'finish'.");
            }
        }

        while (!sc.hasNext("finish"));

        for (int x : numbers) {
            if (x > largestNumber) {
                largestNumber = x;
            }
        }

        System.out.println("The largest number is: " + largestNumber);
    }
}
根据该文件:

抛出: InputMismatchException-如果下一个标记与整数正则表达式不匹配,或超出范围

所以我想你可以这样做:

int counter = 0;
while (counter < numbers.length) {
  if (sc.hasNextInt()) {
    numbers[counter++] = sc.nextInt();
  } else {
    if (sc.hasNext("finish")) {
      sc.close();
      break;
    } else {
      System.out.println("It's neither number nor 'finish'.");
      sc.next();
    }
  }
}

for (int x : numbers) {
  if (x > largestNumber) {
largestNumber = x;
  }
}

System.out.println("The largest number is: " + largestNumber);
希望这能有所帮助

我认为扫描仪不必要地复杂,而且大部分时间都不能工作。下面是如何用老式的方式来做:

public class LargestNumber {
    public static void main(String[] args) {
        int largestNumber=0;
        System.out.println("Enter numbers. When you want to finish, type 'finish'.");
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while (!(line = r.readLine()).equals("finish")) {
            int val = Integer.parseInt(line);
            if (val > largestNumber)
                largestNumber = val;
        }
        System.out.println("The largest number is: " + largestNumber);
    }
}
为此,请在新行中输入每个数字。我在这里使用了一个较短的算法,即读取一个数字,如果它大于目前为止的最大值,则新数字是目前为止的最大值

    do {
        if (sc.hasNextInt()) {
            for (int counter = 0; counter < 10; counter++)
                numbers[counter] = sc.nextInt();
        }
        if (!sc.hasNextInt() && !sc.hasNext("finish")) {
            System.out.println("It's neither number nor 'finish'.");
        }
    }

    while (!sc.hasNext("finish"));
毫无意义。你:

测试输入中的下一项是否为整数; 尝试解析接下来的十个标记,假设它们都是整数; 在第十一个标记处,检查它是另一个整数还是finish; 如果两者都不是,则抛出异常; 如果没有完成,重复所有的步骤。 实际上,你应该做的事情要简单得多:

检查下一个令牌:

如果完成了,你就完成了; 如果它是一个整数,解析它; 否则抛出错误; 重复此操作最多100次

你已经接受了输入。继续处理它。
它怎么不起作用?编译错误?运行时错误?意外的结果?请解释。我得到了InputMismatchException。你重新键入…?A尝试发布完整的异常和stacktrace,这样我们可以缩小范围,B我们怎么知道你给出了什么输入?我键入的是数字或字符串。不是我投了否决票,但是将if改为while在这里不起作用。我投了反对票,因为我真的认为这不起作用,然后OP验证了。@user2637870再次测试它,并告诉我它是否是你想要的,但它从未测试过finish。这不可能是对的。我认为检查必须在手术室里进行。我认为手术室使用扫描仪的方式过于复杂。他把一个简单的需求搞得一团糟。我认为你的代码更需要一个封闭的花括号…@AndreaParodi你是对的