-6

我无法弄清楚为什么以下程序不起作用。请帮助我在哪里犯了错误。谢谢你。

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);
    }
}
4

3 回答 3

0

我认为这Scanner太复杂了,而且在很多时候都不起作用。以下是如何以老式方式进行操作:

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);
    }
}

为此,请在新行中输入每个数字。我这里用了一个更短的算法,就是读取一个数,如果大于目前为止的最大值,新的数就是目前为止的最大值

于 2013-07-31T11:54:03.253 回答
0

这部分:

    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"));

没有意义。你:

  1. 测试输入中的下一个东西是否是整数;
  2. 尝试解析十个下一个标记,假设它们都是整数;
  3. 在第十一个标记处检查它是另一个整数还是“完成”;
  4. 如果两者都不是,则抛出异常;
  5. 如果不是“完成”,请重复所有内容。

您实际上应该做的事情要简单得多:

  1. 检查下一个令牌:

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

  3. 您已完成接受输入。继续处理它。
于 2013-07-31T12:00:33.627 回答
-1

根据文档:

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

所以我觉得你可以这样做:

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);

希望有帮助

于 2013-07-31T11:53:26.813 回答