Java 尝试使搜索功能(针对每个)在未找到匹配项时打印错误消息
我对Java非常陌生,总是犯一些小错误。我确信这只是另一个,但我真的很难理解这个概念。这就是我的代码现在的样子Java 尝试使搜索功能(针对每个)在未找到匹配项时打印错误消息,java,for-loop,cannot-find-symbol,Java,For Loop,Cannot Find Symbol,我对Java非常陌生,总是犯一些小错误。我确信这只是另一个,但我真的很难理解这个概念。这就是我的代码现在的样子 public void lstMatching(String searchString) { for(String filename : files) { if(filename.contains(searchString)) { System.out.println(filename); } else{
public void lstMatching(String searchString)
{
for(String filename : files) {
if(filename.contains(searchString)) {
System.out.println(filename);
}
else{
boolean invalid = true;
}
}
if(invalid){
System.out.println("Your search did not match any results.");
}
}
我要做的是,当searchString与任何文件名都不匹配时,获取打印错误消息的方法。为什么我总是收到一条错误消息,说我的“invalid”-变量错误?在循环之前,您需要声明
无效的变量。而且,你似乎颠倒了你的逻辑。您只需要满足一个匹配项,因此在找到匹配项时应更新变量:
public void lstMatching(String searchString)
{
boolean invalid = true;
for(String filename : files) {
if(filename.contains(searchString)) {
System.out.println(filename);
invalid = false;
}
}
if (invalid){
System.out.println("Your search did not match any results.");
}
}
注意以下几点:
invalid
仅在else
范围内已知,因此当您尝试在if
语句中使用它时,它不在else
范围内。有关详细说明,请参见
- 您可以简化代码:
public void lstMatching(String searchString)
{
boolean valid = false;
for (String filename : files) {
if (!filename.contains(searchString)) {
// if logic here
} else {
// print
}
}
}
在else部分声明“无效”变量。
如果找到该文件,则不会声明“invalid”变量,因为它不在else部分中。您正试图使用该变量检查是否找到了该文件
public void lstMatching(String searchString)
{
boolean invalid = false;
for(String filename : files) {
if(filename.contains(searchString)) {
System.out.println(filename);
}
else{
invalid = true;
}
}
if(invalid){
System.out.println("Your search did not match any results.");
}
}
如果使用JDK8,只需几行代码即可完成这项工作:
public void lstMatching(String searchString) {
if (Arrays.asList(files).stream().anyMatch(s -> s.contains(searchString))) {
System.out.println("Your search matched");
} else {
System.out.println("Your search did not match any results.");
}
}
您面临的第一个问题是else块,因为for循环将检查所有文件,如果您的文件位于文件名之间,它仍将返回true(因为无效变量值始终依赖于最后一个文件的名称,如果最后一个文件的名称不匹配,则inValid将为true,否则为false)
在for循环之前声明无效变量,并使用值true初始化它,如果在for循环中找到文件名,则只需将无效变量更改为true并中断,因为不需要进一步检查
public void lstMatching(String searchString)
{
boolean invalid = true;
for(String filename : files) {
if(filename.contains(searchString)) {
System.out.println(filename);
invalid = false;
break;
}
}
if (invalid){
System.out.println("Your search did not match any results.");
}
}
如果您在下面的评论中发现任何困难,请告诉我。您需要在for循环之外声明布尔无效
,否则无效变量将仅在else
范围内可用