2017-03-12 197 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-block內部再次聲明。嘗試使用不同的名稱目錄變量。 – SilverNak

+0

你爲什麼要圍繞一個只能執行一次的邏輯進行循環? –

回答

1

因爲你是同一個範圍內聲明的變量datumRodjenja兩次(如LOCALDATE的外面做,而和字符串裏面做,而/試試)。

+0

哦,是的,這是錯誤的否1:D,但問題依然存在。 String datumRodjenja = null; –

+0

刪除該行:LocalDate datumRodjenja = null(如果不需要)。 如果需要,用其他名稱重命名變量String datumRodjenja。 :) –

1

正如其他人指出的,你有一個可變的衝突。 首先,您應該使用顯式變量名稱,並使用適當的類型。其次,再次閱讀有關變量範圍的手冊。

簡短說明:{}之間聲明的變量只存在於這些{}內。 下面的代碼應該更好,但我沒有測試過它。

有些事情我不清楚你的循環。

我有一個老師,她總是告訴用途:用於更好的算法,把它們寫與人類語言紙張之前任何編碼,清楚地識別變量,停止條件等

// 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); 
    } 

}