Ошибка unreachable statement - Java

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. package yourreaction;
  2. import javafx.application.Application;
  3. import javafx.event.*;
  4. import javafx.geometry.Pos;
  5. import javafx.scene.Scene;
  6. import javafx.scene.control.*;
  7. import javafx.scene.layout.*;
  8. import javafx.scene.input.*;
  9. import javafx.stage.Stage;
  10. import javafx.scene.shape.Circle;
  11. import javafx.scene.paint.Color;
  12. import java.util.Vector;
  13. import java.util.Random;
  14. public class YourReaction extends Application {
  15. static Scene scene;
  16. static VBox vbox;
  17. final static int AmountOfCircles = 9;
  18. final static int radius = 20;
  19. static int score = 0;
  20. public static void main(String[] args) {
  21. launch(args);
  22. }
  23. public void start(Stage stage) {
  24. stage.setTitle("Hello World!");
  25. vbox = new VBox(5);
  26. scene = new Scene(vbox, 300, 250);
  27. stage.setScene(scene);
  28. Button B_Start = new Button("Start");
  29. Button B_Exit = new Button("Exit");
  30. B_Start.setOnMousePressed(new EventHandler<MouseEvent> () {
  31. public void handle(MouseEvent me) {
  32. GameProcess();
  33. }
  34. });
  35. B_Exit.setOnMousePressed(new EventHandler<MouseEvent> () {
  36. public void handle(MouseEvent me) {
  37. System.exit(0);
  38. }
  39. });
  40. vbox.setAlignment(Pos.CENTER);
  41. vbox.getChildren().addAll(B_Start, B_Exit);
  42. stage.show();
  43. }
  44. public static int GameProcess() {
  45. vbox.getChildren().clear();
  46. Random random = new Random();
  47. HBox hbox = new HBox(5);
  48. hbox.setAlignment(Pos.CENTER);
  49. scene.setRoot(hbox);
  50. Circle circle1 = new Circle(radius, Color.RED);
  51. Circle circle2 = new Circle(radius, Color.RED);
  52. Circle circle3 = new Circle(radius, Color.RED);
  53. hbox.getChildren().addAll(circle1, circle2, circle3);
  54. while(true) {
  55. int RandomNum = 1 + random.nextInt(3);
  56. if(RandomNum == 1) circle1.setFill(Color.GREEN);
  57. if(RandomNum == 2) circle2.setFill(Color.GREEN);
  58. if(RandomNum == 3) circle3.setFill(Color.GREEN);
  59. circle1.setOnMousePressed(new EventHandler<MouseEvent> () {
  60. public void handle(MouseEvent me) {
  61. circle1.setFill(Color.RED);
  62. score++;
  63. }
  64. });
  65. circle2.setOnMousePressed(new EventHandler<MouseEvent> () {
  66. public void handle(MouseEvent me) {
  67. circle2.setFill(Color.RED);
  68. score++;
  69. }
  70. });
  71. circle3.setOnMousePressed(new EventHandler<MouseEvent> () {
  72. public void handle(MouseEvent me) {
  73. circle3.setFill(Color.RED);
  74. score++;
  75. }
  76. });
  77. }
  78. return score;
  79. }
  80. }
Ошибка в 101 строке
Листинг программы
  1. return score;
Пишет, собственно, unreachable statement. И почему если обьявить переменную score без static
Листинг программы
  1. static int score = 0;
то вылазят еще ошибки в строках
Листинг программы
  1. score++;

Решение задачи: «Ошибка unreachable statement»

