gpt4 book ai didi

java - 无法获得正确的字符串输入

转载 作者:行者123 更新时间:2023-12-02 08:10:29 25 4
gpt4 key购买 nike

我正在用Java编写一个方法,用户应该在其中输入汽车的牌照。前两个符号必须是大写字母,第三个符号必须是 1 到 9 之间的数字,最后 4 位必须是 0 到 9 之间的数字。如果用户没有正确输入,则会出现错误消息,并且用户将被要求再次输入车牌。

经过测试问题我发现,如果我一遍又一遍地故意犯很多不同的错误,然后最后输入正确的车牌,程序仍然会告诉我我的输入是错误的。我很难知道如何构建它,因为它应该考虑到很多可能的错误。对于相关方法,我的代码目前如下所示:

    char sign;
System.out.print("License plate: ");
licensePlate = input.next();

for (int index = 0; index < 2; indeks++) {
sign = licensePlate.charAt(indeks);
while (sign < 'A' || sign > 'Z') {
System.out.println(licensePlate + " is not a valid license plate (two big letters + five digits where the first digit can not be 0)");
System.out.print("License plate: ");
licensePlate = input.next(); }
}

while (licensePlate.charAt(2) < '1' || licensePlate.charAt(2) > '9') {
System.out.println(licensePlate + " is not a valid license plate (two big letters + five digits where the first digit can not be 0)");
System.out.print("License plate: ");
licensePlate = input.next(); }

for (int counter = 3; counter < 7; counter++) {
sign = licensePlate.charAt(teller);
while (sign < '0' || sign > '9') {
System.out.println(licensePlate + " is not a valid license plate (two big letters + five digits where the first digit can not be 0)");
System.out.print("License plate: ");
licensePlate = input.next(); }
}

carObject.setLicensePlate(licensePlate);

如果有人能帮助我正确地写这篇文章,我将非常感激!

最佳答案

问题是您经常接受新的输入,但随后不再重新开始。值得有一个单独的方法来执行测试,如下所示:

boolean gotPlate = false;    
String plate = null;

while (!gotPlate) {
System.out.print("License plate: ");
plate = input.next();
gotPlate = checkPlate(plate);
}
carObject.setLicensePlate(plate);

现在将其余逻辑放入 checkPlate 方法中:

static boolean checkPlate(String plate) {
// Fixed typos here, by the way...
for (int index = 0; index < 2; index++) {
char sign = plate.charAt(index);
if (sign < 'A' || sign > 'Z') {
System.out.println(plate + " is not a valid license plate " +
"(two big letters + five digits where the first digit" +
" can not be 0)");
return false;
}
}
// Now do the same for the next bits...


// At the end, if everything is valid, return true
return true;
}

我会让您检查“0”等 - 但希望您能够看到将“测试”部分与“获取输入”部分分开构建的好处。

<小时/>

编辑:原始答案...

听起来你想要一个正则表达式:

Pattern pattern = Pattern.compile("[A-Z]{2}[1-9][0-9]{4}");

完整示例:

import java.util.regex.*;

public class Test {

private static final Pattern PLATE_PATTERN =
Pattern.compile("[A-Z]{2}[1-9][0-9]{4}");

public static void main(String args[]) {
checkPlate("AB10000");
checkPlate("AB10000BBB");
checkPlate("AB1CCC0BBB");
}

static void checkPlate(String plate) {
boolean match = PLATE_PATTERN.matcher(plate).matches();
System.out.println(plate + " correct? " + match);
}
}

当然,这并不能告诉您哪一个是错误的。它也不能帮助您找出原始代码的问题所在......请参阅前面的部分。

关于java - 无法获得正确的字符串输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7520187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com