2011-09-27 3 views
2

나는 프로그래밍에 새로운 지식이 있으며 도움이 필요하다.해시 맵을 사용하여 자바에서 루프와 사용자 입력을 깨기

저는 Java.util.TimeZone을 사용하여 ID (도시 이름)와 시간대를 검색하고 있습니다. 이 구현하려면 hashmap 사용하고 있습니다. 나는 도시 이름과 시간대를지도에 넣었으며 사용자에게 시간대를 가져 오려는 도시를 입력하라고 요청하고 있습니다.

그러나 내 루프에는 도시 이름이 hashmap에 있는지 확인하는 유효성 검사가 있습니다. 뿐만 아니라 작동하지 않지만 루프도 중단되지 않습니다. 그것은 정확히 현재 시간이지만 도시에 대한 정확한 시간대를 표시하지 않습니다 (여러 도시 이름을 입력했으며 모두 동일한 시간대를 가짐). 도시에있는 현지 시간을 인쇄 한 후 사용자는 "예라고 말하기"로 프로그램을 끝내기로 선택할 수 있습니다.

사용자가 예를 입력하면 루프가 중단되고 프로그램이 종료되어야합니다. 그들이 다른 것을 입력하면 계속해야합니다.

누군가이 문제를 해결할 수 있도록 도와주세요. 여기 내 코드가있다. CityExist 다음 일치가 없었다 경우 : 당신이 논리 반전 한 같은

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

은 같은데?

+0

CityExist == false도 시도했지만 제대로 작동하지 않았습니다. – Allie

0

다음에 코드를 포맷하십시오.

이렇게하면 첫 번째 for 루프가 닫히지 않고 루프가 for 루프 안에 여전히 남아있는 것을 볼 수 있습니다.

해결 방법은 앞에 닫는 브래킷을 넣고 while 루프 앞에 넣으십시오.

관련 문제