Ошибка 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();//запускаем таймер } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д