Java-Синтаксична помилка на токені "! =", Ім'я очікується після цього токену

Я намагаюся зробити простий калькулятор і продовжувати отримувати помилку в заголовку, коли намагаюся показати "помилку", якщо користувач не вводить жодний з вказаних типів операцій.

import java.util.Scanner;

public class experiments {
    public static void main(String args[]) {
        Scanner userInput = new Scanner(System.in);
        String operation;
        double fNum, sNum, ans;

        //select type of operation
        System.out.println("Type addition, subtraction, multiplication, or division, then press enter");
        operation = userInput.nextLine();
        if (operation!=("addition","subtraction","multiplication","division")) {
            System.out.println("error");
        }

        //enter numbers
        System.out.println("Enter first number");
        fNum = userInput.nextDouble();
        System.out.println("Enter second number");
        sNum = userInput.nextDouble();

        //calculate
        if (operation.equals("addition")) {
            ans=fNum + sNum;
        }
        else if (operation.equals("subtraction")) { 
            ans=fNum - sNum;
        }
        else if (operation.equals("multiplication")){
            ans=fNum * sNum;
        }
        else if (operation.equals("division")) {
            ans=fNum/sNum;
        }
        //print answer
        System.out.println("The answer is ");
        System.out.println(ans);    
    }
}
0

7 Відповіді

Ви не можете порівнювати речі з групою таких об'єктів:

operation!=("addition","subtraction","multiplication","division")

Напевно, що ви хочете, це "якщо operation не є однією з цих чотирьох речей". У вас є кілька варіантів. Той, хто найбільше любить те, що ви зараз маєте, створити новий ArrayList (скажімо, legalOperations ), що містить чотири юридичні операції, а потім використовуйте legalOperations.contains (operation) .

Однак чистим способом, який є "кращою Java", було б зробити enum і використовувати його для порівняння.

public enum LegalOperations {
    ADDITION,
    SUBTRACTION,
    MULTIPLICATION,
    DIVISION
}

Тоді ви можете зробити свої порівняння з вашим перерахуванням (можливо, ви надали переписку конструктору, щоб він мав чітке значення для кожного константа переліку, а метод isLegalOperation , наприклад).

2
додано

Java не може зрозуміти цю команду ...

if (operation!=("addition","subtraction","multiplication","division")) {

Натомість потрібно перевірити кожен індивідуально ...

if (!"addition".equals(operation) &&
    !"subtraction".equals(operation) &&
    !"multiplication".equals(operation) &&
    !"division".equals(operation)) {
   //Handle error...
}
1
додано
Любіть подвійні негативи: P
додано Автор MadProgrammer, джерело
@Kevin я міг би просто обернути його в єдиний (...) блок: P
додано Автор MadProgrammer, джерело
@ user2526522: Див також De Morgan's_laws .
додано Автор trashgod, джерело
Я вважаю, що ви хочете && , інакше один з перших двох гарантовано буде правдою.
додано Автор Kevin, джерело
Дякую вам за допомогу всім, я виявив, що це найпростіший, оскільки я ще не вивчив масиви, тому дякую вам за це дуже легко зрозуміти код
додано Автор user2526522, джерело

You should create ArrayList and put value there.
Then you can check if the value exists in the ArrayList.
Like that:
How Arrays.asList(...).contains(...) works?

1
додано
+1 Для нульової ідеї
додано Автор MadProgrammer, джерело
Крім того, я думаю, що це буде List # contains , не потрібно використовувати масиви , оскільки це вже є List : P
додано Автор MadProgrammer, джерело
@MadProgrammer thx
додано Автор Alex, джерело
@MadProgrammer Ви маєте рацію. Але, можливо, автор спочатку бажає створити список з масиву. :)
додано Автор Alex, джерело

Ви можете використовувати метод містить, як це:

String[] operations = {"addition","subtraction","multiplication","division"};
if(!operations.contains(operation)) {
    ...
0
додано

Я думаю, ви можете переписати те саме, що і в

if (!(    operation.equals("addition") || operation.equals("subtraction") ||
          operation.equals("multiplication") || operation.equals("division"))) {
                System.out.println("error");
        }
0
додано
Чи не буде ця помилка друку, навіть якщо ці умови є істинними?
додано Автор Amal Murali, джерело
@AmalMurali, навіть якщо одне з цих умов є істинним, остаточний результат до statements if є помилковим. Якщо вказаний ввід не є одним із умов, то кінцевий результат до if є tru і він друкує помилку
додано Автор Harshavardhan Konakanchi, джерело

if (operation!=("addition","subtraction","multiplication","division")) is incorrect comparison in Java. Use switch statement if you are using Java 7 or string.equals method with multiple if statements.

0
додано

Існує ще один Легкий спосіб зробити це, що передбачає менше написання

як у вас є масив рядків, оголосити його як масив

String [] operations = {"addition", "subtraction", "multiplication", "division"};

потім використовуйте це для перевірки

 if(!Arrays.asList(operations).contains(operation)) {
   System.out.println("error");
 }
0
додано
Було б легше (IMHO) створити List , тоді вам не доведеться створювати тимчасові, короткочасні об'єкти щоразу, коли ви хочете зробити порівняння
додано Автор MadProgrammer, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників