Java не запускает цикл for

Итак, вот весь код, который имеет значение

       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
               }
           }
       }

отредактируйте комментарии, если хотите, но в основном цикл for должен вызывать деление на все числа, меньшие доминатора, но он даже никогда не открывает цикл for (он не печатает «пустышка» или « true" когда-либо, когда он должен печатать их 24 раза в моем тестировании) не могу понять, почему


person Isaac Davis    schedule 05.11.2019    source источник
comment
Вы проверяете, если 0 ›= dom. Является ли дом отрицательным числом?   -  person darkhouse    schedule 05.11.2019
comment
Я предполагаю, что это вызов dom/i, так как это целочисленное деление.   -  person zero298    schedule 05.11.2019
comment
i >= dom — каков текст Domin.getText() и, следовательно, значение dom? Вы начинаете с i = 0 и проверяете, является ли i БОЛЬШЕ ИЛИ РАВНО dom, поэтому, если dom не является отрицательным числом, это никогда не зациклится.   -  person Stephen P    schedule 05.11.2019
comment
Это не сработает, как ожидалось, либо i никогда не будет ›= dom, либо всегда так, потому что вы увеличиваете i при проверке больше, чем   -  person Tyler    schedule 05.11.2019
comment
Кроме того, проверка точного равенства между значениями с плавающей запятой — не совсем хорошая идея.   -  person zero298    schedule 05.11.2019
comment
THhe dom - доминатор дроби, а также Стивен П, спасибо!   -  person Isaac Davis    schedule 05.11.2019


Ответы (2)


Ваши условия цикла for выглядят неправильно. Ваше начальное условие i = 0, но ваше конечное условие i >= dom. Если dom представляет собой любое целое число больше 0, то цикл for никогда не будет выполняться, потому что i не может быть одновременно 0 и больше или равно числу, которое больше 0. Я думаю, вы хотите сказать i <= dom?

person Joyce Lee    schedule 05.11.2019
comment
да, извините, что потратил время ваших ребят на опечатку - person Isaac Davis; 06.11.2019

У вас есть несколько недостатков здесь. Во-первых, как указывали другие, это неправильно:

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

Единственный случай, когда это действительно сработает, - это если dom равно 0 (в этом случае он запустится ровно один раз). Если 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.

Вы делаете это в нескольких местах вашего кода.

person EJoshuaS - Reinstate Monica    schedule 05.11.2019