2017-02-16 29 views
0

私の問題は、2番目のwhile文でハングアップしていることです。私は、ユーザーが複数の入力行を同時に入力できるようにする必要があります。すべての入力が使用された後、whileループは自己終了します。複数の入力行を同時に入力する

速度制限は40ですMPH、しかし、あなたは、コードが唯一の私がscan.hasNextLineを使用する場合、それは無限ループに

public static void main(String[] args) throws IOException { 
    Scanner scan = new Scanner(System.in); 
    Scanner scan2 = new Scanner(System.in); 
    List<Integer> numbers = new ArrayList<>(); 
    Pattern p = Pattern.compile("([-+]?[0-9]+(?:\\.[0-9]+)?)"); 

    String phrase; 
    String[] tens = { "Ten", "Twenty", "Thirty", "Fourty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" }; 
    String[] teens = { "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", 
      "Nineteen" }; 
    String[] ones = { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" }; 

    phrase = scan.nextLine(); 

    Matcher m = p.matcher(phrase); 
    while (m.find()) { 
     numbers.add(Integer.parseInt(m.group())); 

    } 
    // Solve 

    while (There is another line of input) {// i need some help here!!! 
     for (int i = 0; i < numbers.size(); i++) { 

      if (numbers.get(i) >= 20) { 

       if (numbers.get(i) % 10 == 0) { 
        phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), 
          tens[((numbers.get(i) - numbers.get(i) % 10)/10) - 1]); 
       } else { 

        phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), 
          (tens[((numbers.get(i) - numbers.get(i) % 10)/10) - 1] + "-" 
            + ones[numbers.get(i) % 10])); 
       } 

      } else if (numbers.get(i) < 20 && numbers.get(i) > 10) { 
       phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), teens[(numbers.get(i) % 10) - 1]); 

      } else if (numbers.get(i) < 10 && numbers.get(i) > 0) { 
       phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), ones[numbers.get(i)]); 
      } else if (numbers.get(i) == 10) { 
       phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), "Ten"); 
      } else if (numbers.get(i) == 0) { 
       phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), "Zero"); 
      } 

     } 

    } 
    System.out.println(phrase); 
} 
+0

あなたは「(すべて同時に与えられた)私は、ユーザが複数の入力行を持って置くことができるようになっています」と言います。そのため、複数行のテキストがコンソールに貼り付けられ、Enterキーを押すと、正しく表示されます。 'hasNextLine()'の直後に別の 'scan.nextLine()'を実行しようとしましたか? –

+0

私の以前の話題を無視し、これを検討する必要があります:http://stackoverflow.com/a/23713487/5629413 –

+0

私の答えがあなたを助けたら、それを答えとして受け入れることができます。 –

答えて

0
のまま、閉じその後、最初の入力を使用しています

...の99

65以上のボトルを行っていました

これを行います。

public static void main(String[] args) throws IOException { 
    Scanner scanner = new Scanner(System.in); 
    Pattern p = Pattern.compile("([-+]?[0-9]+(?:\\.[0-9]+)?)"); 

    String[] tens = {"Ten", "Twenty", "Thirty", "Fourty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}; 
    String[] teens = {"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", 
     "Nineteen"}; 
    String[] ones = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}; 

    String phrase = null; 
    while (scanner.hasNextLine()) { 
     phrase = scanner.nextLine(); 
     // if input is an empty line, exit from loop 
     if (phrase.isEmpty()) { 
      break; 
     } 

     List<Integer> numbers = new ArrayList<>(); 
     Matcher m = p.matcher(phrase); 
     while (m.find()) { 
      numbers.add(Integer.parseInt(m.group())); 
     } 

     for (int i = 0; i < numbers.size(); i++) { 
      if (numbers.get(i) >= 20) { 
       if (numbers.get(i) % 10 == 0) { 
        phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), 
          tens[((numbers.get(i) - numbers.get(i) % 10)/10) - 1]); 
       } else { 
        phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), 
          (tens[((numbers.get(i) - numbers.get(i) % 10)/10) - 1] + "-" 
          + ones[numbers.get(i) % 10])); 
       } 
      } else if (numbers.get(i) < 20 && numbers.get(i) > 10) { 
       phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), teens[(numbers.get(i) % 10) - 1]); 
      } else if (numbers.get(i) < 10 && numbers.get(i) > 0) { 
       phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), ones[numbers.get(i)]); 
      } else if (numbers.get(i) == 10) { 
       phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), "Ten"); 
      } else if (numbers.get(i) == 0) { 
       phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), "Zero"); 
      } 
     } 
     System.out.println(phrase); 
    } 
} 

出力

The speed limit is 40 mph, but you were going over 65 
The speed limit is Fourty mph, but you were going over Sixty-Five 
99 bottles of ... 
Ninety-Nine bottles of ... 
関連する問題