使用hasNextInt计算整数

时间:2015-02-21 22:42:30

标签: java integer java.util.scanner

我不知道这里有什么问题

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);在底部:/任何知道什么是错的?

2 个答案:

答案 0 :(得分:3)

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

    java CountingInts

要使其停止,你可以给它一些不是数字的东西(任何东西!),或者你可以告诉控制台驱动程序输入流是名义上的“文件结尾”


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

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

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

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

  • 其他IDE可能与Eclipse相同。

(这些字符绑定可能会被更改。当然,它们可以在Linux,Unix和Eclipse中更改。)


1 - 这是一个过度陈述:有一些小问题。我还假设要求表示程序在看到不是数字的东西时应该停止计数。

答案 1 :(得分:0)

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 ++将每个循环的count变量递增1。

您可能希望使此代码更加健壮,以便只允许输入'整数'

编辑:希望这有帮助!