#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(" ")