Поиск в Java-массиве без возврата значения - PullRequest
2 голосов
/ 10 января 2011

Я пытался изменить свой метод на пустоту.Но всякий раз, когда я меняю его, он всегда печатает название книги и сообщение об ошибке.Как я могу изменить свой метод на 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"); 
}

Ответы [ 5 ]

2 голосов
/ 10 января 2011

Вам также необходимо удалить оператор возврата (и заменить первый оператор простым возвратом (без параметров)).

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"); 
}
1 голос
/ 10 января 2011

Вы, вероятно, все еще хотите вернуться, когда нашли книгу - это может быть то, что вы пропустили раньше:

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.)

1 голос
/ 10 января 2011

Попробуйте что-то вроде этого, я уверен, что это будет работать:

0 голосов
/ 10 января 2011

Тип возврата, который вы пытаетесь изменить на void, означает только то, что возвращается методом.Однако этот метод может иметь различные побочные эффекты, такие как ввод-вывод, например, печать на консоли.К сожалению, нет способа ограничить побочные эффекты в Java или в большинстве языков ООП.Функциональное программирование направлено на то, чтобы избавиться от всех побочных эффектов в ваших функциях, чтобы можно было легче рассуждать о программе.

0 голосов
/ 10 января 2011

Вы можете сделать это, используя return без значения:

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