使用Java创建登录,不转到else语句吗?
我正在做一个登录程序,但它有一些错误。如果我输入了一个不在列表中的名字,我会得到一个错误。它似乎也没有到达else语句,我不知道为什么使用Java创建登录,不转到else语句吗?,java,arrays,login,Java,Arrays,Login,我正在做一个登录程序,但它有一些错误。如果我输入了一个不在列表中的名字,我会得到一个错误。它似乎也没有到达else语句,我不知道为什么 import java.lang.*; import java.util.*; import java.io.*; import java.math.*; public class HelloWorld { public static void main(String[] args) { Scanner input = new Scanner(Sys
import java.lang.*;
import java.util.*;
import java.io.*;
import java.math.*;
public class HelloWorld {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String userName;
int n = 10;
int i = 0;
String[] array = new String[n];
array[0] = "John";
array[1] = "Johny";
array[2] = "ben";
System.out.println("Enter your user name(Note:**Case Sensative**)");
userName = input.nextLine();
while (i <= array.length) {
if (array[i].equals(userName)) {
System.out.println("Your UserName is valid");
break;
}
else if (!array[i].equals(userName)){
i++;
}
else {
System.out.println("Your UserName is not valid");
break;
}
}
}
}
首先,我会考虑使用for循环,因为它将管理你的I值,但也要考虑你有
的逻辑。if element.equals(userName) {...}
else if !element.equals(userName) {...}
else {...}
怎么可能进入else块,元素将等于或不等于用户名,没有其他状态。我会考虑使用一个标志来指示是否找到了用户,并在循环的另一端检查< /P>
作为一般概念
//...
userName = input.nextLine();
String validUser = null;
for (int index = 0; index < array.length; index++) {
if (array[i].equals(userName)) {
validUser = userName;
break;
}
}
if (validUser != null) {
System.out.println("UserName is valid");
} else {
System.out.println("Your UserName is not valid");
}
这是速记版本
查看更多详细信息首先,if和else if是java将在您的上下文中运行的唯一条件,之后没有其他条件运行。这就像你在做正确和错误的事情,期待着另一种情况。以更简单的方式在java中使用foreach
boolean found = false;
for(String name: array){
if (name.equals(userName)) {
found = true;
break;
}
}
if(!found){
System.out.println("Your UserName is not valid");
}else{
System.out.println("Your UserName is valid");
}
当你掌握了使用数组、集合和特别是lambdas流api的方法后,你的java知识就会有一点点提高。你的语句永远不会转到else部分,因为inputuserName要么等于Array[i],要么不等于Array[i]。想想看
if (array[i].equals(userName)) { //It will do this if userName is array[i]
System.out.println("Your UserName is valid");
break;
}
else if (!array[i].equals(userName)) { //It will do this if userName is NOT array[i]
i++;
}
else { //this is impossible, unreachable code
System.out.println("Your UserName is not valid");
break;
}
您的else无法访问的原因是因为这是一个不可能的场景。我编辑了你的程序,现在可以用了。事情是这样的:
import java.util.Scanner;
public class Experiments {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String userName;
boolean found = false;
String[] array = new String[3];
array[0] = "John";
array[1] = "Johny";
array[2] = "ben";
System.out.println("Enter your user name:");
userName = input.nextLine();
for(int i=0; i<array.length; i++) {
if (userName.equalsIgnoreCase(array[i])) {
System.out.println("Your UserName is valid");
found = true;
break;
}
if (!found && i == array.length-1) {
System.out.println("Your UserName is not valid");
}
}
input.close();
}
}
如果用户名无效:
Enter your user name:
Jimmy
Your UserName is not valid
如果您对此有任何疑问,请发表意见,我会解释。谢谢,我试图使用for循环,但我一直被卡在其中。我想知道为什么这个答案会吸引反对票?我们不再是为了帮助别人吗?这难道不意味着无论for循环在做什么,你的用户名都是无效的吗?@Vezro-不,如果输入用户名在数组中的任何位置,它都会说你的用户名是无效的valid@Vezro这个答案可以接受吗?请让我知道我能改进什么,或者你有什么困难。非常感谢你!我理解这是如何工作的,但它实际上给了我同样的错误。我想知道你这边出现了什么错误。你有很多不必要的导入,只有一个需要java.util.Scanner,其他的可以删除
Enter your user name:
John
Your UserName is valid
Enter your user name:
Jimmy
Your UserName is not valid