2017-10-20 138 views
1

好吧,这段代码要求用户输入名称,年份和性别,并显示所选年份的名称排名。它从网址读取数据,并将其放入每年的地图中。然后将这些映射放入数组中,最后将等级显示给用户。进入while循环后,我的程序从未完成运行。下面是代码:为什么这个for循环在接收输入后无限地运行? (Java)

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

} 

}

+2

String rank = input.next(); < - 看起来像你想要urlInput。同样适用于girls.put(input.next(),rank); – uthark

+0

非常感谢你!我无法相信我没有注意到这一点。我已经坚持了几个小时哈哈。它现在有效! – macdaddy

回答

0

它看起来像,作为@uthark已经指出的那样,你的程序是等待输入,因为在你的while循环你从System.in与线等待输入String rank = input.next();(和行girls.put(input.next(), rank);)。您可能的意思是编写String rank = urlInput.next();girls.put(urlInput.next(), rank);,以便排名和女孩姓名来自http://www.cs.armstrong.edu/liang/data/babynamesranking YYYY .txt

相关问题