我这里是做的一个从控制台接收一个数字,再循环判断这个数是不是质数(除了能被1和本身整除外,不能再被别的数整除就是质数)..我这样写代码,通常输入前几个数都能准标判断出来,但有时连输几个数就出错了,前面输了几个不是质数和是质数后,好像一输101这个数去判断就很容易出错,说101能被99整除所以不是质数,很不稳定,不知我哪里写错了,请高手指点一下.我是生手,说的详细点最好,,先谢过.import java.util.*;
public class Zhishu{
public static void main(String[] args){

int i=1;
int j=0;
int x=0;
int Num=0;
String answer="";
Scanner input=new Scanner(System.in);

do{
System.out.println("输入一个数,看看是不是质数");
Num=input.nextInt();
for(i=1;i<=99;i++){ //循环设置
if(Num==1||Num==0){ //输入数是1或0不是质数,所以跳出整个循环
break;
}else if(i==1||i==Num){ //i等于1或i等于输入数就跳出本次循环
continue;
}
j=Num%i; //输入数除以1-99
if(j==0){
x=1;
break;
}
}
if(Num==1||Num==0){
System.out.println("1或0本身不是质数");
}else if(x==1){
System.out.println(Num+"能被"+i+"整除,所以不是质数");
}else{
System.out.println(Num+"是质数");
}
System.out.println("是否续继y/n");
answer=input.next();

}while (!answer.equals("n"));

System.out.println("程序结束");
}
}

解决方案 »

  1.   

    思路和算法都有问题.
    x是全局变量,在下面一段代码中
    ...
    j=Num%i;
    if(j==0){ 
    x=1; //只有被执行一次下面
    ...
    }else if(x==1){ //永远成立
    System.out.println(Num+"能被"+i+"整除,所以不是质数"); 
    }
    ...而且在下面一段代码中只要输入的数字是大于100的质数.则循环结束后 i 的值始终是 100for(i=1;i <=99;i++){ //循环设置 
    if(Num==1||Num==0){ //输入数是1或0不是质数,所以跳出整个循环 
    break; 
    }else if(i==1||i==Num){ //i等于1或i等于输入数就跳出本次循环 
    continue; 

    j=Num%i; //输入数除以1-99 
    if(j==0){ 
    x=1; 
    break; 

    }
    ...
    }else if(x==1){ //只有前面判断的数字中有一次不是质数这里永远成立
    System.out.println(Num+"能被"+i+"整除,所以不是质数"); //始终打印 num 可以被100 整除
    }
    ..