一次输入多行输入

时间:2017-02-16 22:30:37

标签: java loops

所以我的问题是,我在第二次发言时挂了。我应该允许用户输入多行输入(全部同时给出)并且while循环在使用所有输入后结束其自身输入如下

速度限制为40英里/小时,但你的速度超过了65英里/小时

99瓶...

代码只使用第一个输入然后关闭,当我使用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);
}

1 个答案:

答案 0 :(得分:0)

这样做。

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 ...