使用 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'。
编辑:希望对您有所帮助!
我不知道这里有什么问题
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'。
编辑:希望对您有所帮助!