尝试使搜索功能(for-each)在找不到匹配项时打印出错误消息
Trying to make a search-function (for-each) print out an error message when no matches is found
我是 Java 的新手,总是犯一些小错误。我确定这只是另一个,但我真的很难理解这个概念。这就是我的代码现在的样子。
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"-变量有误?
您需要在循环之前声明您的 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
语句中使用它时 - 它在 [=12] 之外=] 范围,未知。详见The Java™ Tutorials - Variables
您可以简化您的代码:
public void lstMatching(String searchString)
{
boolean valid = false;
for (String filename : files) {
if (!filename.contains(searchString)) {
// if logic here
} else {
// print
}
}
}
"invalid"变量在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 循环将检查所有文件,如果你的文件在文件名之间,它仍然会 return true(因为 inValid 变量值将始终依赖于最后一个文件的名称,如果姓氏不匹配,则 inValid 将为真,否则为假)。
在 for 循环之前声明 inValid 变量并用值 true 初始化它,如果找到文件名则在 for 循环中将 inValid 变量更改为 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.");
}
}
如果您发现任何困难,请在下方评论告诉我。
我是 Java 的新手,总是犯一些小错误。我确定这只是另一个,但我真的很难理解这个概念。这就是我的代码现在的样子。
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"-变量有误?
您需要在循环之前声明您的 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
语句中使用它时 - 它在 [=12] 之外=] 范围,未知。详见The Java™ Tutorials - Variables您可以简化您的代码:
public void lstMatching(String searchString) { boolean valid = false; for (String filename : files) { if (!filename.contains(searchString)) { // if logic here } else { // print } } }
"invalid"变量在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 循环将检查所有文件,如果你的文件在文件名之间,它仍然会 return true(因为 inValid 变量值将始终依赖于最后一个文件的名称,如果姓氏不匹配,则 inValid 将为真,否则为假)。
在 for 循环之前声明 inValid 变量并用值 true 初始化它,如果找到文件名则在 for 循环中将 inValid 变量更改为 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.");
}
}
如果您发现任何困难,请在下方评论告诉我。