标题: 运行出错 [打印本页] 作者: 尹善波 时间: 2012-7-12 02:16 标题: 运行出错 class Count
{
public static void main(String[] args) {
Ti t = new Ti();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
t2.start();
}
}
class Ti implements Runnable
{
private int num = 0;
public void run()
{
while (true)
{
if ((num++)<100)
{
System.out.println(Thread.currentThread().getName()+ ",你是第" + num +"个使用ti的人");
}
}
}
}
根据买票的代码改了一下,运行结果倒是可以,就是cmd得出结果一会儿后出现连续不断的运行
而且显示num的值全为负数,请问这是怎么回事?
作者: 曹印亮 时间: 2012-7-12 06:53
兄弟,我快困死了,但是终于给你改过来了
class Count
{
public static void main(String[] args) {
Ti t = new Ti();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
t2.start();
}
}
class Ti implements Runnable
{
private int num = 0;
public void run()
{
while (true)
{
if (((num++)<100)&(num>0))
{
System.out.println(Thread.currentThread().getName()+ ",你是第" + num +"个使用ti的人");
}
}
}
}
曹印亮 发表于 2012-7-12 06:53
兄弟,我快困死了,但是终于给你改过来了
class Count
{
谢谢啦,不容易啊作者: 王宝康 时间: 2012-7-12 15:59
张天天 发表于 2012-7-12 07:05
出现负数的原因是由于数据存储的造成的
你们写个while(true)这不是死循环么
{:3_64:},每个类型的值总会有个最大值吧,当num到达最大值时
二进制最高位就会由0变为1,就意味着num由正数变为负数
就会出现 上面的结果啦,高,实在是高啊!作者: 封明川 时间: 2012-7-12 17:00
class Count
{
public static void main(String[] args) {
Ti t = new Ti();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
t2.start();
}
}
class Ti implements Runnable
{
private int num = 0;
public void run()
{
while (true) //你没有写退出循环的语句,所以当if的判断执行完之后,会成为死循环,不会退出
{
if ((num++)<100)
{
System.out.println(Thread.currentThread().getName()+ ",你是第" + num +"个使用ti的人");
}
}
}
}作者: 黄锦成 时间: 2012-7-12 22:40
超过了int的值了,当num为int最大值时,加1,就称为了int最小值作者: 李思静 时间: 2012-7-13 06:50
其实楼上的哥们都忽略了一个因素,你只是打印出了结果,这个进程还是在不断的继续执行,就像楼上的哥们说的那样,到了一定的时候由于这个是int类型的,就会变成int类型的最小值,仍然打印。其实排除这个因素,这也是一个死循环,因为while(true)这本来就是一个死循环,楼主并没有给出循环结束的条件,或者什么时候循环跳出。比如说你加上一个else,也可以看出这个循环是死循环。