我试图让用户按Enter键以生成下一个素数。在用户生成了他们需要的素数之后,他们将输入0以便程序结束。目前,该程序只是吐出所有数字,直到它达到极限,我需要它只在用户按Enter键时打印一个数字,或者在输入0时结束。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(!input.hasNextInt(0));
for(int i=2; i<=1000; i++){
for(int j=2; j<=i; j++){
if(j==i){
System.out.println(i);
}
if(i%j==0){
break;
}
}
}
}
}
答案 0 :(得分:1)
在&#39; while(!input.hasNextInt(0))&#39;之后删除分号。并尝试从那里调试。该分号使while循环无效。而是用开口支架替换它:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(!input.hasNextInt() && !(input.nextInt() == 0)) {
for(int i=2; i<=1000; i++){
for(int j=2; j<=i; j++){
if(j==i){
System.out.println(i);
}
if(i%j==0){
break;
}
}
}
}
input.close();
}
此外,最佳做法是在不再需要时关闭资源(扫描程序)。
答案 1 :(得分:0)
input.hasNextInt不检查输入的值是否为0.为此,您需要 -
while (input.nextInt() != 0) { ... }
- 除了您要进行多次检查,因此您要保存下一个输入。也许像是
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("First scan: ");
String next = scanner.nextLine();
while (!("0".equals(next))) {
if (next.isEmpty()) {
System.out.println("Next prime");
} else {
System.out.println("String: " + next);
}
System.out.println("Next scan: ");
next = scanner.nextLine();
}
System.out.println("Done");
scanner.close();
}
这是一个我掀起的快速测试。我们现在循环,只要下一个输入变量不是0. scanner即使用户输入一个空行(换句话说,如果他们只是输入),scan.nextLine()将提交。
答案 2 :(得分:0)
问题是你的外部for循环在下一个while循环检查之前完全从2到1000迭代。当您尝试使用if(i%j==0)
打破for循环时,您只是打破了if
这是一个修订版本,可以运行并展示我的意思。请注意,我还会按照其他答案的建议更好地使用表格:关闭扫描仪,不要使用.hasNextInt(int)
try (Scanner scanner = new Scanner(System.in)) {
for (int i = 2; i <= 1000; i++) {
String next = scanner.nextLine();
if(next.equals("0")){
return;
}else{
for(int j = 2;j<=i;j++){
if(j==i){
System.out.println(j);
}else if(i%j==0){//if j is divisible by i...
i++; //try the next i, so we don't print a blank line
j=2; //and reset j
}
}
}
}
}