如何在java的字符串数组中找到正确的字符串?

zzzyeukh  于 2021-07-11  发布在  Java
关注(0)|答案(3)|浏览(435)

我正在自学java,并试图编写一个单独的程序,但我陷入了困境,我假设它在if语句中。当我输入正确的字符串时,它会显示:“id not found”。任何人都可以修复它或指导我如何改进它?
程序描述:有一个包含一些字符串的数组。它要求用户输入一个字符串,然后程序应该检查用户的输入是否在该数组中如果“是”,它应该打印:“id found”,如果不是:“id not found”,并保持循环,直到用户找不到其中一个id-s。

public class CatchYourLuck {

    private static Scanner scanner  = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.print("Input your id: ");
        String[] ids = {"S0362673", "S0362674", "S0362675", "S0362676" +
                        "S0362677", "S0362701", "S0362702", "S0362703" +
                        "S0362704", "S0362705", "S0362737", "S0362738" +
                        "S0362739", "S0362740", "S0362741", "S0362751" +
                        "S0362752", "S0362753", "S0362754", "S0362760" +
                        "S0362761", "S0362769", "S0362770", "S0362771" +
                        "S0362772", "S0362773", "S0362778", "S0362779" +
                        "S0362780", "S0362781", "S0362782", "S0362799" +
                        "S0362800", "S0362801", "S0362802", "S0362803" +
                        "S0362820", "S0362821", "S0362822", "S0362823" +
                        "S0362824", "S0362839", "S0362840", "S0362841" +
                        "S0362842", "S0362845", "S0362846", "S0362850" +
                        "S0362851", "S0362855", "S0307665", "S0307666" +
                        "S0307667", "S0307668", "S0307669", "S0307670" +
                        "S0307671", "S0307672", "S0307673", "S0307674" +
                        "S0307675", "S0307676", "S0307677", "S0307678" +
                        "S0307679", "S0307680", "S0307681", "S0307682" +
                        "S0307683", "S0307684", "S0307685", "S0307686" +
                        "S0307687", "S0307688"
        };

        String luckyId = scanner.nextLine();
        while(true){
            for(int i = 0; i < ids.length; i++){
                System.out.println(ids[i]);
                if(luckyId.equals(ids[i])){
                    System.out.println("\"ID found\"");
                    break;
                }else {
                    System.out.println("\"ID not found\"");
                    luckyId = scanner.nextLine();
            }
        }
        break;
        }
    }
}
rryofs0p

rryofs0p1#

当找到id时,应该中断循环。
您可以使用布尔变量(例如。 found 在下面给出的代码中)跟踪是否找到了id。
代码:

boolean found;
do {
    found = false;
    System.out.print("Input your id: ");
    String luckyId = scanner.nextLine();
    int i;
    for (i = 0; i < ids.length; i++) {
        if (luckyId.equals(ids[i])) {
            System.out.println("\"ID found\"");
            found = true;
            break;
        }
    }
    if (!found) {
        System.out.println("\"ID not found\"");
    }
} while (!found);

示例运行:

Input your id: 123
"ID not found"
Input your id: S0307681
"ID found"
lkaoscv7

lkaoscv72#

您应该将这些条目存储在数组列表中,而不是数组中。然后你可以使用 .contains(luckyId) 打电话确定 luckyId 在你的名单上。
这样就不需要使用循环和条件逻辑。对于另一个可能会读到它的程序员来说,这也要清楚得多。

ljo96ir5

ljo96ir53#

看起来您的代码需要精确的输入(没有空格限制,大小写也一样):-

我们可以做到以下几点instead:-

或者我们只输入准确的输入,在这种情况下,它将在一些简单的修改下工作。

或者

我们的代码如下。你应该注意到我们用了 trim() 以及 toUpperCase() .

private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.print("Input your id: ");
        String[] ids = { "S0362673", "S0362674", "S0362675", "S0362676" + "S0362677", "S0362701", "S0362702",
                "S0362703" + "S0362704", "S0362705", "S0362737", "S0362738" + "S0362739", "S0362740", "S0362741",
                "S0362751" + "S0362752", "S0362753", "S0362754", "S0362760" + "S0362761", "S0362769", "S0362770",
                "S0362771" + "S0362772", "S0362773", "S0362778", "S0362779" + "S0362780", "S0362781", "S0362782",
                "S0362799" + "S0362800", "S0362801", "S0362802", "S0362803" + "S0362820", "S0362821", "S0362822",
                "S0362823" + "S0362824", "S0362839", "S0362840", "S0362841" + "S0362842", "S0362845", "S0362846",
                "S0362850" + "S0362851", "S0362855", "S0307665", "S0307666" + "S0307667", "S0307668", "S0307669",
                "S0307670" + "S0307671", "S0307672", "S0307673", "S0307674" + "S0307675", "S0307676", "S0307677",
                "S0307678" + "S0307679", "S0307680", "S0307681", "S0307682" + "S0307683", "S0307684", "S0307685",
                "S0307686" + "S0307687", "S0307688" };

        String luckyId = scanner.nextLine();
         OL:while (true) {
            for (int i = 0; i < ids.length; i++) {
                if (luckyId.trim().toUpperCase().equals(ids[i])) {
                    System.out.println("\"ID found at ids["+i+"]\"");
                    break OL;
                } 
            }
            System.out.println("\"ID not found\"");
            break;
        }
    }

请注意,有些ID是浓缩的 "S0362703" + "S0362704" 相反。我们确实打破了while循环而不是for循环。最后未找到通知在for循环外部而不是for循环内部。反正差别不大。

相关问题