黑马程序员技术交流社区

标题: 编译没出错,为什么一运行没有结果。 [打印本页]

作者: 黑马老兵    时间: 2012-4-8 17:57
标题: 编译没出错,为什么一运行没有结果。
  1. class  Demo1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int i=2;
  6.                 for(i = 2; i <= 30; i++)
  7.                 {
  8.                                 for(int j=1 ;j<=i ; j++)
  9.                                 {
  10.                                                 if(i%j==0)
  11.                                                         {
  12.                                                                 break;
  13.                                                         }
  14.                                                 else       
  15.                                                         System.out.println("质数"+i);
  16.        
  17.                                 }
  18.                 }
  19.         }
  20. }
复制代码
错在哪儿呢 ???
作者: 高铭    时间: 2012-4-8 18:03
当你j=1,  符合if条件 直接就跳出循环了  ....出结果就坏了
作者: 高铭    时间: 2012-4-8 18:04
2/1 余数=0 ...
作者: 黑马老兵    时间: 2012-4-8 18:05
呃。。。我一直当成1除2 了 太低级了。。。
作者: 黑马-刘昌文    时间: 2012-4-8 18:18
应该把int i=2定义成局部变量!当i=2,j=1时i%j==0,执行break()跳出循环,然后下次在进入循环时还是重复执行这个操作,固永远不会进入到else语句中!

作者: 黑马-刘昌文    时间: 2012-4-8 18:18
应该把int i=2定义成局部变量!当i=2,j=1时i%j==0,执行break()跳出循环,然后下次在进入循环时还是重复执行这个操作,固永远不会进入到else语句中!

作者: 邓海涛    时间: 2012-4-8 18:24
第一次循环的时候,i=2,j=1
    i%j==0满足了if语句执行了break,所以没有打印结果
作者: 黑马老兵    时间: 2012-4-8 18:27
哎 上面的代码太乱了。。。结果都不正确现在附上解决后的代码
  1. class  Demo1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int i=2;
  6.                 int m;
  7.                 for(i = 2; i <= 30; i++)
  8.                 {
  9.                                 boolean b = false;
  10.                                 for(int j=2 ;j< i; j++)
  11.                                 {
  12.                                                 if(i%j==0)
  13.                                                         {
  14.                                                                         b=false;
  15.                                                                         break ;
  16.                                                         }
  17.                                                 else
  18.                                                         b=true;
  19.                                 }
  20.                                 if(b)
  21.                                 System.out.println("质数"+i);
  22.                                
  23.        
  24.                 }
  25.         }
  26. }
复制代码

作者: 黑马老兵    时间: 2012-4-8 18:58
还是不够优化。。。
作者: 彭威    时间: 2012-4-8 19:52
for(int j=1 ;j<=i ; j++)

                                {

                                                if(i%j==0)

                                                        {

                                                                break;
                                                          }
这内循环 说明每次 j取开始的1 就符合条件,break跳出了,内循环停止了;
所以是输出不到结果的。
作者: pray    时间: 2014-4-26 06:11
发贴看看自己积分




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2