gpt4 book ai didi

java - 输入验证使用数组和 for 循环检查重复项和格式

转载 作者:行者123 更新时间:2023-12-01 15:40:38 24 4
gpt4 key购买 nike

希望有人能帮忙。我认为缺少一些明显的东西。我必须让用户输入帐号。我需要根据两项检查来验证这一点。一是它尚未使用并且格式正确。我已经尝试过这个并尝试了不同的方法来做到这一点。我认为它失败的原因是因为在遍历数组的过程中,我要求用户输入。

当用户输入数据时,它会停止 for 循环,然后从那里继续。我如何验证两者?

System.out.println("Please enter an ID (format PNOnnn)");
String pnoID = console.next();
boolean pnoIDValid = false;
while (pnoIDValid);
{
for (int i = 0 ; i < pno.length ; i++)
{
if (pno[i] != null)
{
if (pnoID.compareToIgnoreCase(pno[i].getmID()) == 0)
{
System.out.println("ID already used");
//pnoID = console.next();
}
else
{
if (!(pnoID.matches("PNO\\d{3}")))
{
System.out.println("Must be in format PNOnnn");
//pnoID = console.next();
}
else
{
pnoIDValid = true;
}
}
}
}
}

我想知道这是否会导致数组未被检查。我也尝试过这种方法。从逻辑上讲,这对我来说是有意义的,但它不起作用。

System.out.println("Please enter a ID (format PNOnnn)");
String pnoID = console.next();
boolean pnoIDValid = false;
while (pnoIDValid);
{
for (int i = 0 ; i < pno.length ; i++)
{
if (pno[i] != null)
{
if ((pnoID.compareToIgnoreCase(pno[i].getmID()) == 0) ||
(!(pnoID.matches ("PNO\\d{3}"))))
{
System.out.println("ID already used");
pnoID = console.next();
}
else
{
pnoIDValid = true;
}
}
}
}

我最终选择了:

int subSelection = console.nextInt();
if(subSelection == 1){
System.out.println("Enter ID");
String pnoID = cons.next();
int test1=0; int test2=0;
for (int i = 0 ; i < pno.length ; i++){
if (pno[i]!=null && pnoID.compareTo(pno[i].getmID()) == 0)){
test1 = 1;
}else{
test2 = 1;
}
}
int test3 = 0; int test4 = 0;
if (pnoID.matches("PNO\\d{3}")){
test3 = 1;
}else{
test4 = 1;
}
if (test1 == 1 && test4 == 1){
System.out.println("This ID exists or format invalid");
}else{
System.out.println("enter name (first and last)");
String name = cons.nextLine();
System.out.println("enter phone number");
String phone = cons.nextLine();
}

然而奇怪的是,当我第一次经历这个时,我能够正确地输入详细信息。然而,第二次它没有给我输入 ID 的选项。它显示问题“输入 ID”,但随后立即转到下一个问题“输入名称”。我有两台扫描仪;一种用于菜单选择,一种用于用户输入。这可能会导致冲突吗?

已解决:

这个问题现在也已经解决了。根据我在网上阅读的内容;使用扫描仪时,一个新行字符(回车/输入键击)会留在缓冲区中并被拾取,这会导致跳过第二个控制台条目。

建议的解决方案是使用 bufferedreader nextLine(),我尝试了所有字符串条目,这已经成功解决了我的问题。

最佳答案

将唯一性检查提取到单独的方法中:

private boolean isIDUnique(String pnoID) {
for (int i = 0; i < pno.length; i++) {
if (pno[i] != null && pnoID.compareToIgnoreCase(pnoID)) {
return false;
}
}
return true;
}

主要方法:

System.out.println("Please enter a ID (format PNOnnn)");
String pnoID;
boolean pnoIDValid = false;
do {
pnoID = console.next();
if (!isIDUnique(pnoID) {
System.out.println("ID is not unique");
} else if (!pnoID.matches("PNO\\d{3}") {
System.out.println("Invalid format");
} else {
pnoIDValid = true;
}
} while(!pnoIDValid);

关于java - 输入验证使用数组和 for 循环检查重复项和格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8100849/

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