-4

试图找出我的代码有什么问题 - 我希望使用浓度数组检查用户输入,如果他们输入任何数组以打印出积极的显示消息......但是,我得到“是的,无论输入如何,每次都是有效的浓度。

import javax.swing.JOptionPane;
public class BASIT_Concentration_Check
{
    public static void main(String[] args) 
    {
        String[] concentrations = {"DTP","HCIT","INFS","NTEL","WDM"};
        String studentconcentration = getStudentConcentration();
        boolean concentrationvalid = isConcentrationValid(studentconcentration, concentrations);
        displayMessage(concentrationvalid);
    }

    public static String getStudentConcentration()
    {
        String studentconcentration = JOptionPane.showInputDialog(null,"What is your B.S. AIT Concentration?");
        return studentconcentration;
    }

    public static boolean isConcentrationValid(String studentconcentration, String [] concentrations)
    {
        boolean concentrationvalid=false;
        for (int i=0;i<concentrations.length;i++)
        {
            if (concentrations[i]==studentconcentration)
                {
                    concentrationvalid = true;
                }
        }
        return concentrationvalid;
    }

    public static void displayMessage(boolean concentrationvalid)
    {
        if (concentrationvalid==true)
        {
            JOptionPane.showMessageDialog(null, "Yes, that is a valid concentration");
        }
        else
        {
            JOptionPane.showMessageDialog(null,"I'm sorry, that is not a valid concentration");
        }
    }
}
4

3 回答 3

1

if (concentrations[i]==studentconcentration)

这不是您在 Java 中比较字符串的方式!

而是使用if (concentrations[i].equals(studentconcentration))

基本上,==只比较引用(或原始类型的值),有关为什么会这样的更详细描述,请参阅此问题

于 2013-11-02T02:08:40.380 回答
0

你有一个比较错误。在 Java 中,使用==运算符对字符串失败,因为字符串不是原始类型,它们是对象。所以你必须使用equalsString类的方法,像这样。

if (concentrations[i].equals(studentconcentration))

这应该有效。如果验证为真,您也可以添加一条break;语句以节省一些 cpu 处理。还有一件事,不需要== true在if比较中添加布尔值,你可以使用

if (concentrationvalid)

上述陈述与您的陈述相同,但更具可读性。

希望这可以帮助。

于 2013-11-02T02:24:13.393 回答
0

您需要使用.equals()来比较 Java 中的字符串。它将返回一个布尔值 true 或 false,如果为 true,则将激活该if语句,如果为 false,则跳过它。

.equalsIgnoreCase() 如果您希望比较忽略字母是大写还是小写,也可以使用。

前任:

if (concentrations[i].equals(studentconcentration))

或者

if (concentrations[i].equalsIgnoreCase(studentconcentration))

希望有帮助!

于 2013-11-02T02:24:21.243 回答