我需要编写一个程序,该程序可以读取用户的3个字母和3个数字并将其插入到数组中(此格式为ABC-123)。

我如何制作一个循环,要求用户输入5 * 3个字母和5 * 3个数字,直到用户正确回答为止(“请输入3个字母”后仅3个字母,“请输入3个数字”后仅3个数字)?

到目前为止,我的代码:

    package bmm;

    import java.util.*;
    import java.util.regex.Pattern;
    public class bmm {

        public static void main(String[] args) {
            Scanner scr = new Scanner(System.in);
            String[] letter = new String[5];
            int[] number = new int[5];
            int db = 0;
            do {
                for (int i = 0; i < letter.length; i++) {

                    System.out.println("3 letters please:");
                    letter[i] = scr.nextLine();
                    if (Pattern.matches("[a-zA-Z]+", letter[i]) == false || letter[i].length() != 3) {
                        System.out.println("not letters or too short/long");
                    } else {
                        db++;
                    }
                }
            } while (letter[db].length() != 3 && Pattern.matches("[a-zA-Z]+", letter[db]) != true);
        }
    }
}

最佳答案

您最大的问题是如何处理循环。您将它们以错误的顺序嵌套。

您有一个do循环,该循环应该一直循环直到输入字符串符合要求。在该循环内,您有一个遍历数组的for循环(我假设用户应该输入5个有效的许可证号?)。由于从0到4的循环位于内部,因此程序将检查整个数组,然后再检查do末尾的条件。那不是你想要的。您想从输入letter[0]开始,然后继续进行输入,直到用户输入letter[0]的有效输入。然后,您继续输入letter[1],循环直到输入有效,依此类推。我想这就是你想做的,对吗?为此,执行检查的循环必须在for循环内。另外,您已经定义了两个应该表示数组索引的变量idb,并且您的程序似乎对使用的是哪个感到困惑。您不需要两者。

内部循环大致如下所示:

do {
    System.out.println("3 letters please:");
    letter[i] = scr.nextLine();
    if (Pattern.matches("[a-zA-Z]+", letter[i]) == false || letter[i].length() != 3) {
        System.out.println("not letters or too short/long");
    }
} while (letter[i].length() != 3 && Pattern.matches("[a-zA-Z]+", letter[i]) != true);


除了&&这里是错误的。您在上面使用了||;他们为什么要与众不同?实际上,您不应重复两次该条件。您可以将匹配结果保存在boolean变量中:

boolean invalid;
do {
    System.out.println("3 letters please:");
    letter[i] = scr.nextLine();
    invalid = (Pattern.matches("[a-zA-Z]+", letter[i]) == false || letter[i].length() != 3);
    if (invalid) {
        System.out.println("not letters or too short/long");
    }
} while (invalid);


现在您不必担心两次键入表达式时都会犯错。

我不会写完全像这样的代码(对于布尔表达式,您永远不需要说== false== true,而我会使用break而不是boolean变量),但是我希望这应该足以使您前进。

关于java - JAVA车牌号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33204828/

10-10 02:59