【问题标题】:Having trouble with for each loop每个循环都有问题
【发布时间】:2020-03-09 15:35:55
【问题描述】:

所以我正在尝试制作这个可以搜索书籍列表然后在 JTextArea 中显示书籍的摆动 GUI。这是我的 actionPerformed 方法

public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("Search Books")){
        String bookName = JOptionPane.showInputDialog(this, "Enter books to search"); // prompts user to enter book title
        if (bookName == null){
            sArea.append("Enter a Book");
        }else{
            for (Book b: ban.getListOfBooks()){ //going through list of books to find matching title
                if (bookName.equals(b.getTitle())){ // appends string if it is equal to one of the book names
                    sArea.append(bookName);
                }else{ 
                    sArea.append("Book not found");
                }
            }
        }
    }else{
        ...

所以我的问题在于 for each 循环。自然,它会为列表中不相等的每个元素打印“找不到书”。所以如果我有十本书,我输入第一本书的名字,它会打印那个然后“找不到书”九次。我怎样才能重新格式化它以只打印出一件事?

【问题讨论】:

    标签: java swing for-loop each


    【解决方案1】:

    你可以使用一个 boolean found 标志,然后在循环结束时检查是否找到了这本书

        }else{
            boolean found = false;
            for (Book b: ban.getListOfBooks()){ //going through list of books to find matching title
                if (bookName.equals(b.getTitle())){ // appends string if it is equal to one of the book names
                    sArea.append(bookName);
                    found = true;
                }else{ 
                }
            }
            if (!found) sArea.append("Book not found");
    
        }
    

    【讨论】:

      【解决方案2】:

      如果您仍想继续使用 foreach 循环,您可以将该部分提取到函数中,在匹配时返回书名,但如果任何书不匹配,则返回“未找到”而不是附加每个迭代

      像这样:

      public String searchBook(List<Book> books, bookName ){
      for (Book b: books)){ //going through list of books to find matching title
          if (bookName.equals(b.getTitle())){ 
              return b.getTitle();
          }
      } 
      
      return "Book not found"; }
      

      所以你只需调用这个函数而不是你的 foreach 循环:

      sArea.append(this.searchBook(ban.getListOfBooks() , bookName))
      

      它更干净。

      最后我不确定使用 append 方法是否正确如果您只想在每次用户搜索时放置结果。

      另外,如果你有一个 List,你可以使用 indexOfcontains 方法来知道一个元素是否存在于列表中,这样会更干净。

      这可以帮助你更多:https://www.baeldung.com/find-list-element-java

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-06
        • 2011-07-15
        • 1970-01-01
        • 2015-06-13
        • 2016-11-08
        • 2013-04-09
        • 2012-01-14
        • 1970-01-01
        相关资源
        最近更新 更多