在java中使用hashmaps,打破循环和用户输入

时间:2011-09-27 00:56:32

标签: java

我对编程很新,需要一些帮助。

我正在使用Java.util.TimeZone来检索ID(城市名称)及其时区。我正在使用hashmap来实现这一点。我已将城市名称和时区放在地图中,我现在正试图要求用户输入他们希望获得时区的城市。

然而,在我的循环中,我进行了验证检查,以确保城市名称在hashmap中。它不仅不起作用,而且循环也不会破坏。它正确地显示了当前的时间,但不是城市的正确时区(我输入了各种城市名称,并且所有城市都有相同的时区)。打印出当地时间后,用户可以选择通过“说是”来结束该程序。

如果用户输入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;
                }

            }

        }
    }
}

2 个答案:

答案 0 :(得分:2)

看起来您的逻辑是倒置的:如果CityExist那么没有匹配?

答案 1 :(得分:0)

请在下次格式化您的代码。

执行此操作后,您会看到第一个for循环未关闭,而您while循环内仍在进行for循环。

解决方案,在}循环前放置括号while