Ошибка unreachable statement - Java

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

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

package yourreaction;
 
import javafx.application.Application;
import javafx.event.*;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.input.*;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import java.util.Vector;
import java.util.Random;
 
public class YourReaction extends Application {
    static Scene scene;
    static VBox vbox;
    final static int AmountOfCircles = 9;
    final static int radius = 20;
    static int score = 0;
    
    public static void main(String[] args) {
        launch(args);
    }
    
    public void start(Stage stage) {
        stage.setTitle("Hello World!");
        
        vbox = new VBox(5);
        
        scene = new Scene(vbox, 300, 250);
        
        stage.setScene(scene);
        
        Button B_Start = new Button("Start");
        Button B_Exit  = new Button("Exit");
        
        B_Start.setOnMousePressed(new EventHandler<MouseEvent> () {
            public void handle(MouseEvent me) {
                GameProcess();
            }
        });
        
        B_Exit.setOnMousePressed(new EventHandler<MouseEvent> () {
            public void handle(MouseEvent me)  {
                System.exit(0);
            }
        });
        
        vbox.setAlignment(Pos.CENTER);
        vbox.getChildren().addAll(B_Start, B_Exit);
        
        stage.show();
    }
    
    public static int GameProcess() {
        vbox.getChildren().clear();
        
        Random random = new Random();
        
        HBox hbox = new HBox(5);
        hbox.setAlignment(Pos.CENTER);
        scene.setRoot(hbox);
        
        Circle circle1 = new Circle(radius, Color.RED);
        Circle circle2 = new Circle(radius, Color.RED);
        Circle circle3 = new Circle(radius, Color.RED);
        
        hbox.getChildren().addAll(circle1, circle2, circle3);
        
        while(true) {
            int RandomNum = 1 + random.nextInt(3);
            
            if(RandomNum == 1) circle1.setFill(Color.GREEN);
            if(RandomNum == 2) circle2.setFill(Color.GREEN);
            if(RandomNum == 3) circle3.setFill(Color.GREEN);
            
            circle1.setOnMousePressed(new EventHandler<MouseEvent> () {
                public void handle(MouseEvent me) {
                    circle1.setFill(Color.RED);
                    score++;
                }
            });
            
            circle2.setOnMousePressed(new EventHandler<MouseEvent> () {
                public void handle(MouseEvent me) {
                    circle2.setFill(Color.RED);
                    score++;
                }
            });
            
            circle3.setOnMousePressed(new EventHandler<MouseEvent> () {
                public void handle(MouseEvent me) {
                    circle3.setFill(Color.RED);
                    score++;
                }
            });
        }
        
        return score;
    }
}
Ошибка в 101 строке
return score;
Пишет, собственно, unreachable statement. И почему если обьявить переменную score без static
static int score = 0;
то вылазят еще ошибки в строках
score++;

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

textual
Листинг программы
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
 
/**
 * Created by Artur on 14.07.17.
 */
public class YourReaction extends Application {
 
    private final static int AMOUNT_OF_CIRCLES = 3;
 
    private final static int RADIUS = 20;
 
    private static int score = 0;
 
    private VBox gamePlace;
 
    private Button btStart;
 
    private Button btStop;
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage primaryStage) throws Exception {
 
        gamePlace = new VBox(5);
 
        btStart = new Button("Start");
        btStop = new Button("Stop");
 
        btStart.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                createRoundGame(1000);
            }
        });
 
        btStop.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                Platform.exit();
            }
        });
 
        createMenuGame();
 
        Scene scene = new Scene(gamePlace, 300, 250);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
 
    private void clearGamePlace() {
        gamePlace.getChildren().clear();
    }
 
    private void createMenuGame() {
        clearGamePlace();
        gamePlace.getChildren().addAll(btStart, btStop);
    }
 
    private void createRoundGame(double msWillCircleGreen) {//  метод принимает, количество миллисекунд до того, как появится зелёный круг, собственно сюда и передавай свой изменяемый параметр
        clearGamePlace();
 
        List<Circle> circles = new ArrayList<>(AMOUNT_OF_CIRCLES);//проще оперировать массивом кругов, чем описывать каждый отдельно
        for (int i = 0; i < AMOUNT_OF_CIRCLES; i++)
            circles.add(new Circle(RADIUS, Color.RED));
 
        Random random = new Random();
        Circle circleSuccess = circles.get(random.nextInt(AMOUNT_OF_CIRCLES));//выбираем из массива только один круг рандомно, который будет окрашен в зелёный. P.S. если у тебя начисляются очки только за клик по зелёному кругу, почему у тебя в изначальном варианте обработка на клик мыши была для всех кругов, не учитывая зелёный он или нет? либо у тебя ошибка, либо я тебя не правильно понял, если что поправишь
 
        HBox hbox = new HBox(5);
        hbox.setAlignment(Pos.CENTER);
        hbox.getChildren().addAll(circles);
 
       //вот собственно место твоего вопроса, создаём объект timeline(таймер), указываем ему количество миллисекунд до того, как выполнить собственно какое-либо действие
        Timeline timeline = new Timeline(new KeyFrame(Duration.millis(msWillCircleGreen), new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) { //а это метод, который будет вызван, когда таймер закончится, собственно здесь и прописываем закрашивание нужного круга и обработку по клику на него
                circleSuccess.setOnMousePressed(new EventHandler<MouseEvent>() {//создание обработки по клику должна находиться именно здесь, иначе может произойти ситуация что пользователь кликнет по нужному кругу, до того, как он станет зелёным
                    @Override
                    public void handle(MouseEvent event) {
                        score++;
                        createMenuGame();
                    }
                });
                circleSuccess.setFill(Color.GREEN);//
            }
        }));
 
        gamePlace.getChildren().add(hbox);
        timeline.play();//запускаем таймер
    }
}

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


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

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

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