2011-01-10 105 views
2

我一直試圖將我的方法更改爲void。但是每當我改變它時,它總是打印出書名和錯誤信息。我如何將我的方法改爲void?在不返回值的情況下在java arraylist中搜索

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"); 
} 
+3

你的代碼不能編譯 - 你必須在`return`之後的方法中有任何語句。你想要完成什麼?你是否想將方法簽名返回類型更改爲`void`?那麼你一定不要使用`return`。 – sleske 2011-01-10 11:27:17

+0

或者你的意思是System.out.println()方法? – Tobias 2011-01-10 11:37:52

回答

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());   
     //removed return i; 
     return; 
    } 
    } 

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

您可以通過使用return沒有價值這麼做:

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

嘗試這樣的事情,我相信它會工作:

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"); 
} 
1

你可能還是要回歸當你找到這本書 - 這可能是你以前錯過的東西:

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的一部分。)

0

你試圖改變爲void的返回類型僅表示該方法返回的內容。然而,該方法可能具有不同的副作用,如I/O,例如打印到控制檯。不幸的是,沒有辦法限制Java或大多數OOP語言的副作用。函數式編程旨在消除函數中的所有副作用,因此可以更輕鬆地推理程序。

相關問題