我创建了一个用于输入人员的构造函数。标题是否是Miss Mrs Mrs等等。当用户输入不同的东西时,例如"先生"它将重复并再次询问用户的标题。但问题就出现了,当我的程序向用户询问标题时,当你第一次正确输入时,即使我输入标题正确,它也会再次询问用户。喜欢这个
Enter your title (Mr,Miss,Ms, Mrs): mr
Re enter your title (Mr, Miss, Ms, Mrs):
但是当您在第二个输入中正确输入时,它将转到下一个问题。
这里是程序
public void setoptions(String title1)
{
String title0 = "Mr";
String title2 = "Mrs";
String title3 = "Ms";
String title4 = "Miss";
String choice;
while(!(title0.equalsIgnoreCase(title) || title2.equalsIgnoreCase(title) || title3.equalsIgnoreCase(title)
|| title4.equalsIgnoreCase(title)))
{
System.out.println("Re enter your title (Mr, Miss, Ms, Mrs): ");
choice=keyboard.nextLine();
title = choice;
}
title = title1;
}
谢谢你:)
答案 0 :(得分:2)
您的问题是title0.equalsIgnoreCase(title)
等实际应该是title0.equalsIgnoreCase(title1)
。在你的情况下,我假设title
一开始是空的,但是在询问输入时你给它分配输入值,因此它第二次工作。
除此之外,您可以使用set:
来改进代码Set<String> possibleTitles = new HashSet<>();
possibleTitles.add("mr");
possibleTitles.add("mrs");
...
//since the set internally uses equals() we need to store the elements
//and do the lookups in a common case (elements are put in lower case here,
//so we do the lookup in the same case)
if( !possibleTitles.contains( title.toLowerCase() ) {
//ask for input, note that this should not be inside the setter
}
答案 1 :(得分:0)
我认为最好的方法是使用Enum
和utility
方法使其更清晰。
enum Titles {
MR, MRS, MS, MISS;
public static List<String> listValues (){
return Stream.of(Titles.values())
.map(String::valueOf)
.collect(Collectors.toList());
}
}
和你的方法
public void setTitle(String title){
while (!Titles.listValues().contains(title.toUpperCase())) {
System.out.println("Re enter your title (Mr, Miss, Ms, Mrs): ");
title = keyboard.nextLine();
}
}