尝试在For循环中运行Else语句



我在测试应用程序时发现了一个小问题。我有一个println语句,应该运行以通知用户他们已经输入了无效的产品代码.

我有一个for循环它将遍历对象的数组列表,其中if语句将数组列表中的每个项匹配到名为searchTerm的局部变量。.

问题是如果搜索词如果在数组列表中没有匹配项[0],则else语句将运行不止一次,从而多次执行println语句。

static void searchProduct() {

System.out.print("Please enter product code to search: ");
String searchTerm = in.nextLine().toUpperCase();

for (int i = 0; i < report.size(); i++) {
if (report.get(i).code.equals(searchTerm)) { 
System.out.println("****************************************************************************"
+ "nPRODUCT SEARCH RESULTS"
+ "n****************************************************************************");
System.out.println("PRODUCT CODE >>         " + report.get(i).code); 
System.out.println("PRODUCT NAME >>         " + report.get(i).name);
System.out.println("PRODUCT CATERGORY >>    " + report.get(i).category);
System.out.println("PRODUCT WARRANTY >>     " + report.get(i).warranty);
System.out.println("PRODUCT PRICE >>        " + report.get(i).price);
System.out.println("PRODUCT LEVEL >>        " + report.get(i).stock);
System.out.println("PRODUCT SUPPLIER >>     " + report.get(i).supplier);
System.out.println("****************************************************************************");
}

else {
// System.out.println("The product cannot be located. Invalid Product");
}    
} 

System.out.println("Enter (1) to launch menu or any other key to exit");
String opt2 = in.nextLine();
if (opt2.equals("1")) {
mainMenu.Menu();
}
else { System.exit(0); }
}

将打印与循环分开:

循环遍历列表,直到找到项目:

Report r = null;
for (int i = 0; i < report.size(); ++i) {
if (report.get(i).code.equals(searchTerm)) { 
r = report.get(i);
break;
}
}
// or
for (Report rep : report) {
if (rep.code.equals(searchTerm)) {
r = rep;
break;
}
}
// or
Report r = report.stream().filter(rep -> rep.code.equals(searchTerm)).findFirst().orElse(null);

现在,r只有在你发现一些东西时才是非空的,所以,在循环之后:

if (r != null) {
// Print stuff.
} else {
// Print message saying you didn't find it.
}

使用布尔标志来检测是否找到产品:

boolean found = false;
for (int i = 0; i < report.size(); i++) {
if (report.get(i).code.equals(searchTerm)) { 
System.out.println("****************************************************************************"
+ "nPRODUCT SEARCH RESULTS"
+ "n****************************************************************************");
System.out.println("PRODUCT CODE >>         " + report.get(i).code); 
System.out.println("PRODUCT NAME >>         " + report.get(i).name);
System.out.println("PRODUCT CATERGORY >>    " + report.get(i).category);
System.out.println("PRODUCT WARRANTY >>     " + report.get(i).warranty);
System.out.println("PRODUCT PRICE >>        " + report.get(i).price);
System.out.println("PRODUCT LEVEL >>        " + report.get(i).stock);
System.out.println("PRODUCT SUPPLIER >>     " + report.get(i).supplier);
System.out.println("****************************************************************************");
found= true;
}


} 
//end of the loop
if(!found) System.out.println("The product cannot be located. Invalid Product");

将用于搜索'report'中的项的数据结构从List切换到HashMap,以避免必须遍历所有项:

HashMap<String, Integer> quickSearchMapping;
quickSearchMapping = new HashMap<>(); 
for(int i=0 ; i<report.size ; i++ ){
quickSearchMapping.put(report.get(i).code, i);
}
while(TRUE){
System.out.print("Please enter product code to search: ");
String searchTerm = in.nextLine().toUpperCase();
if quickSearchMapping.containsKey(searchTerm){
Report the_report = report.get(quickSearchMapping.get(searchTerm));
//print to user stuff in the_report
break; //break if you wish to
} else {
System.out.println("Code entered didn't match any product.");
}
}

最新更新