程序我运行了,基本正确(只是要对2特殊处理,因为2是质数)
另外,程序书写应该规范一些:
public class Zhi {
    public static void main(String[] args) {
        int i = 2, j = 2, b = 1;
        System.out.println("输入一个数字,我帮你判断是不是质数");
        try {
            i=System.in.read();
} catch (Exception e) {
            System.out.println("Cannot read:"+i);
}
        for (j = 2; j < (i / 2); j++) {
            if ((i % j) == 0) {
        b = 2;
        break;
    }
}
        if (b == 1) {
    System.out.println("恭喜了,你输入的是质数");
} else {
    System.out.println("不是质数,能被"+j+"整除");
}
    }
}java和c++的循环控制应该一样,都和c一样

解决方案 »

  1.   

    错了,应该是下面这段程序。:)import java.io.*;
    public class Test {
        public static void main(String[] args) {
            int i = 2, j = 2, b = 1;
            System.out.println("输入一个数字,我帮你判断是不是质数");
            try {
        BufferedReader in =
    new BufferedReader(
        new InputStreamReader(System.in));
                i = Integer.parseInt(in.readLine().trim());
    } catch (Exception e) {
                System.out.println("Cannot read:"+i);
    }
            for (j = 2; j < (i / 2); j++) {
                if ((i % j) == 0) {
            b = 2;
            break;
        }
    }
            if (b == 1) {
        System.out.println("恭喜了,你输入的是质数");
    } else {
        System.out.println( i + "不是质数,能被"+j+"整除");
    }
        }
    }
      

  2.   

    System.in是个InputStream,处理byte,直接用System.in.read()得到的是一个字节(如输入7得到ascii值55),所以要用Reader来读入一行字符再判断。如果只是要读入一个字符串,恐怕要用StreamTokenizer或StringTokenizer。  :)
      

  3.   

    各位大虾:在下一时疏忽,把调整的写上来了,我弄错了的程序是下面的,还请重新看一下!
    public class Zhi {
        public static void main(String[] args) {
            int i = 2, j = 2, b = 1;
            System.out.println("输入一个数字,我帮你判断是不是质数");
            try {
                i=System.in.read();
    } catch (Exception e) {
                System.out.println("Cannot read:"+i);
    }
            for (j = 2; j < (i / 2); j++) {
                if ((i % j) == 0) {
            
        System.out.println("不是质数,能被"+j+"整除");
                 b = 2;//为什么这里不写break就不行了呢?
            
        }
    }
            if (b == 1) {
        System.out.println("恭喜了,你输入的是质数");


        }
    }
      

  4.   

    我想应该是机制问题吧不过 i=System.in.read();这样真的会有问题,建议用流星雨的吧。b = 2;//为什么这里不写break就不行了呢?--------这里可以用break。难道你的出错啦??
      

  5.   

    我试了一下,有意思,当我们没有写break的时候呢!也就是现在的程序,经常会发生意想不到的事情!呵呵!有意思!GZ……
      

  6.   

    还请高人给解释一下好吗?
    最可气的是我同样的思路在C++下就完成的很好,为什么到了JAVA下连个循环都不行了?天啊!~~~~~~~~~
      

  7.   

    没写break你的循环就不会停止,当你输入的是非质数,j的值就是i/2,所以就会出现不正常的地方
      

  8.   

    根本不是那个break用不用的问题,就算是有了break ,得到的答案也是错的!
      

  9.   

    b = 2;//为什么这里不写break就不行了呢?在一个循环中,比如循环50次的循环语句中,如果在某次循环体的执行中执行了break语句,那么整个循环语句就结束。
      

  10.   

    根本问题是你用的那个System.in.read()是不对的,不信你在输入以后输出一下,看看你输入的到底是什么~
      

  11.   

    加了break 之后
    for (j = 2; j < (i / 2); j++) {
                if ((i % j) == 0) {
            
        System.out.println("不是质数,能被"+j+"整除");
                 b = 2;
        break;//加了break什么都跳出了!呵呵!
        }
    }
      

  12.   

    和break没有关系,修改System.in.read应该就可以了
      

  13.   

    import java.io.*;//运行无误,请给分!
    class zhi
    {
      public static void main(String arg[])
      {
       BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
       int i=0,j=2,b=1;
       System.out.println("输入一个数字,我帮你判断是不是质数");
       System.out.flush();
       try
       {
          i=Integer.parseInt(br.readLine());
    System.out.println(i);
       }
       catch(Exception e)
       {
          System.out.println("Cannot read");
       }
       for(j=2;j<(i/2);j++)
       {
         if((i%j)==0) 
         {  b=2; 
    System.out.println("不是质数,能被"+j+"整除");}
        
       }    if (b==1)
          System.out.println("恭喜了,你输入的是质数");
      } }