我刚写的,理论上说,输入23应该显示是素数,但却显示是非素数。麻烦大家看看怎么回事。我没有找到原因。
 
import  java.io.*;class  Judge{
private  int number;
Judge(int a){
number = a;
}

void judge(){
int i;
int flag = 1;
for (i=2;i<number/2;i++){
if (number%i==0){
flag = 0;
System.out.println("This is not a sushu number!");
break;
}
else if(flag==1){
        System.out.println("The number is a sushu!");
        break;
}
}

}
}
public class sushu { /**判断是否是素数
 * @param args
 */
public static void main(String[] args) 
    throws IOException {
// TODO Auto-generated method stub
System.out.println("Input the number:");
BufferedReader  br = new  BufferedReader(new InputStreamReader(System.in));
int k;
k = (int) br.read ();
Judge ob = new Judge(k);
ob.judge();

}}

解决方案 »

  1.   

    else if(flag==1){
    System.out.println("The number is a sushu!");
    break;这段应该放在循环外面。
      

  2.   

    import  java.io.*;class  Judge{
    private  int number;
    Judge(int a){
    number = a;
    }

    void judge(){
    int i;
    int flag = 1;
    for (i=2;i<number/2;i++){
    if (number%i==0){
    flag = 0;
    break;
    }
            }
    if(flag==1) 
      System.out.println(number+" is a sushu!");
    else
                      System.out.println(number+" is not a sushu number!");
    }
    }
    public class s { /**判断是否是素数
     * @param args
     */
    public static void main(String[] args) 
        throws IOException {
    // TODO Auto-generated method stub
    System.out.println("Input the number:");
    BufferedReader  br = new  BufferedReader(new InputStreamReader(System.in));
    int k;
    k = Integer.valueOf(br.readLine ());
    Judge ob = new Judge(k);
    ob.judge();

    }}
      

  3.   

    public class Test2 {
    public static void main(String[] args) throws Exception{
    Test2 hand = new Test2();
    int count = 1, max = 100;
    while(count < max){
    Conica.pl(count + ":" + isPrime(count));
    count++;
    }
    }

    public static boolean isPrime(int number) throws Exception{
    //if(number < 0 || number.isNotDigit)
    if(number <= 0)
    throw new Exception();
    if(number <= 2) 
    return true;
    int max = (int)Math.sqrt(number) + 1;
    for(int i=2; i<max; i++){
    if(number % i == 0)
    return false;
    }
    return true;
    }
    }我来凑个热闹来着。
      

  4.   

    楼主不认真哦。。根据你的程序一看就知道,但看Judge类中的函数,当输入23时应该就显示
    The number is a sushu!
    这难道是非素数???????有了错误不清楚的时候,最简单的办法就是从头开始按程序运行过程推进,看到底哪步有了问题。
    你的程序的功能只是判断一个数是否能被2整除,若能,则为非素数!相反则为素数!这就错了。程序的错误上面的几位哥们也已经改了!但都存在一个错误----BufferedReader中的read函数,可能是没注意。
    方法1:
    可以把第二个break改成continue,再在里面加上条件判断语句,但这样就感觉复杂了。不提倡!
    import  java.io.*;class  Judge{
    private  int number;
    Judge(int a){
    number = a;
    }void judge(){
    int i;
    int flag = 1;
    for (i=2;i<number/2;i++){
    if (number%i==0){
    flag = 0;
    System.out.println("This is not a sushu number!");
    break;
    }
    else if(flag==1){
           if((i+1)>=(number / 2))
    System.out.println("The number is a sushu!");
    continue;
    }
    }
    }
    }public class sushu {
    /**判断是否是素数
     */
    public static void main(String[] args) 
        throws IOException {
    // TODO Auto-generated method stub
    System.out.println("Input the number:");
    BufferedReader  br = new  BufferedReader(new InputStreamReader(System.in));
    int k;
    k = Integer.valueOf(br.readLine());
    /*接受数据,BufferedReader中的read函数只能接受单个字符,可以参考文档,或添加语句测试得知!
    */
    Judge ob = new Judge(k);
    ob.judge();
    }
    }
    方法2:
    像楼上几位哥们说的,把flag标记为1的语句提到循环外面来!(记得修改一下BufferedReader中的函数)共同进步。。