Вопрос по if-statement, java – Нельзя получить еще, если оператор для работы в Java

4

Хорошо, я пытаюсь сделать эту простую вещь, но она не сработает. Я новичок в Java и хотел бы помочь. Каждый раз, когда я запускаю код ниже, я получаю выводThat is not a valid option, Что я делаю неправильно?

<code> package test;

 import java.util.Scanner;

 public class options {
     public void options() {
         Scanner scnr = new Scanner(System.in);
         String slctn;

         System.out.println("What would you like to do?");
         System.out.println("a) Travel the expedition");
         System.out.println("b) Learn more about the expedition");

         slctn = scnr.nextLine();
         if (slctn == "a"){
             travel exeTravel = new travel();
             exeTravel.travel();
         }else if (slctn=="b"){
             learn exeLearn = new learn();
             exeLearn.learn();
         }else{
             System.out.println("That is not a valid option");
         }
     } 
 }
</code>
Не забудьте подтвердить все полезные ответы и "принять" Ответ, который вы найдете наиболее полезным, установив флажок под подсчетом голосов для этого ответа. Jim Garrison
Это основное вJavaВы можете найти очень простую веб-страницу, которая объясняет это (хотя я не голосую) Sam
Добро пожаловать в ТАК. Вы, вероятно, могли бы найти ответ, выполнив поиск, но, поскольку вы новичок, было бы трудно понять, что искать. Я даю вам +1, потому чтоform вашего вопроса почти идеально подходит для SO. Вы либо читалиfaq а такжеHow to Ask, или уже знаете, как правильно формулировать вопросы :-) Jim Garrison

Ваш Ответ

5   ответов
3

slctn.equals("a") буду работать.

Прочитайте это, чтобы понять почему:В чем разница между == и equals () в Java?

6

Ну, во-первых, == является основным оператором в языке. Тип результата выражения является логическим. Для сравнения логических типов сравниваются операнды для одного и того же значения истинности. Для сравнения ссылочных типов сравниваются операнды для одного и того же ссылочного значения (т. Е. Ссылаются на один и тот же объект или имеют нулевое значение). Для числовых типов сравниваются операнды для того же целочисленного значения или эквивалентных значений с плавающей запятой. УвидетьСпецификация языка Java.

Напротив, equals () - это метод экземпляра, который в основном определяется классом java.lang.Object. Этот метод, по соглашению, указывает, равен ли объект-получатель "равному"; переданный в объект. Базовая реализация этого метода в классе Object проверяет равенство ссылок. Другие классы, включая те, которые вы пишете, могут переопределить этот метод для более специализированного тестирования эквивалентности. УвидетьСпецификация языка Java.

Типичная "добрая" поскольку большинство людей использует == для сравнения двух строк, тогда как они действительно должны использовать метод equals () класса String. Исходя из вышесказанного, вы знаете, что оператор будет возвращать только "true" когда обе ссылки ссылаются на один и тот же фактический объект. Но в случае со строками большинство пользователей хотят знать, являются ли значения двух строк одинаковыми или нет, поскольку два разных объекта String могут иметь одинаковые (или разные) значения.

     slctn = scnr.nextLine();
     if (slctn.equals("a")){
         travel exeTravel = new travel();
         exeTravel.travel();
     }else if (slctn.equals("b")){
         learn exeLearn = new learn();
         exeLearn.learn();
     }else{
         System.out.println("That is not a valid option");
     }
1

В java при сопоставлении любого объекта оператор == будет соответствовать только ссылке на эти два объекта.

Если мы возьмем ваш пример slctn == & quot; a & quot ;. Скажем, у slctn есть эталонное значение в abc123, другое твое жало & quot; будет иметь другое значение ссылки, поскольку это не тот же объект.

Метод .equals проверяет, какие буквы в строковом объекте, и соответствует значению букв в двух строках. Поэтому, если ваш объект slctn содержит «a», он будет совпадать со строкой «a»

0

В яве== Оператор сравнивает ссылку двух объектов, например:

String s_1 = new String("Sample");
String s_2 = new String("Sample");

System.out.println(s_1 == s_2);

Результатом будет:

false

это происходит потому, что s_1 - это ссылка на память, а s_2 - это ссылка на разницу в memroy. Для решения этой проблемы вы должны сравнить объекты буксировки поequals метод. для образца

String s_1 = new String("Sample");
String s_2 = new String("Sample");

System.out.println(s_1.equals(s_2));

Результатом будет:

true

3

В Java, когда вам нужно сравнить два объекта дляequality (то есть, чтобы определить, имеют ли они одинаковое значение), вы должны использоватьequals(),== оператор используется для тестирования, если два объектаidenticalто есть, если они являются точно одним и тем же объектом в памяти. В вашем коде замените это:

slctn == "a"
slctn == "b"

С этим:

"a".equals(slctn)
"b".equals(slctn)

Также обратите внимание, что это хорошая идея, чтобы инвертировать порядок сравнения ("a" доslctn), так, на всякий случайslctn нулевой.

Похожие вопросы