如何使 else 语句停止重复输出?

How do I make the else statement to stop repeating output?

提问人:idontknowwataymdoing 提问时间:11/2/2023 最后编辑:idontknowwataymdoing 更新时间:11/23/2023 访问量:64

问:

我只是一个初学者,急需帮助。我正在尝试使用带有搜索功能的链表制作一个简单的库存系统,我坚持使此功能取得圆满成功,因为我的 if else 语句包含在一个循环中,当它在列表中找不到元素时,它会重复打印输出。它基本上是遍历每个元素,并在程序每次遍历每个元素时打印我在 else 语句上分配的字符串。我不确定我是否解释得很好,但这是对我的心态造成伤害的代码:

作为参考,fruitMenu 是我的链表的名称。 if 语句工作得很好,只是 else 语句不起作用。

//case five - search for a fruit within the inventory

 public static void caseFive(){
   System.out.print("What fruit would you like to search? Search for:  ");
         int listSize = fruitMenu.size()-1;
         s.nextLine();
         String userSearch = s.nextLine();
        
         
           for (int j = 0; j <= listSize; j++) 
           {
             if (fruitMenu.get(j).equalsIgnoreCase(userSearch))
             {
               System.out.println(userSearch + " is in the inventory");
               System.out.println(fruitMenu);
               break;
             }
             else {
              System.out.println(userSearch + " is not in the inventory");
             }
           }

代码最初是一个 while 循环,但将其更改为 for 循环,因为我希望它能起作用,而且我尝试在 else 语句之后也放一个休息时间,这显然不起作用。我试过把

布尔值 find = false;

并放置在 if (find = true) 中 for 循环中 (fruitMenu.get(j).equalsIgnoreCase(userSearch)) 但它是 S,直到给我同样的 else 语句问题。

由于 if 语句的工作方式正是我想要的,我只是希望 else 语句在用户输入 Cherry 并且它不是列表的一部分时打印一次“Cherry 不在库存中”。

非常感谢您的所有帮助。

java for 循环 if-statement 链接列表

评论

1赞 Jean-Baptiste Yunès 11/2/2023
使用布尔值来捕获测试,并将打印件放在循环之外。
2赞 Holger 11/2/2023
你不需要处理指数。只需使用 然后,正如 Jean-Baptiste Yunès 所说,添加一个变量来记住您是否遇到匹配的元素,并在循环后添加条件打印。永远记住,分配一个值。要比较值,请使用 。但是在变量的情况下,不要比较它们,例如使用for(String element: fruitMenu) { if(element.equalsIgnoreCase(userSearch)) { System.out.println(userSearch + " is in the inventory"); break; } }boolean===booleanif(found) { … }

答:

0赞 Ada 11/2/2023 #1

由于您的循环中有该语句,因此它将为每个与用户搜索词不匹配的水果打印“不在库存中”。您可以设置一个标志来确定是否找到了水果,并且仅在未找到水果时在循环外打印消息:elseforfor

public static void caseFive() {
    System.out.print("What fruit would you like to search? Search for: ");
    int listSize = fruitMenu.size() - 1;
    s.nextLine();
    String userSearch = s.nextLine();
    boolean found = false;

    for (int j = 0; j <= listSize; j++) {
        if (fruitMenu.get(j).equalsIgnoreCase(userSearch)) {
            System.out.println(userSearch + " is in the inventory");
            System.out.println(fruitMenu);
            found = true;
            break; // you found the fruit, so you can exit the loop
        }
    }

    if (!found) {
        System.out.println(userSearch + " is not in the inventory");
    }
}

默认情况下,您的状态是未找到水果,只有在语句中找到水果后才能更改此状态。因此,如果您遍历所有 fruit,而没有找到用户指定的 fruit,则语句中的代码永远不会执行,您的状态仍将是 。因此,将是真的,您的消息将在最后打印一次。ififfound == false!found

0赞 Bryanayrb 11/23/2023 #2

在不重复输出的情况下在列表中查找值。

例如,这是您的列表:

List fruitMenu= Arrays.asList("Durian", "Mango", "Banana");

然后,您需要从用户那里获得输入。

//This is based from your existing method 
public static void caseFive() {
  System.out.print("What fruit would you like to search? Search for: ");
  String userSearch = s.nextLine();
  doSearch(userSearch, fruitMenu);
}

那么你可以考虑这个方法:

public static void doSearch(String userSearch, List fruits)
{
    if (fruits.contains(userSearch))
    {
      System.out.println(userSearch + " is in the inventory");
    }
    else
    {
      System.out.println(userSearch + " is not in the inventory");
    }
}

希望对你有所帮助。:)