Получение сообщения об ошибке при запуске этого базового калькулятора

#java #syntax #calculator

#java #синтаксис #калькулятор

Вопрос:

Я новичок в Java (на самом деле я делаю это только около 3 дней).. У меня есть базовые знания Python, и я решил изучить Java. Сегодня я создал свою первую программу калькулятора на Java и использовал те же настройки для программы, что и в программе на Python. Дело в том, что я получаю сообщение об ошибке каждый раз, когда я его запускаю, особенно когда он спрашивает, какой знак я хочу использовать в строке 16. я знаю, что это так просто, и я уверен, что моя проблема настолько глупа, но я только привыкаю к синтаксису и прочим, поэтому яхотел бы знать, что я делаю не так. Вот код:

     import java.util.Scanner;

    class Experiment {
        public static void main(String[] args){
            double num1, num2, ans = 0;
            String sign;
            Scanner num = new Scanner(System.in);

            System.out.print("Enter first number: ");
            num1 = num.nextDouble();

            System.out.print(" , -, x or /? ");
            sign = num.nextLine();

            System.out.print("Enter second number: ");
            num2 = num.nextDouble();

            if(sign == " "){
                System.out.print(num1);
                System.out.print(" ");
                System.out.print(num2);
                System.out.print("=");
                System.out.print(num1   num2);
           }
           if(sign == "-"){
                System.out.print(num1);
                System.out.print("=");
                System.out.print(num2);
                System.out.print("=");
                System.out.print(num1 - num2);
           }
           if(sign == "x"){
                System.out.print(num1);
                System.out.print("x");
                System.out.print(num2);
                System.out.print("=");
                System.out.print(num1 * num2);
           }
           if(sign == "/"){
                System.out.print(num1);
                System.out.print("/");
                System.out.print(num2);
                System.out.print("=");
                System.out.print(num1   num2);
           } else {
                System.out.print("That is not a valid input");
           }

           }    
}
  

Ответ №1:

Несколько вещей: в строке 13 вы хотите

 sign = num.next();
  

В if блоках вы хотите использовать метод equals для строки, а не оператор equals, т. Е. Вы sign.equals(" ") не хотите sign == " "
Как вы увидите, они принимают разные значения.

Кроме того, в вашем конкретном наборе if инструкций вы хотите начать с if , а затем следующие 3 блока if должны быть else if

Это связано с тем, что последний else оператор всегда будет срабатывать, если sign.equals("/") не примет значение true. Это последнее else утверждение относится только к if правому над ним, а не к другим if утверждениям.

Комментарии:

1. Ааа, теперь я это вижу! Спасибо 🙂

Ответ №2:

 import java.util.Scanner;

    class Experiment {
        public static void main(String[] args){
            double num1, num2, ans = 0;
            String sign;
            Scanner num = new Scanner(System.in);

            System.out.print("Enter first number: ");
            num1 = num.nextDouble();

            System.out.print("Enter  , -, x or /: ");
            sign = num.next();

            System.out.print("Enter second number: ");
            num2 = num.nextDouble();

            if(sign.equals(" ")){
                System.out.print(num1);
                System.out.print("   ");
                System.out.print(num2);
                System.out.print(" = ");
                System.out.print(num1   num2);
           }
           else if(sign.equals("-")){
                System.out.print(num1);
                System.out.print(" - ");
                System.out.print(num2);
                System.out.print(" = ");
                System.out.print(num1 - num2);
           }
           else if(sign.equals("x")){
                System.out.print(num1);
                System.out.print(" x ");
                System.out.print(num2);
                System.out.print(" = ");
                System.out.print(num1 * num2);
           }
           else if(sign.equals("/")){
                System.out.print(num1);
                System.out.print(" / ");
                System.out.print(num2);
                System.out.print(" = ");
                if (num2 != 0.0)
                    System.out.print(num1 / num2);
                else
                    System.out.print("Cannot divide by 0");
           } else {
                System.out.print("That is not a valid input");
           }

     }    
}
  

Здесь после ввода первого числа пользователь нажмет enter, поэтому ваш sign = num.nextLine() будет читать этот ввод, поэтому вы должны использовать num.next() . Ваше условие all должно быть if...else if...else и для сравнения строк, которые вы должны использовать sign.equals(" ")