2011-09-27 53 views
2

我是一般的編程新手,需要一些幫助。在java中使用hashmaps,打破循環和用戶輸入

我正在使用Java.util.TimeZone檢索ID(城市名稱)及其時區。我正在使用散列表來實現這一點。我在地圖上放置了城市名稱和時區,我現在試圖要求用戶進入他們希望獲取時區的城市。

但是,在我的循環中我有一個驗證檢查,以確保城市名稱在哈希映射。它不僅不工作,而且循環也不會中斷。它正確地顯示了它目前的時間,但不是城市的正確時區(我輸入了不同的城市名稱,並且都具有相同的時區)。在打印出當地時間後,用戶可以選擇通過「說是」結束該程序。

如果用戶輸入yes,那麼循環會中斷,程序應該結束。如果他們輸入了其他東西,它應該繼續。

有人可以幫我解決這個問題!這是我的代碼。

import java.util.*; 
import java.util.TimeZone; 
import java.util.Date; 
import java.text.DateFormat; 
import java.util.HashMap; 

class Maps { 
    public static void main(String[] args) { 

     String[] Zone = TimeZone.getAvailableIDs(); 
     int i = 0; 
     for (i = 0; i < Zone.length; i++) { 

      String zone1 = Zone[i].replaceAll("_", " "); 

      if (zone1.indexOf('/') != -1) { 
       zone1 = zone1.substring(zone1.indexOf('/') + 1); 
      } 
      TimeZone tz = TimeZone.getTimeZone(zone1); 

      HashMap hm = new HashMap(); 
      HashMap<String, Integer> map = new HashMap<String, Integer>(); 
      hm.put(zone1, tz); 

      // System.out.println(hm); 

      while (hm != null) { 
       java.util.Scanner input = new java.util.Scanner(System.in); 
       System.out.println("City?"); 
       String city = input.nextLine(); 
       boolean CityExist = hm.containsKey(city); 
       if (CityExist == true) { 
        System.out 
          .println("I can not find a match to the city, sorry. "); 
        break; 
       } 

       TimeZone tz2 = TimeZone.getTimeZone(city); 
       DateFormat timeFormatter = DateFormat.getTimeInstance(); 
       Date now = new Date(); 
       System.out.println("Here: " + timeFormatter.format(now)); 
       System.out.print("Local Time: "); 
       timeFormatter.setTimeZone(tz2); 
       System.out.println(timeFormatter.format(now)); 
       System.out 
         .println("If you would like to quit please enter yes: "); 
       String user = input.nextLine(); 

       if (user.equals("yes") || user.equals("Yes")) { 
        break; 
       } 

      } 

     } 
    } 
} 
+0

請更好地設置您的代碼格式,即縮進。這樣閱讀要容易得多。此外,這看起來像功課,所以我標記爲這樣。 –

回答

2

看起來像你有邏輯倒置:如果CityExist那麼沒有匹配?

+0

我試圖如果CityExist == false以及沒有工作。 – Allie

0

下次請格式化您的代碼。

這樣做,你會看到你的第一個for循環沒有關閉,你正在做的while循環仍然在你的for循環中。

解決方案,在while循環之前放置括號}