Никогда не сравнивайте строки с ==. Вместо этого используйте метод equals (...) или equalsIgnoreCase (...).
Причина, по которой это важно, заключается в том, что == проверяет, являются ли два упомянутых объекта одним и тем же, и вам все равно, если stringVariable1 ссылается на тот же объект, что и stringVariable2. Скорее, вы хотите знать, имеют ли две переменные строки, содержащие одинаковые символы в одном и том же порядке, и именно для этого предназначены эти методы: первый, если вам не нужна капитализация, и второй, если вы это сделаете.
Ваш код будет выглядеть примерно так:
if (op.equals("-")){
answer = first-second;
System.out.println(answer);
} else if (op.equals("+")){
answer = first + second;
System.out.println(answer);
}
//... etc...
Редактировать
Проблема номер два - обработка маркера конца строки. При использовании методов сканера nextInt (), nextDouble () или next () вы должны позаботиться о том, чтобы обрабатывать маркеры конца строки, если достигнут конец строки, чтобы не перепутаться при следующем вызове nextLine ().
Так, например, если пользователь вводит «10», возвращает эту строку кода
second = input.nextDouble();
хорошо, получите 10, но не будете "глотать" маркер конца строки, который остается висящим. Итак, когда эта строка кода называется:
op = input.nextLine();
переменная op получит маркер конца строки, и пользователь даже не сможет ввести код операции "+". Решение состоит в том, чтобы позаботиться о том, чтобы проглотить маркер конца строки, если он достигнут при использовании метода Scanner, который не заканчивается на «Line ()».
Так что после nextDouble () вызовите nextLine () ;. Например, вот так:
String op = "";
System.out.print("Enter first num: ");
first = input.nextDouble();
input.nextLine(); // *** add this to "swallow" the end of line token ***
System.out.print("Enter second num: ");
second = input.nextDouble();
input.nextLine(); // *** add this to "swallow" the end of line token ***
System.out.print("Enter operator: ");
op = input.nextLine();