基于数组的登录系统代码异常:正确登录时仍弹出错误提示的问题求助
问题分析与解决方案
嘿,我能立刻看出你代码里的问题啦!问题出在两个独立的for循环上:
当你输入正确的账号密码时,第一个循环会找到匹配项,执行Navigation.PushAsync(new HomePage())跳转到首页,但程序并不会停止运行,它会继续执行第二个循环。第二个循环会遍历所有用户,只要有任意一个用户的账号或密码和你的输入不匹配(显然除了匹配的那个,其他都不匹配),就会触发错误提示框——这就是为什么你跳转的同时还会看到错误提示的原因。
正确的写法思路
我们应该先遍历数组,确认是否存在匹配的用户,用一个变量标记登录状态,遍历结束后再根据这个状态决定是跳转还是弹出错误,而不是用两个独立的循环。
修改后的代码
string[] UserCodes = { "admin", "testcode" }; string[] UserWords = { "123", "testword" }; public void Button_Clicked(object sender, EventArgs e) { // 标记是否找到有效用户 bool isValidUser = false; // 一次遍历完成匹配检查 for (int i = 0; i < UserCodes.Length; i++) { if (UserCode.Text.Equals(UserCodes[i]) && UserWord.Text.Equals(UserWords[i])) { isValidUser = true; break; // 找到匹配后直接跳出循环,不用继续遍历 } } // 根据登录状态执行对应操作 if (isValidUser) { Navigation.PushAsync(new HomePage()); } else { DisplayAlert("Something Went Wrong", "Incorrect Password or Username", "Try Again"); } }
为什么这样能解决问题?
- 我们只用一个循环完成所有用户的匹配检查,找到匹配项后立刻标记状态并跳出循环,避免不必要的遍历。
- 循环结束后再统一判断状态:如果找到有效用户就跳转,否则才弹出错误提示,不会出现两种操作同时触发的情况。
另外,你之前尝试的else if没解决问题,大概率是因为你把判断逻辑放在了两个循环里,而不是整合到同一个循环的判断分支中。现在这种写法就把所有逻辑串起来啦~
内容的提问来源于stack exchange,提问作者PuineaGip
相关产品推荐
相关产品推荐

