2017-03-12 20 views
-2

ちょっと頭を上げることができません。 whileループやtryブロックでdatumRodjenja変数を使用できないのはなぜですか?ループ外で変数を宣言してループ内で使用する

boolean unosDatuma = false; 
LocalDate datumRodjenja = null; 

    do { 
     try { 
      String datumRodjenja = sc.nextLine(); 
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); 
      return LocalDate.parse(datumRodjenja, formatter); 
     } catch (Exception ex1) { 
      System.out.println("Neispravan datum: "); 
      return unosDatumRodenja(sc); 
     } 

    } while (unosDatuma == false); 
+1

なぜあなたはdatumRodjenjaを再宣言していますか?なぜあなたはこれを行うことができないのかを見てください:https://stackoverflow.com/questions/27092245/can-i-change-declaration-type-for-a-variable-in-java –

+0

変数 'datumRodjenja' istは既に宣言されていますブロック。だから、tryブロック内で再び宣言することはできません。変数とは異なる名前を使用してみてください。 – SilverNak

+0

なぜ、一度しか実行できないロジックの周りにループをラッピングしていますか? –

答えて

1

あなたが2倍(としてLOCALDATE外-しばら​​く操作を行うと、しばらくん/してみてください内部の文字列と)同じスコープ内datumRodjenja変数を宣言しているので。

+0

ああ、ええ、それは間違いです.D:しかし、問題は残っています。 String datumRodjenja = null; –

+0

行を削除します。LocalDate datumRodjenja = null(必要でない場合)。 必要に応じて、変数datumRodjenjaの名前を別の名前に変更します。 :) –

1

他の人が指摘したように、可変の競合があります。 まず、明示的な変数名を使用し、適切な型を使用する必要があります。 第2に、可変範囲に関するマニュアルをもう一度読んでください。

{}の間に宣言された変数は、これらの{}内にのみ存在します。 次のコードは良くなるはずですが、テストしていません。

あなたのループで私には不明な点がいくつかあります。私は常に使用することを告げた教師だった

:より良いアルゴリズムのために、明確に変数を識別し、任意の符号化前の人間の言語で紙の上にそれらを書くと、停止条件など

// still something unclera in this code ... 
boolean unosDatuma = false; 
String datumRodjenja = null; 
LocalDate myDate; 

    do { 
     try { 
      datumRodjenja = sc.nextLine(); 
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); 
      myDate = LocalDate.parse(datumRodjenja, formatter); 
      unosDatuma = true; // use a consistent exit loop condition 
     } catch (Exception ex1) { 
      System.out.println("Neispravan datum: "); 
      // IMO you should print the exception too ... 
      // exit loop too ?! 
     } 

    } while (unosDatuma == false); // now this looks useful ... 

と私に奇妙な何かがありますあなたのunosDatuma変数は役に立たないと思われます。ループ出口条件はreturnです。

0

この問題の理由は既に説明しましたが、コードの記述方法を修正しようとしています。実際、コードは奇妙に見えます。以下のように修正してください。あなたのロジックでループが必要ない場合は、必要に応じてif条件を使用することができます。

boolean unosDatuma = false; 
LocalDate datumRodjenja = null; 

if(!unosDatuma){ 
    try { 
     datumRodjenja = sc.nextLine(); 
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); 
     return LocalDate.parse(datumRodjenja, formatter); 
    } catch (Exception ex1) { 
     System.out.println("Neispravan datum: "); 
     return unosDatumRodenja(sc); 
    } 

} 
関連する問題