第一个输入只是重复自己

时间:2016-03-17 16:51:01

标签: java while-loop

我创建了一个用于输入人员的构造函数。标题是否是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;


}

谢谢你:)

2 个答案:

答案 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)

我认为最好的方法是使用Enumutility方法使其更清晰。

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();
    }
}