Ошибка 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;
}
}return score;
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();//запускаем таймер
}
}