Не могли бы вы помочь мне с моим калькулятором l oop? - PullRequest
0 голосов
/ 18 января 2020

Я делаю калькулятор для школьного проекта. Моя проблема в том, что когда я вводю, например, 1 в op = sc.next().charAt(0);, первый оператор if делает свое тело, даже если это не так. Кроме того, он не возвращается в начале l oop, но программа заканчивается. Я все еще новичок в Java, поэтому я здесь. Кроме того, я открыт для любых предложений, чтобы сделать его лучше. :)

Спасибо!


import java.util.Scanner;

public class Kalkulacka {
    public static void main(String[] args) {

        System.out.println("Vitajte v programe na výpočet jednoduchých matematických príkladov!");
        Scanner sc= new Scanner(System.in);
        double a;
        char op = 0;
        double b;
        double priklad = 0;
        int i=0;
        System.out.println("Zadajte číslo");

        a= sc.nextDouble();

        priklad= a;



        while (true) {

            if (i<1) {
                System.out.println("Zvoľte si operátora:");
                System.out.println("1- +");
                System.out.println("2- -");
                System.out.println("3- *");
                System.out.println("4- /");

                op = sc.next().charAt(0);

                if (op != 1 && op != 2 && op != 3 && op != 4) {
                    System.out.println("Zadali ste nesprávne číslo");
                    return;
                }
            }

            if (i>=1) {
                System.out.println("Zvoľte si operátora:");
                System.out.println("1- +");
                System.out.println("2- -");
                System.out.println("3- *");
                System.out.println("4- /");
                System.out.println("5- =");

                op= sc.next().charAt(0);

                if (op!=1 && op!=2 && op!=3 && op!=4 && op!=5) {
                    System.out.println("Zadali ste nesprávne číslo");
                    return;
                }

                if (op==5) {
                    break;
                }
            }

            System.out.println("Zadajte číslo");

            b= sc.nextDouble();

            if (i<1) {
                switch (op) {
                    case 1:
                        priklad = a + b;
                    case 2:
                        priklad = a - b;
                    case 3:
                        priklad = a * b;
                    case 4:
                        priklad = a / b;
                }
            }

            else {
                switch (op) {
                    case 1:
                        priklad = priklad + b;
                    case 2:
                        priklad = priklad - b;
                    case 3:
                        priklad = priklad * b;
                    case 4:
                        priklad = priklad / b;
                }
            }
            i=i++;
        }

        System.out.println("Výsledok je: "+priklad);
    }
}```

Ответы [ 3 ]

2 голосов
/ 18 января 2020

Символ - это не что иное, как число. Вот почему вы можете сравнить char с int, как при проверке op != 1. Однако соответствующий номер - так называемый ASCII-код - для '1' не 1, а 49. 49 определенно не равно 1, поэтому ваше условие op != 1 соответствует.

Либо проверьте на op == 49, либо просто op == '1' (для дальнейших проверок вам обязательно понадобятся соответствующие ASCII-коды 50, 51 и 52).

2 голосов
/ 18 января 2020

Я думаю, что проблема в

                op = sc.next().charAt(0);

            if (op != 1 && op != 2 && op != 3 && op != 4) {
                System.out.println("Zadali ste nesprávne číslo");
                return;
            }

Op - это символ, поэтому, когда вы получаете ввод от пользователя, это '1', '2', '3', '4', но вы проверяете равенство с 1, 2, 3, 4. Условие всегда выполняется, и программа возвращает.

1 голос
/ 18 января 2020

Моя проблема в том, что когда я вводю, например, 1 при op = s c .next (). CharAt (0);, первый оператор if делает свое тело, даже если это не так.

Замените

if (op != 1 && op != 2 && op != 3 && op != 4)

на

if (op != '1' && op != '2' && op != '3' && op != '4')

при сравнении значений char. Если вы хотите сравнить с их значениями ASCII, вы можете использовать op != 49 и так далее. Отметьте https://ee.hawaii.edu/~tep/EE160/Book/chap4/subsection2.1.1.1.html

То же самое относится и к вашему switch...case, то есть вы должны использовать case '1' вместо case 1.

Также оно не возвращается в начале l oop, но программа заканчивается.

Замените return на continue.

...