希望有人可以提供帮助。我想,遗漏了一些明显的东西。我必须让用户输入一个帐号。我需要针对两项检查验证这一点。一个是它尚未使用,并且格式正确。 我玩过这个并尝试过不同的方法。我认为它失败的原因是因为通过数组的中途,我要求用户输入。
当用户输入数据时,它会停止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(),我尝试了所有字符串条目,这已成功解决了我的问题。
答案 0 :(得分:1)
提取唯一性检查以分离方法:
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);