无法在布尔值上返回true值

时间:2014-10-30 21:06:19

标签: java boolean

我正在做大学作业,我遇到了这个问题。我需要完成的是当用户输入锌,铁,铝和钠的金属元素时,我希望程序返回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;
    }

3 个答案:

答案 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)