【发布时间】:2015-12-17 12:22:04
【问题描述】:
我正在使用 Java 中的这两种方法验证输入。 searchCandidate 方法搜索已排序的数组以查找名称与用户输入(字符串 searchKey)匹配的对象。 displayCandidate 方法调用此方法,检查验证,并返回该特定对象的所有值。
在 searchCandidate(直接在下面)方法中,如果找到匹配项,则返回对象的副本。如果没有,则返回一个所有字段都为“null”的新对象。
//Find user input candidate location in array
public static Candidate searchCandidate(Candidate[] candidate)
{
String currName;
int first = 0,
last = candidate.length-1,
middle;
Scanner kbd = new Scanner(System.in);
String searchKey = kbd.nextLine();
searchKey = searchKey.toUpperCase();
while(first <= last)
{
middle = (first + last)/2;
currName = candidate[middle].getName();
if(currName.equals(searchKey))
{
return new Candidate(candidate[middle]);
}
else if(currName.compareTo(searchKey)<0)
{
first=middle+1;
}
else
{
last = middle - 1;
}
}
return new Candidate("null","null","null","null");
}
在 displayCandidate 方法中,它检查 searchCandidate 创建的对象的 name 字段是否等于“null”,然后返回一个字符串,通知用户没有匹配的候选人。如果不等于null,则返回所有对象值。
//Display candidates info after search
public static String displayCandidate(Candidate[] candidate)
{
System.out.println("Please enter the name of the candidate (LAST,FIRST)");
Candidate candidateChoice = searchCandidate(candidate);
if(candidateChoice.getName().equals("null"))
{
return "There are no candidates with this name.";
}
return candidateChoice.display();
}
当我运行并输入不在数组中的对象的名称时,不会返回任何内容。它只是循环回到我的用户菜单。知道为什么会这样吗?
【问题讨论】:
-
最好用您正在使用的编程语言添加标签
-
@alfasin 不小心添加了。谢谢。
-
在输入 if 之前尝试将 CandidateChoice.getName() 打印到您的控制台,以确保将“null”更改为其他内容以确保它引用的是字符串而不是状态
-
@YassinHH 我将“null”更改为“empty”,试图打印出 CandidateChoice.getName() 并且发生了同样的事情 - 没有打印任何内容并循环返回菜单。但是当我输入一个有效的名称时,该方法会按预期工作。
-
好的。现在也许,向您的构造函数添加一条消息,上面写着“使用以下值创建候选人:等等。”以查看您的“空”候选人是否真的被创建并缩小搜索区域
标签: java arrays validation search input