我是Java新手,目前正在尝试创建一个程序,以确定输入的数字是质数还是复合数。我已经猜到了大部分,但有一部分让我感到困惑。
我希望代码打印一条消息,如果输入一个0或一个负数,说明“该数字需要大于1”,或者如果输入一个1,则"one既不是素数也不是复合数字“。
这是我的密码:
public class Main {
public static void main(String[] args) {
int num;
boolean prime = true;
String answer;
Scanner keyboard = new Scanner(System.in);
do {
System.out.print("Please enter a number ==> ");
num = keyboard.nextInt();
if (num < 1)
System.out.println("The number entered needs to be greater than one.");
else if (num == 1)
System.out.println("One is neither a prime nor composite number.");
else {
for (int ii = 2; ii <= num/2; ii++) {
if (num % ii == 0) {
prime = false;
break;
}
}
}
if (prime == true)
System.out.println("The integer " + num + " is prime.");
else {
System.out.println("The integer " + num + " is composite.");
}
System.out.print("Would you like to go again? (yes/no) ");
answer = keyboard.next();
System.out.print("\n");
} while (answer.equals("yes"));
}}
我的问题是,当我运行代码并输入0、1或负数时,代码会打印正确的消息,但是添加“整数"0,1,-#”是素数。“
我不希望它这样做,只希望它打印相应的消息。我遗漏了什么?
发布于 2022-02-03 23:19:35
只需在else中移动print语句就可以修复逻辑。
此外,还有更多的改进可以排除除2以外的偶数,并寻找素数,直到num的平方根实现为止。
if (num < 1)
System.out.println("The number entered needs to be greater than one.");
else if (num == 1)
System.out.println("One is neither a prime nor composite number.");
else {
prime = num % 2 == 1 || num == 2;
for (int ii = 3; prime && ii * ii <= num; ii += 2) {
if (num % ii == 0) {
prime = false;
}
}
if (prime)
System.out.println("The integer " + num + " is prime.");
else {
System.out.println("The integer " + num + " is composite.");
}
}发布于 2022-02-03 23:19:46
无论num的值如何,此代码都在执行:
if (prime == true)
System.out.println("The integer " + num + " is prime.");
else {
System.out.println("The integer " + num + " is composite.");
}要解决这个问题,只需将其移到the语句中即可。
if (num < 1)
System.out.println("The number entered needs to be greater than one.");
else if (num == 1)
System.out.println("One is neither a prime nor composite number.");
else {
for (int ii = 2; ii <= num/2; ii++) {
if (num % ii == 0) {
prime = false;
break;
}
}
if (prime == true)
System.out.println("The integer " + num + " is prime.");
else {
System.out.println("The integer " + num + " is composite.");
}
}发布于 2022-02-03 23:25:23
它打印语句的原因是,如果值小于1,则if代码将始终运行(因为您已经将素布尔值初始化为true )。对此进行修正,以将最后一条if语句移到inside部件中。
public class Main {
public static void main(String[] args) {
int num;
boolean prime = true;
String answer;
Scanner keyboard = new Scanner(System.in);
do {
System.out.print("Please enter a number ==> ");
num = keyboard.nextInt();
if (num < 1)
System.out.println("The number entered needs to be greater than one.");
else if (num == 1)
System.out.println("One is neither a prime nor composite number.");
else {
for (int ii = 2; ii <= num / 2; ii++) {
if (num % ii == 0) {
prime = false;
break;
}
}
if (prime == true)
System.out.println("The integer " + num + " is prime.");
else {
System.out.println("The integer " + num + " is composite.");
}
}
System.out.print("Would you like to go again? (yes/no) ");
answer = keyboard.next();
System.out.print("\n");
} while (answer.equals("yes"));
}
}然后,它不会像前面那样给出额外的print语句。
Please enter a number ==> 1
One is neither a prime nor composite number.
Would you like to go again? (yes/no) https://stackoverflow.com/questions/70979552
复制相似问题