为什么这个for循环在接收到输入后无限运行?(爪哇)



好的,因此此代码要求用户输入姓名,年份和性别,并显示所选年份的名称排名。它从 url 读取数据并将其放入每年的地图中。然后将这些地图放入数组中,最后向用户显示排名。我的程序在进入 while 循环后永远不会完成运行。这是代码:

public static void main(String[] args) throws MalformedURLException, IOException {
    Scanner input = new Scanner(System.in);
    Map[] boyArray = new Map[10];
    Map[] girlArray = new Map[10];
    System.out.print("Enter year (between 2001 and 2010): ");
    String year = input.nextLine();
    System.out.print("Enter gender (M or F): ");
    String gender = input.nextLine();
    System.out.print("Enter name: ");
    String name = input.nextLine();
    for (int i = 0; i < 10; i++) {
        Map<String, String> boys = new HashMap<>();
        Map<String, String> girls = new HashMap<>();
        try {
            java.net.URL url = new java.net.URL("http://www.cs.armstrong.edu/liang/data/babynamesranking"+ year + ".txt");
            Scanner urlInput = new Scanner(url.openStream());
            while (urlInput.hasNext()) {
                String rank = input.next();
                boys.put(urlInput.next(), rank);
                urlInput.next();
                girls.put(input.next(), rank);
                urlInput.next();
            }
        }
        catch (IOException ex) {
        }
        boyArray[i] = boys;
        girlArray[i] = girls;
    }
    if (gender.charAt(0) == 'M') {
        System.out.println("The name " + name + " was ranked " + boyArray[Integer.parseInt(year) - 2001].get(name) + " in " + year);
    } else {
        System.out.println("The name " + name + " was ranked " + girlArray[Integer.parseInt(year) - 2001].get(name) + " in " + year);
    }
}

}

看起来,正如@uthark已经指出的那样,您的程序正在等待输入,因为在while循环中,您正在等待来自带有行String rank = input.next();(和行girls.put(input.next(), rank);)的System.in的输入。 您可能打算写String rank = urlInput.next();girls.put(urlInput.next(), rank);,以便排名和女孩的名字来自 YYYY .txt http://www.cs.armstrong.edu/liang/data/babynamesranking

最新更新