Java - 扫描程序问题

时间:2013-11-18 19:19:27

标签: java

我对这里真正基本的东西感到沮丧..扫描仪只是没有做我想做的事情,我不知道为什么,如果有人能帮助我,我真的很感激

所以我正在尝试编写基本库存,我希望扫描程序检查是否输入了有效的构建器名称。字符串变量存储用户输入的单词,如果输入了无效的构建器名称,我只希望该字符串变量等于“ANY”。发生的事情是 - 字符串出现正确(按照我想要的大写字母)和“Any”一样,它不应该!,当输入无效的东西时,什么都不打印(它应该打印“Any”)< / p>

我做了一个简单的SSCCE:

import java.util.Scanner;

public class SSCCE {

    public static void main(String[] args)
    {
        System.out.println("Enter a builder name: ");
        Scanner scan = new Scanner(System.in);
        //scan.useDelimiter("\\z"); // count a blank entry (end of input)

        String entry_1 = scan.next();


        if (entry_1.equalsIgnoreCase("FENDER")
                        || entry_1.equalsIgnoreCase("MARTIN")
                        || entry_1.equalsIgnoreCase("GIBSON")
                        || entry_1.equalsIgnoreCase("COLLINGS")
                        || entry_1.equalsIgnoreCase("OLSON")
                        || entry_1.equalsIgnoreCase("RYAN") 
                        || entry_1.equalsIgnoreCase("PRS")) 
        {
            entry_1 = entry_1.toUpperCase();

            System.out.println(entry_1);
        }


    //  if (entry_1.equals(entry_1.toLowerCase())
    //          || entry_1.equalsIgnoreCase(entry_1)
    //          && (entry_1.equalsIgnoreCase("FENDER")
    //                  || entry_1.equalsIgnoreCase("MARTIN")
    //                  || entry_1.equalsIgnoreCase("GIBSON")
    //                  || entry_1.equalsIgnoreCase("COLLINGS")
    //                  || entry_1.equalsIgnoreCase("OLSON")
    //                  || entry_1.equalsIgnoreCase("RYAN") || entry_1
    //                      .equalsIgnoreCase("PRS"))) 
    //  {
    //      entry_1 = entry_1.toUpperCase();
    //  }

        if (!entry_1.equalsIgnoreCase("FENDER")
                || !entry_1.equalsIgnoreCase("MARTIN")
                || !entry_1.equalsIgnoreCase("GIBSON")
                || !entry_1.equalsIgnoreCase("COLLINGS")
                || !entry_1.equalsIgnoreCase("OLSON")
                || !entry_1.equalsIgnoreCase("RYAN")
                || !entry_1.equalsIgnoreCase("PRS")) {

            entry_1 = "ANY";

            System.out.println(entry_1);
        }   
    }

}

编辑: 感谢所有的回复,现在我只是遇到scan.useDelimiter(“\ z”)的问题; 什么都没有输入它应该说“任何”,所以它确实如此,但现在它总是会说“任何”,即使是正确的输入

5 个答案:

答案 0 :(得分:3)

您的第二个if语句,您要检查!entry_1等,应该使用&&而不是||

"FENDER"会为true等返回!entry_1.equalsIgnoreCase("MARTIN");,在||比较列表中,只有其中一个必须true才能生成整件事归true

答案 1 :(得分:0)

如果条件为else,只需更改整秒;

if (entry_1.equalsIgnoreCase("FENDER")
                            || entry_1.equalsIgnoreCase("MARTIN")
                            || entry_1.equalsIgnoreCase("GIBSON")
                            || entry_1.equalsIgnoreCase("COLLINGS")
                            || entry_1.equalsIgnoreCase("OLSON")
                            || entry_1.equalsIgnoreCase("RYAN") 
                            || entry_1.equalsIgnoreCase("PRS")) 
            {
                entry_1 = entry_1.toUpperCase();

                System.out.println(entry_1);
            }

            else {

                entry_1 = "ANY";

                System.out.println(entry_1);
            } 

答案 2 :(得分:0)

在第二个if中,保证entry_1不是一个案例或者它不是另一个案例或者......逻辑是不正确的。你需要“和”,&&

if (!entry_1.equalsIgnoreCase("FENDER")
        && !entry_1.equalsIgnoreCase("MARTIN")
        && !entry_1.equalsIgnoreCase("GIBSON")
        && !entry_1.equalsIgnoreCase("COLLINGS")
        && !entry_1.equalsIgnoreCase("OLSON")
        && !entry_1.equalsIgnoreCase("RYAN")
        && !entry_1.equalsIgnoreCase("PRS")) {

    entry_1 = "ANY";

    System.out.println(entry_1);
}   

但是,将它作为if附加到第一个else条件会更简单:

if (entry_1.equalsIgnoreCase("FENDER")
                    || entry_1.equalsIgnoreCase("MARTIN")
                    || entry_1.equalsIgnoreCase("GIBSON")
                    || entry_1.equalsIgnoreCase("COLLINGS")
                    || entry_1.equalsIgnoreCase("OLSON")
                    || entry_1.equalsIgnoreCase("RYAN") 
                    || entry_1.equalsIgnoreCase("PRS")) 
{
    entry_1 = entry_1.toUpperCase();

    System.out.println(entry_1);
}
else
{
    entry_1 = "ANY";

    System.out.println(entry_1);
}

答案 3 :(得分:0)

您需要将第二个if语句从使用||更改为&&

if (!entry_1.equalsIgnoreCase("FENDER")
                    && !entry_1.equalsIgnoreCase("MARTIN")
                    && !entry_1.equalsIgnoreCase("GIBSON")
                    && !entry_1.equalsIgnoreCase("COLLINGS")
                    && !entry_1.equalsIgnoreCase("OLSON")
                    && !entry_1.equalsIgnoreCase("RYAN")
                    && !entry_1.equalsIgnoreCase("PRS")) {

如果使用||,则if语句本身只需要其中一个为true,并使ANY显示为输出。使用&& 所有语句必须在if语句执行之前评估为true并显示ANY

答案 4 :(得分:0)

在第二个if()中使用&amp;&amp;不是||。这就是全部;)