为什么前100000个平方数的结果是负数?

4

我需要创建一段代码,显示前100000个数字的平方,并测量程序显示每个数字所需的时间。在我的结果中,有时候数字会变成负数,然后又变成正数。为什么会这样?我应该如何修改我的代码以避免出现负数结果?(这种情况在前1000个平方数或10000个平方数中不会发生。)

package assignment.pkg5;

import java.util.Calendar;

public class LoopsLab1000001b {
    public static void main(String[] args) {
        long time_start, time_finish;
        time_start = time();

        int count = 1;
        while (count <= 100000) {
            System.out.println(count * count);
            count++;
        }

        time_finish = time();

        System.out.println(time_finish - time_start + " milli seconds");

    }

    public static long time() {
        Calendar cal = Calendar.getInstance();
        return cal.getTimeInMillis();
    }
}

6
尝试将"int count = 1 ;"更改为"long count = 1 ;"。 - Keith John Hutchison
5
从正数到负数再到正数,这是溢出的明显迹象。你可能得到了一个非常大的数字并且超出了 int 或 long 类型的范围。我猜是 int 类型。 - SnakeDoc
我会尝试将其更改为长整型。(编辑:非常感谢!它起作用了,可能是溢出的问题。) - blue1artic
2
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - SnakeDoc
这并不能解决你的问题(你也找到了答案):我建议你使用System.currentTimeMillis()而不是那个Calendar用法。对于这个特定的问题,它更有效率。 - ROMANIA_engineer
显示剩余2条评论
1个回答

1

整数溢出。请参见维基百科, 特别是:

在某些情况下,程序可能会假定一个变量始终包含正值。如果该变量具有有符号整数类型,则溢出可能导致其值包装并变为负值。这种溢出违反了程序的假设,可能导致意外行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接