Возможная ошибка класса?

#java

#java

Вопрос:

 class Randomagain {
    public static void main(String args[]){
        Scanner tuna = new Scanner(System.in); 
        boom boomObj = new boom();
        System.out.println("~~Calculator~~");
        System.out.print("Enter your 1st number: "); int first_num = tuna.nextInt();
        System.out.print("Enter your 2nd number: "); int second_num = tuna.nextInt();

        System.out.print("What do you want to do? [plus,sub,mult,div]:  "); 
        String choice = tuna.nextLine();
        if (choice == "plus") boomObj.addition(first_num, second_num);
        if (choice == "sub") boomObj.subtraction(first_num, second_num);
        if (choice == "mult") boomObj.multiply(first_num, second_num);
        if (choice == "div") boomObj.division(first_num, second_num); 
        else {System.out.println("Please check the fields again!! ");}
    }
}
 

класс boom:

 public class boom {
    private int sub_final, add_final, multi_final, div_final;
    public void addition(int a, int b){
        add_final = a   b; System.out.println(a  "   "  b  " = "  add_final);
    }

    public void subtraction(int a, int b){
        sub_final = a - b; System.out.println(a  " - "  b  " = "  sub_final);
    }

    public void multiply(int a, int b){
        multi_final = a * b; System.out.println(a  " * "  b  " = "  multi_final);
    }

    public void division(int a, int b){
        div_final = a   b; System.out.println(a  " / "  b  " = "  add_final);
    }
}
 

Когда я запускаю его в 3-й команде, это похоже :

 What do you want to do? [plus,sub,mult,div]:  Please check the fields again!! 
 

И я ничего не могу напечатать в качестве его ответа.

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

1. Это потому, что после печати этого сообщения об ошибке ваша программа завершается. Кроме того, вы не можете проверить String эквивалентность с == помощью, вы должны использовать equals() .

2. Почему программа не дождалась ответа от пользователя на вопрос «Что вы хотите сделать?»?

Ответ №1:

tuna.nextLine() будет считывать все содержимое в InputStream , пока не найдет разрыв строки (разделитель строк), который представляет собой пустой текст между вторым введенным вами номером и Enterключом.

Измените его на tuna.next() , чтобы заставить это работать.

Кроме того, вы должны сравнивать String s, используя equals метод, а не используя == :

 //if (choice == "plus")
if (choice.equals("plus")) {
    //...
}
 

Еще одна проблема в вашем коде заключается в том, что последнее else предложение влияет только на ближайший if оператор. Ваш код в настоящее время:

 if (choice.equals("plus") { }
if (choice.equals("sub") { }
if (choice.equals("mul") { }
if (choice.equals("div") { } else { } //only affects here
 

Это означает, что если вы введете какой-то текст, отличный от того, что "div" программа всегда будет выполнять код в else инструкции. Ваш код должен измениться на:

 if (choice.equals("plus") { }
else if (choice.equals("sub") { }
else if (choice.equals("mul") { }
else if (choice.equals("div") { } else { }
 

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

1. Большое спасибо!! Я новичок в Java, поэтому я не был уверен в правильном синтаксисе для строковых функций .. 🙂

Ответ №2:

Вам нужно сравнить choice с буквальной строкой с помощью equals метода, а не с помощью == . Причина в том, что == проверяется, ссылаются ли сравниваемые переменные на один и тот же строковый объект, чего в вашем случае нет.

Итак, замените:

                  if (choice == "plus") boomObj.addition(first_num, second_num);
                  if (choice == "sub") boomObj.subtraction(first_num, second_num);
                  if (choice == "mult") boomObj.multiply(first_num, second_num);
                  if (choice == "div") boomObj.division(first_num, second_num); 
                 else {System.out.println("Please check the fields again!! ");
 

с

                  if (choice.equals("plus")) boomObj.addition(first_num, second_num);
                  if (choice.equals("sub")) boomObj.subtraction(first_num, second_num);
                  if (choice.equals("mult")) boomObj.multiply(first_num, second_num);
                  if (choice.equals("div")) boomObj.division(first_num, second_num); 
                 else {System.out.println("Please check the fields again!! ");