我想在输入无效后重新提示用户(空或不存在)。下面的代码帮助我做但是即使给出了有效的输入,它仍然会提示用户输入另一个输入。如果插入有效输入后如何阻止循环再次运行?< / p>
//get user input
String year = JOptionPane.showInputDialog("Enter input");
try{
while (true) {
List <WebElement> PageScrubberPagelet = dr.findElements(By.xpath("//li[@class='_3d5d']//a[contains(@data-key,'')]"));
for (WebElement el:PageScrubberPagelet) {
if (!(el.getAttribute("data-key")).contains(year) || year.equals("")) {
year = JOptionPane.showInputDialog(null, "Invalid input. Please re-enter (recent/ YYYY)",
"Information", JOptionPane.INFORMATION_MESSAGE);
} else {
//find and click on the input year
WebElement yearButton = dr.findElement(By.xpath("//a[contains(@data-key,'" + year + "')]"));
yearButton.click();
break;
}
}
}
} catch(Exception e){
Logger.getLogger(ExpandFacebook.class.getName()).log(Level.SEVERE, "Invalid input!", e);
}
如果使用if替换while循环,则只允许一次无效输入,并且不会再次提示用户第三次。
答案 0 :(得分:1)
使用此模板作为解决问题的指南!不应该太难,只是一个简单的do-while loop
。因为你想要内部至少执行一次以获得第一组测试输入,然后在必要时从那里循环:
do
{
<GET USER INPUT>
} while (<USER INPUT> != <CORRECT DATA>);
答案 1 :(得分:0)
中断只会破坏最内层的循环(for循环)。然后你需要从最外面的循环中突破。更好的方法是
boolean goodInput = false;
do {
for (WebElement el:PageScrubberPagelet) {
if (!(el.getAttribute("data-key")).contains(year) || year.equals("")) {
year = JOptionPane.showInputDialog(null, "Invalid input. Please re-enter (recent/ YYYY)",
"Information", JOptionPane.INFORMATION_MESSAGE);
} else {
//find and click on the input year
WebElement yearButton = dr.findElement(By.xpath("//a[contains(@data-key,'" + year + "')]"));
yearButton.click();
goodInput = true;
break;
}
}
} while (!goodInput);