Java中的控制台输入
这是一个简单的代码,但我无法理解为什么它接受两行输入:Java中的控制台输入,java,Java,这是一个简单的代码,但我无法理解为什么它接受两行输入: import java.io.*; import java.util.*; public class Solution { public static void main(String[] args) { Scanner scan = new Scanner (System.in); String inputString = scan.nextLine(); int n = Integer.parseInt (i
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner (System.in);
String inputString = scan.nextLine();
int n = Integer.parseInt (inputString);
for (int i = 1; i <= n; ++i) {
inputString = scan.nextLine();
int num = Integer.parseInt (inputString);
System.out.println ("Checking prime of: " + num);
for (int j = 2; j*j < num; ++j) {
if (num % j == 0) {
System.out.println ("Not prime");
break;
}
}
System.out.println ("Prime");
}
}
}
程序将打印以下内容:
Checking prime of: 12
Not prime
Prime
Checking prime of: 5
Prime
Checking prime of: 7
Prime
注意上面的第二个素数,它没有消耗任何输入
我一定是犯了一个简单的错误,但我想不出是什么错了。如果有人能指出我做错了什么,我将不胜感激。每一个周期都会打印这一行
System.out.println ("Prime");
在第一个循环的中添加一个标志变量
boolean isPrime = true;
在您的中,如果:
if (num % j == 0) {
isPrime = false;
break;
}
那么还有一个条件
if (isPrime) {
System.out.println ("Prime");
} else {
System.out.println ("Not prime");
}
就这样每一个周期都会打印这一行
System.out.println ("Prime");
for (int j = 2; j*j < num; ++j) {
if (num % j == 0) {
System.out.println ("Not prime");
break;
}
}
System.out.println ("Prime");
在第一个循环的中添加一个标志变量
boolean isPrime = true;
在您的中,如果:
if (num % j == 0) {
isPrime = false;
break;
}
那么还有一个条件
if (isPrime) {
System.out.println ("Prime");
} else {
System.out.println ("Not prime");
}
这就是(intj=2;j*jfor (int j = 2; j*j < num; ++j) {
if (num % j == 0) {
System.out.println ("Not prime");
break;
}
}
System.out.println ("Prime");
如果(num%j==0){
System.out.println(“非素数”);
打破
}
}
System.out.println(“Prime”);
最后一行是双向调用的。您需要初始化一个标志来帮助您判断循环是否提前结束,或者在打印“Not prime”时返回(int j=2;j*j
最后一行是双向调用的。您需要初始化一个标志来帮助您确定循环是否提前结束,或者只要在打印“Not prime”时返回即可。您在main方法的第2行进行扫描,然后再次在循环的顶部进行扫描。第一个方法消耗第一行输入,但您所做的只是将其解析为int,您不检查它,也不为它输出任何内容。您在主方法的第二行进行扫描,然后再次在循环的顶部进行扫描。第一个使用第一行输入,但您所做的只是将其解析为int,不检查它,也不为它输出任何内容。import java.io.*;
import java.io.*;
import java.util.*;
class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner (System.in);
String inputString = scan.nextLine();
int n = Integer.parseInt (inputString);
a: for (int i = 1; i <= n; ++i) {
inputString = scan.nextLine();
int num = Integer.parseInt (inputString);
System.out.println ("Checking prime of: " + num);
for (int j = 2; j*j <= num; ++j) {
if (num % j == 0) {
System.out.println ("Not prime");
continue a;
}
}
System.out.println ("Prime");
}
}
}
导入java.util.*;
类解决方案{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
String inputString=scan.nextLine();
int n=Integer.parseInt(inputString);
a:for(inti=1;iimportjava.io.*;
导入java.util.*;
类解决方案{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
String inputString=scan.nextLine();
int n=Integer.parseInt(inputString);
a:for(int i=1;i)在for
循环的后面有一个语句System.out.println(“Prime”);
,因此它总是打印“Prime”,无论您输入什么以及实际数字是否为素数。请注意,
for
内部循环中的break;
只跳出内部循环,而不是跳出外部循环。在for
循环后有一条语句System.out.println(“prime”);
,因此它总是打印“prime”,不管你输入什么,不管实际数字是否为素数。请注意,
for
内循环中的break;
只从内循环跳出,而不是从外循环跳出。你说得太对了,我真不敢相信我漏掉了。非常感谢你指出这一点。我认为这与我的阅读方式有关g控制台输入。@ash我很高兴它有帮助^^别忘了回答你说得对,我简直不敢相信我错过了。非常感谢你指出这一点。我以为这与我如何阅读控制台输入有关。@ash我很高兴它有帮助^别忘了回答