textual
Листинг программы
  1. import javafx.animation.KeyFrame;
  2. import javafx.animation.Timeline;
  3. import javafx.application.Application;
  4. import javafx.application.Platform;
  5. import javafx.event.ActionEvent;
  6. import javafx.event.EventHandler;
  7. import javafx.geometry.Pos;
  8. import javafx.scene.Scene;
  9. import javafx.scene.control.Button;
  10. import javafx.scene.input.MouseEvent;
  11. import javafx.scene.layout.HBox;
  12. import javafx.scene.layout.VBox;
  13. import javafx.scene.paint.Color;
  14. import javafx.scene.shape.Circle;
  15. import javafx.stage.Stage;
  16. import javafx.util.Duration;
  17.  
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. import java.util.Random;
  21.  
  22. /**
  23.  * Created by Artur on 14.07.17.
  24.  */
  25. public class YourReaction extends Application {
  26.  
  27.     private final static int AMOUNT_OF_CIRCLES = 3;
  28.  
  29.     private final static int RADIUS = 20;
  30.  
  31.     private static int score = 0;
  32.  
  33.     private VBox gamePlace;
  34.  
  35.     private Button btStart;
  36.  
  37.     private Button btStop;
  38.  
  39.     public static void main(String[] args) {
  40.         launch(args);
  41.     }
  42.  
  43.     @Override
  44.     public void start(Stage primaryStage) throws Exception {
  45.  
  46.         gamePlace = new VBox(5);
  47.  
  48.         btStart = new Button("Start");
  49.         btStop = new Button("Stop");
  50.  
  51.         btStart.setOnMousePressed(new EventHandler<MouseEvent>() {
  52.             @Override
  53.             public void handle(MouseEvent event) {
  54.                 createRoundGame(1000);
  55.             }
  56.         });
  57.  
  58.         btStop.setOnMousePressed(new EventHandler<MouseEvent>() {
  59.             @Override
  60.             public void handle(MouseEvent event) {
  61.                 Platform.exit();
  62.             }
  63.         });
  64.  
  65.         createMenuGame();
  66.  
  67.         Scene scene = new Scene(gamePlace, 300, 250);
  68.         primaryStage.setScene(scene);
  69.         primaryStage.show();
  70.     }
  71.  
  72.     private void clearGamePlace() {
  73.         gamePlace.getChildren().clear();
  74.     }
  75.  
  76.     private void createMenuGame() {
  77.         clearGamePlace();
  78.         gamePlace.getChildren().addAll(btStart, btStop);
  79.     }
  80.  
  81.     private void createRoundGame(double msWillCircleGreen) {//  метод принимает, количество миллисекунд до того, как появится зелёный круг, собственно сюда и передавай свой изменяемый параметр
  82.         clearGamePlace();
  83.  
  84.         List<Circle> circles = new ArrayList<>(AMOUNT_OF_CIRCLES);//проще оперировать массивом кругов, чем описывать каждый отдельно
  85.         for (int i = 0; i < AMOUNT_OF_CIRCLES; i++)
  86.             circles.add(new Circle(RADIUS, Color.RED));
  87.  
  88.         Random random = new Random();
  89.         Circle circleSuccess = circles.get(random.nextInt(AMOUNT_OF_CIRCLES));//выбираем из массива только один круг рандомно, который будет окрашен в зелёный. P.S. если у тебя начисляются очки только за клик по зелёному кругу, почему у тебя в изначальном варианте обработка на клик мыши была для всех кругов, не учитывая зелёный он или нет? либо у тебя ошибка, либо я тебя не правильно понял, если что поправишь
  90.  
  91.         HBox hbox = new HBox(5);
  92.         hbox.setAlignment(Pos.CENTER);
  93.         hbox.getChildren().addAll(circles);
  94.  
  95.        //вот собственно место твоего вопроса, создаём объект timeline(таймер), указываем ему количество миллисекунд до того, как выполнить собственно какое-либо действие
  96.         Timeline timeline = new Timeline(new KeyFrame(Duration.millis(msWillCircleGreen), new EventHandler<ActionEvent>() {
  97.             @Override
  98.             public void handle(ActionEvent event) { //а это метод, который будет вызван, когда таймер закончится, собственно здесь и прописываем закрашивание нужного круга и обработку по клику на него
  99.                 circleSuccess.setOnMousePressed(new EventHandler<MouseEvent>() {//создание обработки по клику должна находиться именно здесь, иначе может произойти ситуация что пользователь кликнет по нужному кругу, до того, как он станет зелёным
  100.                     @Override
  101.                     public void handle(MouseEvent event) {
  102.                         score++;
  103.                         createMenuGame();
  104.                     }
  105.                 });
  106.                 circleSuccess.setFill(Color.GREEN);//
  107.             }
  108.         }));
  109.  
  110.         gamePlace.getChildren().add(hbox);
  111.         timeline.play();//запускаем таймер
  112.     }
  113. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.455 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут