0

ここに画像の説明を入力

ここに画像の説明を入力

この.javaを取得しました。これを.classにコンパイルしたいと思います。唯一のことは、これを実際に作成した人が非常にずさんなコードを使用したことです。14 個のエラーが発生しましたが、すべて同じです。すべてのエラーがある 3 行があります。それらにはすべて同じエラーがあり、唯一のことは、それらを修正する方法がわからないことです。

エラー例を含むコード:

if(!i$.hasNext()) 
    goto L2;
else 
    goto L1;

エラーは にありgoto、 と言っていillegal start of expressionます。それが最初のエラーです。

  • もう一つはL2と 言っているところnot a statementです。
  • そして再びelseでそれは言い'else without 'if'ます。
  • そしてまた、後藤不法な表現の始まりで。

また、goto はステートメントでさえなく、予約されており、Java で使用されていないため、使用されていないことも知っています。しかし、goto 以外のレーベルにリンクするステートメントを知っている人がいたら教えてください。

更新:私はこれを作っていないことを指摘してもよろしいですか?

4

4 に答える 4

3

gotoはJavaでは実装されていません。これは予約済みのキーワードですが、何もしません。

この質問は以前に尋ねられました:

Javaにgotoステートメントはありますか?

于 2012-11-05T14:57:36.777 に答える
1

gotoJavaにはステートメントがありません。明確にするために、goto Javaの予約キーワードです(Java言語仕様のセクション§3.9を参照)が、まったく使用されません。提供したコードのスニペットはコンパイルすらしません。

見た目では、コードの中間表現、または難読化/逆コンパイルされたソース(gotoおよび$変数識別子のため)を見ているように見えます。元の.javaソースコードファイルを確認してください。

于 2012-11-05T14:57:21.550 に答える
0

これは、ステートマシンの実装をgotoを使用する言語からJavaに変換しようとして失敗した可能性があるように見えます。

Javaでステートマシンを構築する方法はいくつかあります。おそらく最も単純なのは、ループ内のswitchステートメントです。

while(!done) {
  switch(state) {
    case 1:
       ...
       break;
    case 4:
       if(!input.hasNext()) state = 2; else state = 1;
       break;
    case 5:
       ...
       break;
  }
}

インターフェイスを実装するオブジェクトとして現在の状態を表す別の方法があります。メソッドを呼び出して作業を実行し、次の状態を表すオブジェクトを取得できます。

ほぼ確実に、このコードは自動生成されたものであり、人間や逆コンパイルなどによって作成されたものではありません。人間が書いたコードでは、識別子に「$」が使用されることはめったにありません。実際には、形式文法から自動生成されたコンパイラーで見たコードのように見えます。

可能であれば、実際のソースを使用して作業するという以前のアドバイスに同意します。

于 2012-11-05T15:29:43.023 に答える
0

goto の代わりに lable と break を使用できます

元- :

 mylable:  
  for (i = 0; i < 10; i++) {

            if (somecondition) {
               //doSomething()
               break mylable;
          }

     }
于 2012-11-05T15:01:17.427 に答える