java 执行后异常?

来源:百度知道 编辑:UC知道 时间:2024/06/16 22:44:07
class A1Q3
{
public static void main(String[] args)
{
int p;
int np=1;//why need initialization??

for(int count=1;count<52;count=count)
{
for(int n=2;n<300;n++)
{
for(int a=2;a<n;a++)
{
if(n%a==0)
{
np=n;
break;
}
else
np=1;
}
if(n!=np)
{
p=n;
if(count==51)
break;
System.out.print(p+"\t");
count++;
}
}
if(count%10==0)
System.out.println();
}
}
}

代码如上,为什么执行后光标就停在一行的最开始,而不像一般执行后光标是停在类似F:\>后面.
还有为什么这里np需要初始化变量?

np要为什么初始化,楼上几位讲了
至于光标的问题,应该是程序死循环的原因

if(count==51)
break;

当count = 51 时 break只能跳出第二个for循环,而外部for循环
因为count = 51 < 52 一直成立,造成死循环

对于光标,System.out.println()只是在系统后台打印,不管你输出多少光标都是在开始位置的!
初始化问题:
因为java是面向对象的,所以在使用的时候都要先分配对象,java不会分配一个默认值给他(int np 只是定义了一个名字,但是他的值还不知道),所以在np被调用前,编译器一定要确定np已经被初始化(赋值)

for(int n=2;n<300;n++)
{
for(int a=2;a<n;a++)
{
if(n%a==0)
{
np=n;
break;
}
else
np=1;
}
if(n!=np)
{
p=n;
if(count==51)
break;
System.out.print(p+"\t");
count++;
}
中,n的赋值是在for(int a=2;a<n;a++)中,循环之后有调用(在if(n!=np)中调用)但是对于编译器来说,它不知道for循环是不是被执行,所以它无法确定np有没有被赋值,所以就会报错,需要先初始化!
但是你可以用肯定会执行的循环来做:do{}while(条件);然后在do块里面赋值(if(条件)np=1;else np=0;)

int np=1;//why need initialization