【问题标题】:Java doesn't run this for loopJava 不会运行这个 for 循环
【发布时间】:2019-11-05 18:43:48
【问题描述】:

所以这是重要的代码的整体

       int dom = Integer.parseInt(Domin.getText());
       double fraction = Integer.parseInt(Numer.getText())/Integer.parseInt(Domin.getText());
       String currentlow = "";
       System.out.println("TEST");


       for (int i = 0; i >= dom;i++){ //ok the problem wasn't that it was > dom instead of >= dom
           System.out.println("dummy"); //this doesn't print and it would print every time if it was running the for loop.
           if((num % i == 0)&&(dom % i == 0)){ //this just = checks to see that there's no remainder (like 5/5)
               System.out.println("true"); //this for some reason never triggers even though i'm testing with 5/25
               if ((num/i)/(dom/i) == fraction){ //this is a dummy check to make sure it doesn't round improperly
                   currentlow = String.valueOf(num/i) + "/" + String.valueOf(i); //this sets the value but isn't the problem since the console never says "true"
                    System.out.println(currentlow); //nother dummy check
               }
           }
       }

如果需要,可以编辑 cmets,但基本上 for 循环应该会导致它除以小于支配者的所有数字,但它甚至从未打开 for 循环(它不打印“dummy ” 或“真”,当它应该在我的测试中打印 24 次时)无法弄清楚为什么

【问题讨论】:

  • 您正在检查 0 >= dom。 dom 是负数吗?
  • 我猜是dom/i 调用,因为它是integer division
  • i >= domDomin.getText() 的文本是什么,因此 dom 的值是什么?您从i = 0 开始并检查i 是否大于或等于dom 所以,除非dom 是一个负数,否则它永远不会循环。
  • 它不会按预期工作,要么 i 永远 >= dom 要么它总是因为你在检查大于时增加 i
  • 此外,检查浮点值之间的精确相等性并不是一个好主意。

标签: java for-loop fractions


【解决方案1】:

您的 for 循环条件看起来不对。你的开始条件是i = 0,但你的结束条件是i >= dom。如果 dom 是任何大于 0 的整数,则 for 循环将永远不会执行,因为 i 不能既是 0 又大于或等于大于 0 的数字。我想你的意思是说i <= dom

【讨论】:

  • 是的,很抱歉打错字浪费了你们的时间
【解决方案2】:

这里有一些缺陷。首先,正如其他人指出的那样,这是错误的:

for (int i = 0; i >= dom;i++)

这实际上可行的唯一情况是dom0(在这种情况下它将只运行一次)。如果dom 大于0,那么i 永远不会大于或等于它。另一方面,如果dom 为负数,i总是大于它,因为您在每次迭代中都在执行i++

其次,您的除法不正确。结果如下:

double x = Integer.parseInt("3") / Integer.parseInt("4");
System.out.print(x); // Prints 0.0

实际上是0.0,因为它在做整数除法。但是,这样做的结果:

double x = (double)Integer.parseInt("3") / Integer.parseInt("4");
System.out.print(x); // Prints 0.75

是预期的0.75

您在代码中的多个位置执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    相关资源
    最近更新 更多