在此代码中,对于 while 循环内的条件,错误显示“除以零”。为啥会这样?

Posted

技术标签:

【中文标题】在此代码中,对于 while 循环内的条件,错误显示“除以零”。为啥会这样?【英文标题】:In this code, error showing "division by zero", for the condition inside the while loop. Why is this happening?在此代码中,对于 while 循环内的条件,错误显示“除以零”。为什么会这样? 【发布时间】:2021-01-19 16:32:48 【问题描述】:

在这里,当我在循环中添加 System.out.println(j) 时,初始数字是随机的,接下来的输出是来自 400000 的巨大值 j的值初始化为1,除非提到,while循环是否计算所有int值?

public static void main(String[] args) 
    int num = 31;
    int j = 1, c = 0;
    while (num != 0) 
        //System.out.println(j);
        if (num % j == 0) 
            c += j;
        
        j++;
    
    System.out.println(c);

【问题讨论】:

Java 之于 javascript 就像 Pain 之于绘画,或者 Ham 之于仓鼠。它们完全不同。强烈建议有抱负的编码人员尝试学习他们尝试编写代码的语言的名称。当您发布问题时,请适当地标记它 - 这可以让那些了解您需要帮助的语言的人看到您的问题。 num 的值永远不会改变,所以程序将永远运行。 @Pointy 不是永远。当j为0时,会报错。 while 循环继续进行,直到循环条件变为 false,或者循环由于 break 语句而提前结束。 【参考方案1】:

在正常情况下可以退出循环的唯一方法是 num 变为 0。但是您永远不会将num 重新分配给任何其他号码,所以它始终是31,因此循环不会(以常规方式)结束。

发生的情况是在您的循环中,您在每次通过时都会增加 jj 被声明为 int。 ints 定义了最大值,之后它们变为最小值,因此从最大(正)数开始,再增加一个最小(负)数。然后数数直到达到0。然后当应用程序试图除以0 时抛出异常。 (见这里:What happens when you increment an integer beyond its max value?)

您将400000 视为第一个显示值的原因是因为循环运行得太快,控制台无法正常处理它,而您只看到显示的一些输出。

不确定您要达到什么目的,但为了使该程序以不同的方式工作,请更改循环条件或在其中添加 break 语句 - 如 cmets 中所述。

【讨论】:

以上是关于在此代码中,对于 while 循环内的条件,错误显示“除以零”。为啥会这样?的主要内容,如果未能解决你的问题,请参考以下文章

为啥循环条件内的 iostream::eof 被认为是错误的(即 `while (!stream.eof())`)?

循环的执行过程适用情况和常见错误

do-while与while的区别?

循环语句

如何从while循环内的if条件中断while循环?

While循环语句#yyds干货盘点#