Почему мои вложенные if-операторы не повторяют мою переменную int на 1? - PullRequest
1 голос
/ 13 октября 2019

Что я пытаюсь сделать

Я хочу, чтобы мой логический оператор if выполнял итерацию переменной, когда входные данные выходят за пределы диапазона.

Проблема

числа, которые я ввожу, чтобы быть проверенными операторами if, кажется, не работают. Если 3 введенных числа меньше -6,0 или выше 12,3, регистрируется сбой, но переменная int, которую я использовал, кажется, никогда не меняется.

То, что я пытался

Я пытался переключитьсяпорядок итерации и просто использование + 1, но переменная «failures» всегда остается равной 0

import java.util.Scanner;

public class test {

    public static void main(String[] args) {

        String input = "a";
        double aNum1;
        double aNum2;
        double aNum3;
        int aFailures = 0;


        Scanner scnr = new Scanner(System.in);


        //Trix
        while (true) {

            System.out.println("Please enter a command:");
            input = scnr.next();


            if (input.equals("a")) {

                System.out.println("Enter number 1:");
                aNum1 = scnr.nextDouble();
                System.out.println("Enter number 2:");
                aNum2 = scnr.nextDouble();
                System.out.println("Enter number 3:");
                aNum3 = scnr.nextDouble();

                if (aNum1 <= -6.0 && aNum1 >= 12.3) {
                    ++aFailures;
                }
                if (aNum2 <= -6.0 && aNum2 >= 12.3) {
                    ++aFailures;
                }
                if (aNum3 <= -6.0 && aNum1 >= 12.3) {
                    ++aFailures;
                }
            }
            if (input.equals("f")) {

                System.out.println("Azuview failures: " + aFailures);
                break;

            }
        }
    }
}

Я ожидаю, что система выведет «Отказы Azuview 2», когда я введу числа вне логического условияно программа, похоже, не распознает, что вход за пределами диапазона. «aFailures» начинается с 0, но никогда не меняется от операторов if ...

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Проблема в том, что вы используете && (логическое И) вместо || (логическое ИЛИ).

Я немного сжал ваш код, и теперь мы запрашиваем число 3 раза, есличисло находится в диапазоне, мы ничего не делаем, иначе мы повторяем aFailures.

import java.util.Scanner;

public class Main {

    private static boolean checkRange(double input){
        return input <= -6.0 || input >= 12.3;
    }

    public static void main(String[] args) {

        String input;
        int aFailures = 0;

        Scanner scnr = new Scanner(System.in);

        while (true) {

            System.out.println("Please enter a command:");
            input = scnr.next();


            if (input.equals("a")) {

                for(int i = 1; i <= 3; i++){
                    System.out.println("Enter number "+ i + ":");
                    if (Main.checkRange(scnr.nextDouble())) {
                        aFailures++;
                    }
                }
            }
            if (input.equals("f")) {

                System.out.println("Azuview failures: " + aFailures);
                break;

            }
        }
    }
}
0 голосов
/ 13 октября 2019

Оператор && (AND) используется в вашем операторе if, когда вы действительно должны использовать || (OR). aNum1 <= -6.0 && aNum1 >= 12.3 никогда не будет иметь значение true, потому что число, очевидно, не может быть меньше или равно -6,0 и больше или равно 12,3 одновременно.

Что касается остальной части вашей программы, ярешил использовать цикл for вместо трех отдельных целочисленных значений для проверки одного и того же условия три раза.

public static void main(String[] args) {
    String input = "a";
    int aFailures = 0;

    Scanner scnr = new Scanner(System.in);

    while (true) {
        System.out.println("Please enter a command:");
        input = scnr.next();

        if (input.equals("a")) {
            for (int i = 1; i <= 3; i++) {
                System.out.println("Enter number " + i + ": ");
                double num = scnr.nextDouble();
                if (num <= -6.0 || num >= 12.3)
                    aFailures++;
            }
        } else if (input.equals("f")) {
            System.out.println("Azuview failures: " + aFailures);
            break;
        }
    }
    scnr.close();
}
...