我的问题很简单,但我无法弄清楚如何解决我的想法。 我必须找到最小的数字素数少于一个给定的数字,如果没有打印消息。
import java.util.Scanner;
public class Ex8 {
public static void main(String[] args){
int n;
System.out.println("Give the number: ");
Scanner in = new Scanner(System.in);
n=in.nextInt();
while(prim(n) == false){
n--;
}
System.out.println(n);
}
public static boolean prim(int m){
int n=m;
for(int i=2;i<n;i++){
if(n%i == 0){
return false;
}
}
return true;
}
}
代码有效,如果数字为10则打印7但我想进行2次新修改而我找不到解决方案。例如,如果给定的数字为1,我的程序应如何修改以打印消息?我试着写一个if-else,但如果我用if修改了while,这对我没用。 第二件事,如何使得如果给定的数字是一个素数,代码仍然找到比给定数字少的数字。如果我给出数字7,则输出也是7。 谢谢。
答案 0 :(得分:1)
while
- 只需在其周围写一个if
。在开始测试质数之前,只需减少n
。
if (n < 2) {
System.out.println("Number must be greater than 1");
} else {
n--;
while (!prim(n)) {
n--;
}
System.out.println(n);
}
或者:
if (n < 2) {
System.out.println("Number must be greater than 1");
} else {
while (!prim(--n));
System.out.println(n);
}
答案 1 :(得分:0)
你可以在你的while循环之前检查n == 1并在else子句中执行循环。
关于你的第二个问题,你现在通过检查输入的数字n是否为素数来开始你的while循环。你应该用n-1开始检查。
int n;
System.out.println("Give the number: ");
Scanner in = new Scanner(System.in);
n=in.nextInt();
if (n == 1) {
System.out.println("Your message here");
} else {
n -= 1;
while(prim(n) == false){
n--;
}
System.out.println(n);
}