Unreachable statement java что это
Перейти к содержимому

Unreachable statement java что это

  • автор:

Ошибка unreachable statement

Прохожу урок на StartAndroid, возникла ошибка в коде, не могу понять как исправить, нужный класс импортирован, всё переписал как в примере, помогите разобраться. Ошибка unreachable statement на строке:

AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo(); 
public class MainActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks < private static final int CM_DELETE_ID = 1; ListView lvData; DB db; SimpleCursorAdapter simpleCursorAdapter; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); db = new DB(this); db.open(); String[] from = new String[]; int[] to = new int[]; simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item, null, from, to, 0); lvData = (ListView) findViewById(R.id.lvData); lvData.setAdapter(simpleCursorAdapter); registerForContextMenu(lvData); getSupportLoaderManager().initLoader(0, null, this); > public void onButtonClick(View view) < db.addRec("sometext " + (simpleCursorAdapter.getCount() + 1), R.drawable.alligator); getSupportLoaderManager().getLoader(0).forceLoad(); >@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) < super.onCreateContextMenu(menu, v, menuInfo); menu.add(0, CM_DELETE_ID, 0, R.string.delete_record); >@Override public boolean onContextItemSelected(MenuItem item) < return super.onContextItemSelected(item); if (item.getItemId() == CM_DELETE_ID) < AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo(); db.delRec(acmi.id); getSupportLoaderManager().getLoader(0).forceLoad(); return true; >return super.onContextItemSelected(item); > @Override protected void onDestroy() < super.onDestroy(); db.close(); >@Override public Loader onCreateLoader(int id, Bundle args) < return new MyCursorLoader(this, db); >@Override public void onLoadFinished(Loader loader, Cursor data) < simpleCursorAdapter.swapCursor(data); >@Override public void onLoaderReset(Loader loader) < >static class MyCursorLoader extends CursorLoader < DB db; public MyCursorLoader(Context context, DB db) < super(context); this.db = db; >@Override public Cursor loadInBackground() < Cursor cursor = db.getAllData(); try < Thread.sleep(18000); >catch (InterruptedException e) < e.printStackTrace(); >return cursor; > > > 

How to Fix Unreachable Statement Errors in Java

How to Fix Unreachable Statement Errors in Java

Introduction to Statements and Compile-time Errors in Java

Statements are foundational language constructs that have an effect on the execution of a program. Statements are similar to sentences in natural languages. In Java, there are three main types of statements, namely expression statements, declaration statements, and control-flow statements [1].

As a compiled programming language, Java has an inbuilt mechanism for preventing many source code errors from winding up in executable programs and surfacing in production environments [2]. One such error, related to statements, is the unreachable statement error.

What Causes the Unreachable Statement Error?

By performing semantic data flow analysis, the Java compiler checks that every statement is reachable and makes sure that there exists an execution path from the beginning of a constructor, method, instance initializer, or static initializer that contains the statement, to the statement itself. If it finds a statement for which there is no such path, the compiler raises the unreachable statement error [3].

Unreachable Statement Error Examples

After a branching control-flow statement

The break , continue , and return branching statements allow the flow of execution to jump to a different part of the program. The break statement allows breaking out of a loop, the continue statement skips the current iteration of a loop, and the return statement exits a method and returns the execution flow to where the method was invoked [4]. Any statement that follows immediately after a branching statement is, by default, unreachable.

After break

When the code in Fig. 1(a) is compiled, line 12 raises an unreachable statement error because the break statement exits the for loop and the successive statement cannot be executed. To address this issue, the control flow needs to be restructured and the unreachable statement removed, or moved outside the enclosing block, as shown in Fig. 1(b).

package rollbar; public class UnreachableStatementBreak < public static void main(String. args) < int[] arrayOfInts = ; int searchFor = 12; for (int integer : arrayOfInts) < if (integer == searchFor) < break; System.out.println("Found " + searchFor); >> > >
UnreachableStatementBreak.java:12: error: unreachable statement System.out.println("Found " + searchFor); ^
package rollbar; public class UnreachableStatementBreak < public static void main(String. args) < int[] arrayOfInts = ; int searchFor = 12; boolean found = false; for (int integer : arrayOfInts) < if (integer == searchFor) < found = true; break; >> if (found) < System.out.println("Found " + searchFor); >> >
Found 12

Rollbar in action

  • Docs Overview
  • Setting up Rollbar
  • Notifications
  • Deploy Tracking
  • Telemetry
  • Security & Compliance
  • API

Ошибка unreachable statement

Author24 — интернет-сервис помощи студентам

ошибка call to super must be first statement in constructor
Всем првет. Решил подучить джаву, начал писить примитивные проги, Соответственно детский вопрос -.

Ошибка unreachable statement
Здравствуйте! при создании простого приложения с базой данных возникла ошибка unreachable.

Unreachable code Cath statement missing ) Type name expected
Всем Салют!У меня проблема в проге.Хочу создать исключение: #include <vcl.h> #pragma hdrstop .

Нюансы синтаксиса: как работают выражения вида statement = statement = statement?
Всем привет. Что значит такое выражение в c++? c = c2 = c/2; и как вообще работают такие.

82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495

Лучший ответ

Сообщение было отмечено savenkodenys как решение

Решение

ЦитатаСообщение от savenkodenys Посмотреть сообщение

unreachable statement

Ошибка означает недостежимый код. Подозреваю, что имеется ввиду, что строка 101 никогда не выполнится, т.к. у вас бесконечный цикл, но я не уверен, попробуйте убрать возвращаемое значение и проверьте, всё равно от него никакого толку нету.

ЦитатаСообщение от savenkodenys Посмотреть сообщение

И почему если обьявить переменную score без static

Потому-что не статичные переменные не доступны в не статичных методах. Статичный метод — это метод всего класса, без привязки к конкретному экземпляру(объекту), соответственно, метод класса ничего не знает о переменных своих объектов(нету ссылки на this), поэтому и ошибка. Если не понятно, то гуглите про статичные поля и методы класса.

12 / 12 / 10
Регистрация: 04.06.2017
Сообщений: 99

dalay_lama, спасибо Вам за толковый ответ. Позвольте задать еще один вопрос. Как вы возможно заметили, я пытаюсь сделать что-то типо игры на реакцию. Суть ее в том, что есть несколько (в моем случае 3 круга) кругов красного цвета. Через определенный промежуток времени (который будет постепенно уменьшаться) рандомный круг закрашывается в зеленый цвет и на него нужно кликнуть мышью. Ну вот, собственно, я пока не знаю как реализовать этот промежуток времени (в течении которого рандомно выбраный круг будет зеленым), можете подсказать? Буду очень благодарен Вам за ответ

82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495

Лучший ответ

Сообщение было отмечено savenkodenys как решение

Решение

savenkodenys, а ты кстати сам пробовал запускать своё приложение? ты в курсе, что твой вечный цикл будет вешает всё твоё приложение? он будет до бесконечности создавать random и задавать circle-ам события на клик мыши, и до действий пользователя дело так и не дойдёт.

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

А собственно конкретно по твоему вопросу — Timeline твоё спасение.

Короче вот, набрасал тебе пример как сделать, чтобы хотяб работало, надеюсь правильно тебя понял:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
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 EventHandlerMouseEvent>() { @Override public void handle(MouseEvent event) { createRoundGame(1000); } }); btStop.setOnMousePressed(new EventHandlerMouseEvent>() { @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(); ListCircle> 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 EventHandlerActionEvent>() { @Override public void handle(ActionEvent event) { //а это метод, который будет вызван, когда таймер закончится, собственно здесь и прописываем закрашивание нужного круга и обработку по клику на него circleSuccess.setOnMousePressed(new EventHandlerMouseEvent>() {//создание обработки по клику должна находиться именно здесь, иначе может произойти ситуация что пользователь кликнет по нужному кругу, до того, как он станет зелёным @Override public void handle(MouseEvent event) { score++; createMenuGame(); } }); circleSuccess.setFill(Color.GREEN);// } })); gamePlace.getChildren().add(hbox); timeline.play();//запускаем таймер } }

почему Unreachable statement

Может кто знает почему у меня int z = 5 подчеркнуто красным с коментарием Unreachable statement ?

public static void main(String[] args) throws IOException  while(true)  int x = System.in.read(); System.out.println(x); > int z = 5; System.out.println(z); >

Комментарии (2)

  • популярные
  • новые
  • старые

Для того, чтобы оставить комментарий Вы должны авторизоваться

Уровень 18

18 апреля 2021, 08:28

У Вас, в строке 3, начинается бесконечный цикл, без возможности выхода. Поэтому все операции после него, недостижимы. Недостижимых операций в Java быть не должно — компилятор не пропустит.

Уровень 24

18 апреля 2021, 11:47

Точно! Я так зациклился на второй части кода, что совсем забыл про цикл. Спасибо!

  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
  • Задачи-игры

Сообщество

JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *