2013-10-10 2 views
1

Я работаю в BlueJ для своего университетского курса, и мне было задано базовое задание, где нам нужно, чтобы пользователь вводил определенную информацию о DVD, такую ​​как директор, имя, время работы и т. Д.Unreachable Statement в Java

Я кодирую на Java и также использовал Genio. Следующий код - это то, как я получил и задал информацию внутри переменных;

public void getDVDInfo() { 
    //Ask for info 
    System.out.println("Please Enter the Film Info:"); 
    System.out.println("Film Name: "); 
    System.out.println("Film Director: "); 
    System.out.println("Lead Actor/Actress: "); 
    System.out.println("Running Time: "); 
} 

public void setDVDInfo() { 
    //set user input to variables 
    filmName = Genio.getString(); 
    director = Genio.getString(); 
    leadActor = Genio.getString(); 
    runTime = Genio.getInteger(); 
} 

Это все работает в соответствии с компилятором я использовал в BlueJ, но когда я закодировал функцию, чтобы вернуть информацию пользователю, например, так;

public String seeDVDInfo() { 
    return filmName; 
    return director; 
    return leadActor; 
} 

public int seeRunTime() { 
    return runTime; 
} 

он придумал ошибку компилятора в return director;, который был недостижимым заявление. я не понимаю, откуда это происходит, все выглядит правильно, может ли кто-нибудь мне помочь?

Заранее спасибо хх

+2

Вы пытаетесь вернуть три значения из 'seeDVDInfo'. Вы не можете этого сделать. Что бы вы ожидали от получателя?И когда вы ожидаете, что управление вернется обратно к вызывающему абоненту? (В основном, первый оператор 'return' завершает метод - так что вы никогда не достигнете своих вторых или третьих операторов' return'.) –

+0

Может помочь: http: //docs.oracle.com/javase/tutorial/java/javaOO /returnvalue.html –

ответ

4

Если это, действительно метод в вашем коде:

public String seeDVDInfo() { 
    return filmName; 
    return director; 
    return leadActor; 
} 

Затем, проблема заключается в том, что метод завершается с возврата заявление в. Он выйдет из метода с предоставленным значением.

У вас есть различные способы решить эту проблему, в зависимости от информации, которую вы хотите предоставить/использование:

public String seeDirector() { 
    return director; 
} 
public String seeFilmName() { 
    return director; 
} 
public String leadActor() { 
    return director; 
} 

Принимая во внимание, что Java является языком ООП, я предложил бы создать класс Film, содержащие/инкапсулирует эту информацию, которая может быть возвращена. Так что на самом деле это будет выглядеть примерно так:

public class Film { 
    private String director; 
    private String filmName; 
    private String leadActor; 

    public Film(String director, String filmName, String leadActor) { 
     this.director = director; 
     this.filmName = filmName; 
     this.leadActor = leadActor; 
    } 

    public String getFilmName() { 
     return filmName; 
    } 

    public void setFilmName(String filmName) { 
     this.filmName = filmName; 
    } 

    public String getDirector() { 
     return director; 
    } 

    public void setDirector(String director) { 
     this.director = director; 
    } 
    public String getLeadActor() { 
     return leadActor; 
    } 

    public void setLeadActor(String leadActor) { 
     this.leadActor = leadActor; 
    } 
} 
5

Проблема находится здесь:

public String seeDVDInfo() { 
    return filmName; 
    return director; 
    return leadActor; 
} 
  • Вы не можете иметь несколько операторов возврата в метод в Java.
  • После того, как вы установили return filmName;, для других операторов не существует возможности выполнить команду, поэтому она бросает ошибку «Ошибка недоступности».

См. Это thread, чтобы узнать, почему Unreachable Statement является ошибкой в ​​Java.

+0

Я думаю, мы можем иметь несколько операторов условного возврата в методе – upog

+0

@upog, да, что возможно. –

4

У вас есть ошибки - первый return код будет работать и возвращать значение из filmName, бросить курить метод, поэтому другие возвратные вызовы не могут быть достигнуты.

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

Я предлагаю вам создать DvdInfo класс:

public class DvdInfo { 
    String filmName; 
    String director; 
    String leadActor; 
// getters & setters... 
} 

и использовать его в качестве возвращаемого типа:

public DvdInfoseeDVDInfo() { 
    new DvdInfo(filmName, director, leadActor); 
} 
+0

Этот второй совет действительно полезен, или даже строковый контейнер такого списка. –

+0

Большое вам спасибо - это действительно работает, но для задания мы делаем это в одном большом классе - спасибо хотя! –

+0

@ sᴜʀᴇsʜ ᴀᴛᴛᴀ список не является хорошим вариантом, так как вам нужно запомнить заказ и не может легко проверить данные. Использование POJO для хранения данных - это гораздо лучший подход – BobTheBuilder

4

Первое утверждение в seeDVDInfo метод «обратного FilmName» возвращает переменную и выходит FilmName метод seeDVDInfo ... Таким образом, остальные 2 оператора никогда не будут выполняться. Поэтому, возвращение режиссера и возвращения leadActor являются 'недостижим' ....

public String seeDVDInfo() { 
    return filmName; 
    return director; 
    return leadActor; 
} 

Из Java Tutorials:

A method returns to the code that invoked it when it completes all the statements in the method, reaches a return statement, or throws an exception (covered later), whichever occurs first. 

http://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html

2

Вы не можете иметь несколько возвращается в одном методе, это почему следующий ряд после возврата недостижим

public String seeDVDInfo() { 
    return filmName; 
    //return director; 
    //return leadActor; 
} 
0

Ваша попытка чтобы вернуть три строки ->, которые терпят неудачу.

Используйте вместо этого:

public List<String> seeDVDInfo() { 
    List<String> dvdInfos = new ArrayList<>(); 
    dvdInfos.add(filmName); 
    dvdInfos.add(director); 
    dvdInfos.add(leadActor); 
    return dvdInfos; 
} 
3

Это происходит потому, что, как только вы вернетесь из метода, любой код, оставшегося после возвращения заявление будет недоступен, поэтому он не будет компилироваться.

Здесь я попытаюсь объяснить вам три сценария.

Сценарий 1: Для Кодекса

public void helloWorld() { 
    System.out.println("Hello"); 
    return; 
    System.out.println("World"); 
} 

Prited линия, которая помечена как смелое письмо не будет компилировать.

Сценарий 2:

public void helloWorld() { 
    System.out.println("Hello"); 
if(true) { 
     return; 
    } 
    System.out.println("World"); 
} 

компилируется успешно. Самая общая логика в этих правилах - код, окруженный блоком, недоступен, если условное выражение, определяющее его значение, равно false, а затем блок определяется как недостижимый. Тогда это становится ошибкой.

Только для конструкции 'if' правило отличается. Условное выражение не оценивается и не определяется. Независимо от того, что может быть выражением внутри условия if, не оценивается, чтобы решить, доступен ли кодовый блок, и поэтому мы не получим ошибку, даже если у нас есть постоянное значение «false» как условное выражение в выражении if. Это рассматривается специально, чтобы предоставить средство для разработчика. Разработчики могут использовать переменную флага в выражении if с окончательными значениями по умолчанию как false или true. Просто изменив переменную флага с false на true или наоборот, разработчики могут перекомпилировать программу и использовать ее по-разному.

Сценарий 3:

public void helloWorld() { 
    System.out.println("HelloWorld"); 
while(true) { 
     return; 
    } 
    System.out.println("World"); 
} 

Это дает недостижим Исключение Ошибка компиляции, как объяснено выше.