使用 hasNextInt 计算整数

Counting integers with hasNextInt

我不知道这里有什么问题

import java.util.Scanner;

public class CountingInts {

    public static void main(String args[]) {

          Scanner input = new Scanner(System.in);
          int count = 0;
          System.out.print("Numbers: ");

          while (input.hasNextInt()) {
              int x = input.nextInt();
              count = count + 1;
          }

          System.out.print(count);

          input.close();
    }       
}

我想输入几个整数i.g。 (1 2 3 4 10) 之间有空格然后数一数有多少个数字。因此,如果输入为“1 2 3 4 10”,则输出为“5”,因为有五个数字。我认为 while 循环可以解决问题,但它似乎永远循环下去。问题是它从不 System.out.print(count);在底部:/ 有谁知道出了什么问题吗?

程序没有问题1。问题在于您使用它的方式。我假设你只是 运行 像这样:

    java CountingInts

要让它停止,您可以给它一个不是数字的东西(任何东西!),或者您可以告诉控制台驱动程序输入流是名义上的 "end of file"


在控制台上发出 EOF 信号的方式取决于平台:

  • 在 Linux、Unix 和 Mac OSX 控制台上,CTRL-D 字符表示 EOF。

  • 在 Windows 控制台上,CTRL-Z 字符表示 EOF。

  • 在 Eclipse 控制台视图中,EOF 绑定到 CTRL-D 或 CTRL-Z,具体取决于您的基础平台。

  • 其他IDE大概和Eclipse一样

(这些字符绑定可能会改变。当然它们可以在 Linux、Unix 和 Eclipse 情况下改变。)


1 - 言过其实:有几个小问题。我还假设 要求 说程序在看到不是数字的东西时应该停止计数。

import java.util.Scanner;

public class CountingInts {

public static void main(String args[]) {

      Scanner input = new Scanner(System.in);
      int count = 0;
      System.out.print("Numbers: ");

      while (input.hasNextInt()) {

          // this line was your problem.
          //int x = input.nextInt(); 

          // Rewrite this as count++;
          //count = count + 1;
      }
      System.out.print(count);
      input.close();
      }       
}

相反,尝试这样写。

import java.util.Scanner;

public class CountingInts {

public static void main(String args[]) {

      int count = 0;

      Scanner input = new Scanner(System.in);
      System.out.print("Numbers: ");

      while (input.hasNextInt()) {
          input.nextInt(); 
          count++;
      }
      System.out.print(count);
      input.close();
      }       
}

每当您引用 'nextInt();' 时,它都会清除该整数的缓冲区。您应该将 while 循环保留为 input.hasNextInt()。这将检查扫描仪缓冲区中的每个输入并确保它是整数类型,然后将 while 循环的内部更改为我建议的代码。 input.nextInt() 将清除缓冲区,count++ 将每次循环将计数变量递增 1。

您可能希望使此代码更健壮,以便它只允许输入类型 'Integer'。

编辑:希望对您有所帮助!