我正在做大学作业,我遇到了这个问题。我需要完成的是当用户输入锌,铁,铝和钠的金属元素时,我希望程序返回true。当被比较的元素为真时,布尔值仍然输出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;
}
答案 0 :(得分:2)
您正在isMetal
内部调用isMetal
,因此您无限期地递归。我想你想要的只是return true;
另外,看看函数String.equals
。 ==
运算符可能没有达到您对Java的期望。
答案 1 :(得分: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"
答案 2 :(得分:1)
比较对象时使用.equals()
而不是==
(字符串是对象)。 ==
将比较对象的引用,而.equals()
将检查它们是否具有相同的值。由于两个对象很少具有相同的引用,因此除了比较基本类型(int,char,但String不是基本类型!)之外,你应该永远不要使用==
。
所以你想要
ff.equals(iron)