Java не запускает это для цикла - PullRequest
0 голосов
/ 05 ноября 2019

Таким образом, здесь есть смысл кода, который имеет значение

       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 раза в моем тестировании) не может понять, почему

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

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

0 голосов
/ 05 ноября 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.

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

...