Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java创建登录,不转到else语句吗?_Java_Arrays_Login - Fatal编程技术网

使用Java创建登录,不转到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

我正在做一个登录程序,但它有一些错误。如果我输入了一个不在列表中的名字,我会得到一个错误。它似乎也没有到达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(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