[英]Breaking out of this “for” loop while nested “if” statements
我正試圖break;
語句退出for
循環。
final int NUM_USERS = 6; // Max Number of Users.
UserInfo[] users = new UserInfo[NUM_USERS]; // Array of Users.
int loginCounter = 0; // Counts bad login attempts.
int i = 0; // Loop index variable.
String userRole = ""; // Holds user's role text.
for (loginCounter = 1; loginCounter <= 3; ++loginCounter) {
// Get User's Credentials.
System.out.println("Enter Username: ");
String username = input.next().toLowerCase();
input.nextLine(); // Allows User to enter password.
System.out.println("Enter Password: ");
String password = input.nextLine();
String hash = sysLogin.convertToMd5(password);
for (i = 0; i < users.length; ++i) {
if (username.equals(users[i].getUsername())) {
if (hash.equals(users[i].getHash())) {
userRole = users[i].getRole();
sysLogin.goodLogin(); // Prints Good Login message.
break;
}
} else {
sysLogin.badLogin(); // Prints Bad Login message.
}
}
}
怎么了:
代碼將讀入username
和password
,驗證它是一個很好的登錄,然后再次返回詢問用戶名和密碼。
預期會發生什么:
一旦成功登錄,它userRole
設置為當前用戶的角色,顯示goodLogin
消息,然后退出循環。
break
只會突破你用於迭代用戶列表的內部for循環,而不是外循環。
嘗試做這樣的事情
boolean login = false;
do {
// Get User's Credentials.
System.out.println("Enter Username: ");
String username = input.next().toLowerCase();
input.nextLine(); // Allows User to enter password.
System.out.println("Enter Password: ");
String password = input.nextLine();
// Convert password to MD5 hash.
String hash = sysLogin.convertToMd5(password);
for (i = 0; i < users.length; ++i) {
if (username.equals(users[i].getUsername())) {
if (hash.equals(users[i].getHash())) {
login = true;
userRole = users[i].getRole();
sysLogin.goodLogin(); // Prints Good Login message.
break;
} else {
sysLogin.badLogin(); // Prints Bad Login message.
}
}
}
} while ( login == false && failCondition == false );
您需要將失敗計數添加回循環,但這應該會給您一個更期望的結果。
您可以附加標簽並中斷到該標簽( 關於分支中標簽的Java示例 ):
final int NUM_USERS = 6; // Max Number of Users.
UserInfo[] users = new UserInfo[NUM_USERS]; // Array of Users.
int loginCounter = 0; // Counts bad login attempts.
int i = 0; // Loop index variable.
String userRole = ""; // Holds user's role text.
OUTER:
for (loginCounter = 1; loginCounter <= 3; ++loginCounter) {
// Get User's Credentials.
System.out.println("Enter Username: ");
String username = input.next().toLowerCase();
input.nextLine(); // Allows User to enter password.
System.out.println("Enter Password: ");
String password = input.nextLine();
// Convert password to MD5 hash.
String hash = sysLogin.convertToMd5(password);
for (i = 0; i < users.length; ++i) {
if (username.equals(users[i].getUsername())) {
if (hash.equals(users[i].getHash())) {
userRole = users[i].getRole();
sysLogin.goodLogin(); // Prints Good Login message.
break OUTER;
}
else {
sysLogin.badLogin(); // Prints Bad Login message.
}
}
}
}
break;
語句打破了最內層的循環; 最外面的循環將繼續執行。
在最外層循環中,您可能希望擁有一個變量,例如bool success = false;
。 在打破最內層循環之前,指定true
,並在最外面的循環中執行檢查,如:
if(success) break;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.