【问题标题】:Searching in a java arraylist without returning a value在 java 数组列表中搜索而不返回值
【发布时间】:2011-06-06 11:40:15
【问题描述】:

我一直在尝试将我的方法更改为无效。但是每当我更改它时,它总是会打印出书名和错误消息。如何将我的方法更改为 void?

public int displayBookDetails(String bookName) {
  for (int i = 0; i < classrooms.size(); i++) {
    Library library = librarys.get(i);
    if (library.returnBookName().equals(bookName)) {
      System.out.println("Index: " + i);   
      System.out.println(library.returnBookName());
      System.out.println(library.authorName());           
      return i;
    }
  }
  return -1;
  System.out.println ("Book name is not valid"); 
}

【问题讨论】:

  • 您的代码无法编译 - 在 return 之后的方法中不得有任何语句。你想要完成什么?是否要将方法签名返回类型更改为void?那么你一定不能使用return
  • 或者你的意思是 System.out.println() 方法?

标签: java search arraylist void


【解决方案1】:

您还需要删除 return 语句(并将第一个语句替换为简单的 return(无参数))。

public void displayBookDetails(String bookName) {
  for (int i = 0; i < classrooms.size(); i++) {
    Library library = librarys.get(i);
    if (library.returnBookName().equals(bookName)) {
        System.out.println("Index: " + i);   
        System.out.println(library.returnBookName());
        System.out.println(library.authorName());           
        //removed  return i;
        return;
    }
  }

  // removed return -1;
  System.out.println ("Book name is not valid"); 
}

【讨论】:

  • 这将打印书名和像OP提到的警告。
【解决方案2】:

试试这样的,我相信它会奏效的:

public void displayBookDetails(String bookName) {
  for (int i = 0; i < classrooms.size(); i++) {
    Library library = librarys.get(i);
    if (library.returnBookName().equals(bookName)) {
        System.out.println("Index: " + i);   
        System.out.println(library.returnBookName());
        System.out.println(library.authorName());           
        return; // modified here
    }
  }
  // modified here
  System.out.println ("Book name is not valid"); 
}

【讨论】:

    【解决方案3】:

    当你找到这本书时,你可能还想回来——这可能是你以前错过的:

    public void displayBookDetails(String bookName) {
      for (int i = 0; i < classrooms.size(); i++) {
        Library library = librarys.get(i);
        if (library.returnBookName().equals(bookName)) {
          System.out.println("Index: " + i);   
          System.out.println(library.returnBookName());
          System.out.println(library.authorName());           
          return;
        }
      }
      System.out.println ("Book name is not valid"); 
    }
    

    我个人可能会将“搜索”与“显示”分开:

    public Library getBookDetails(String bookName) {
      for (int i = 0; i < classrooms.size(); i++) {
        Library library = librarys.get(i);
        if (library.returnBookName().equals(bookName)) {
           return library;
        }
      }
      return null;
    }
    
    public void displayBookDetails(String bookName) {
      Library bookDetails = getBookDetails(bookName);
      if (bookDetails == null) {
        System.out.println ("Book name is not valid"); 
      } else {
        System.out.println(bookDetails.returnBookName());
        System.out.println(bookDetails.authorName());           
      }
    }
    

    (请注意,此时当然没有“索引”之类的东西。如果你真的需要显示它,它需要成为Library 的一部分。)

    【讨论】:

      【解决方案4】:

      您可以通过使用不带值的return 来做到这一点:

          System.out.println(library.authorName());           
          return;
      }
      

      【讨论】:

        【解决方案5】:

        您尝试更改为 void 的返回类型仅表示该方法返回的内容。但是,该方法可能具有不同的副作用,例如 I/O,例如打印到控制台。不幸的是,没有办法限制 Java 或大多数 OOP 语言中的副作用。函数式编程旨在消除函数中的所有副作用,因此可以更轻松地对程序进行推理。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-25
          • 1970-01-01
          • 2013-08-29
          • 1970-01-01
          相关资源
          最近更新 更多