2017-10-20 4 views
1

さて、このコードでは、ユーザーに名前、年、性別を入力して、選択した年の名前のランクを表示します。 URLからデータを読み取り、毎年マップに配置します。これらのマップは配列に配置され、最後にランクがユーザーに表示されます。私のプログラムは、whileループに入った後に決して実行を終了しません。ここでは、コードは次のようになります。なぜ入力を受け取った後にthis 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

文字列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);)。ランクと女の子の名前がhttp://www.cs.armstrong.edu/liang/data/babynamesranking YYYY .txtになるように、代わりにString rank = urlInput.next();girls.put(urlInput.next(), rank);と書くことを意味します。

関連する問題