#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!! ");