2014-10-30 3 views
0

Я работаю над домашней работой в университете, и я столкнулся с этой проблемой. То, что мне нужно выполнить, - это когда пользователь вводит металлический элемент из цинка, железа, алюминия и натрия. Я хочу, чтобы программа вернулась. Когда сравниваемый элемент является истинным, логическое значение все еще выводит false. Не могли бы вы назвать проблему в этом коде?Не могу вернуть истинное значение на логическом

класс IonicCompound

public class IonicCompound { 

    public static void main(String args[]) { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Please enter a metallic element: "); 
     String element1 = input.nextLine(); 
     System.out.println("Please enter a non-metallic element: "); 
     String element2 = input.nextLine(); 
     Elements element = new Elements(element1, element2); 
     element.isMetal(element.first); 
     if (element.isMetal(element.first) == true) { 
      System.out.println("It's a metallic element "); 
     } else { 
      System.out.println("It's not a metallic element "); 
     } 
    } 
} 

класс Elements

public class Elements { 

    public String first, second; 

    public Elements(String f, String s) { 
     first = f; 
     second = s; 
    } 

    public boolean isMetal(String ff) { 
     if (ff == "iron" || ff == "Iron" || ff == "aluminium" || ff == "Aluminium" || ff == "sodium" || ff == "Sodium" || ff == "zinc" || ff == "Zinc") { 
      return isMetal(ff) == true; 
     } else { 
      return false; 
     } 
    } 

    public String toString() { 
     String element = first + " " + second; 
     return element; 
    } 
+2

Не сравнивать строки с '' ==. Смотрите: [Как сравнить строки в Java?] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java/513839) – Jesper

ответ

2

Вы звоните isMetal изнутри isMetal, так что вы рекурсии на неопределенный срок. Я думаю, что вы хотите просто return true;

Также взгляните на функцию String.equals. Оператор ==, вероятно, не выполняет то, что вы ожидаете в Java.

2

Для сравнения строк используется метод String API equals. Ниже приведен пример, который может быть применен в вашем коде:

ff.equals("iron") // This compares if String contain the same series of characters 

ff=="iron" // this compares if the memory address of the ff variable is "iron" 
+0

Большое спасибо. Проблема была в равной степени, теперь она отлично работает. – totovic

+0

используйте equalsIgnoreCase(), чтобы убедиться, что он возвращает true для «iron» и «Iron». – WarrenFaith

1

Использование .equals() в отличие от == при сравнении объектов (Строки являются объектами). == будет сравнивать ссылки на объекты, тогда как .equals() проверит, имеют ли они одинаковые значения. Поскольку у двух объектов очень редко есть одна и та же ссылка, вы никогда не должны использовать ==, за исключением сравнения примитивных типов (int, char, но String не является примитивным типом!), Где это не имеет значения.

Так что вы хотите

ff.equals(iron)