黑马程序员技术交流社区
标题:
编译没出错,为什么一运行没有结果。
[打印本页]
作者:
黑马老兵
时间:
2012-4-8 17:57
标题:
编译没出错,为什么一运行没有结果。
class Demo1
{
public static void main(String[] args)
{
int i=2;
for(i = 2; i <= 30; i++)
{
for(int j=1 ;j<=i ; j++)
{
if(i%j==0)
{
break;
}
else
System.out.println("质数"+i);
}
}
}
}
复制代码
错在哪儿呢 ???
作者:
高铭
时间:
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
哎 上面的代码太乱了。。。结果都不正确现在附上解决后的代码
class Demo1
{
public static void main(String[] args)
{
int i=2;
int m;
for(i = 2; i <= 30; i++)
{
boolean b = false;
for(int j=2 ;j< i; j++)
{
if(i%j==0)
{
b=false;
break ;
}
else
b=true;
}
if(b)
System.out.println("质数"+i);
}
}
}
复制代码
作者:
黑马老兵
时间:
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