简体   繁体   English

一次接受多行输入

[英]Take in multiple lines of input at once

So my issue is, that i am hung up on the second while statement. 所以我的问题是,我在第二个while语句上挂了电话。 I am supposed to allow the user to put have multiple lines of input(all given at the same time) and the while loop ends its self after all of the input is used the input is as follows 我应该允许用户放置多行输入(同时给出所有输入),并且在使用所有输入后,while循环结束其自身,输入如下

The speed limit is 40 mph, but you were going over 65 时速限制为40 mph,但您的速度超过65

99 bottles of ... 99瓶...

The code only uses the first input then closes, when i use scan.hasNextLine it stays in an infinite loop 该代码仅使用第一个输入然后关闭,当我使用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);
}

Do this. 做这个。

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

Output 产量

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM