我正在自学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;
}
}
}
3条答案
按热度按时间rryofs0p1#
当找到id时,应该中断循环。
您可以使用布尔变量(例如。
found
在下面给出的代码中)跟踪是否找到了id。代码:
示例运行:
lkaoscv72#
您应该将这些条目存储在数组列表中,而不是数组中。然后你可以使用
.contains(luckyId)
打电话确定luckyId
在你的名单上。这样就不需要使用循环和条件逻辑。对于另一个可能会读到它的程序员来说,这也要清楚得多。
ljo96ir53#
看起来您的代码需要精确的输入(没有空格限制,大小写也一样):-
我们可以做到以下几点instead:-
或者我们只输入准确的输入,在这种情况下,它将在一些简单的修改下工作。
或者
我们的代码如下。你应该注意到我们用了
trim()
以及toUpperCase()
.请注意,有些ID是浓缩的
"S0362703" + "S0362704"
相反。我们确实打破了while循环而不是for循环。最后未找到通知在for循环外部而不是for循环内部。反正差别不大。