我尝试使用while循环向我的程序添加一个计数器,但还没有能够使它工作。有人能告诉我我哪里出错了,我让它工作了一点但是如果我输入一个正确的值,那就错了"文本仍会出现,它不会突破循环。
public class Username {
public static void main (String[]args) {
Scanner kb = new Scanner (System.in);
String [] name = {"barry", "matty", "olly","joey"};
int j = 0;
while (j < 3) {
System.out.println("Enter your name");
String name1 = kb.nextLine();
boolean b = true;
for (int i = 0; i < name.length; i++) {
if (name[i].equals(name1)) {
System.out.println("you are verified you may use the lift");
break; // To stop loop checking names
}
}
System.out.println("wrong");
j++;
}
}
}
答案 0 :(得分:5)
外部循环while
用于允许的尝试。您需要一种额外的方式来指示它中断,因为break
语句只会从for
循环中断。一种方法是使用boolean
idicator:
boolean found = false;
int attempts = 0;
while (!found && attempts < 3) {
System.out.println("Enter your name");
String name1 = kb.nextLine();
for (int i = 0; i < name.length; i++) {
if (name[i].equals(name1)) {
System.out.println("you are verified you may use the lift");
found = true;
break;// to stop loop checking names
}
}
if (!found) {
System.out.println("wrong");
}
++attempts;
}
答案 1 :(得分:2)
就像Carlo先生在评论中所说的那样,你建立循环的方式可以最快地解决将j = 3
插入if语句的问题。
然而,正在发生的事情是,一旦它遇到break语句,它只会退出for循环,并且因为j在第一次运行时仍然是0,它会打印出文本,并继续运行。你只需要让程序认识到for循环找到了一个有效的名字,并告诉while循环它可以因为这个而退出。
编辑:在这种情况下,我可能会这样做:
while(j<3)//and all outside code being the same
{
System.out.println("Enter your name");
String name1 = kb.nextLine();
boolean found = false;//renamed other-wise useless boolean
for(int i = 0; i < name.length; i++)
{
if(name[i].equals(name1))
{
found = true;
System.out.println("you are verified you may use the lift");
break;
}
}
if(found)
break;
System.out.println("wrong");
j++;
}
答案 2 :(得分:1)
您正在使用j
作为“重试”计数器来重试失败的输入。问题是,您没有打破良好输入的重试循环。
break
只会突破最内层的循环。我建议还有一个外循环可以检查的某种标志。例如:
int retries = 0;
boolean success = false;
do {
... get input;
if (input is valid)
success = true;
else
retries ++;
} while (retries < 3 && !success);
if (success)
all good;
else
gave up after retries.
逻辑上,这与您的意图相呼应:继续重试,直到达到最大重试限制,或者我们已收到有效输入。
答案 3 :(得分:1)
对代码的最小更改是使用标签和break <label>;
- 它会打破标记为标记的循环,而不是当前循环:
import java.util.Scanner;
public class Username
{
public static void main (String[]args)
{
Scanner kb = new Scanner (System.in);
// array containing usernames
String [] name = {"barry", "matty", "olly","joey"}; // elements in array
int j = 0;
outerloop: while (j < 3)
{
System.out.println("Enter your name");
String name1 = kb.nextLine();
boolean b = true;
for (int i = 0; i < name.length; i++) {
if (name[i].equals(name1))
{
System.out.println("you are verified you may use the lift");
break outerloop;// to stop loop checking names
}
}
System.out.println("wrong");
;j++;
}
}}
有关标记中断的详细信息,请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html