繁体   English   中英

用Java创建Login,不会转到else语句吗?

[英]Creating Login with Java, won't go to else statement?

我正在制作一个登录程序,但是出现了一些错误。 如果输入不在列表中的名称,则会出现错误。 它似乎也没有到达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-loop因为它将为您管理i值,但还要考虑您拥有的逻辑

if element.equals(userName) {...} 
else if !element.equals(userName) {...} 
else {...}

如何进入else块,任何一个element都将等于或不等于userName ,没有其他状态。 我考虑使用一个标志来指示是否找到了用户,并在循环的另一端进行检查

作为一般概念...

//...
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");
}

因为您可能不太在乎索引,所以您也可以执行类似...

for (String element : array) {
    if (array[i].equals(userName)) {
        validUser = userName;
        break;
    }
}

这是简写​​版本。

看一下for语句以获取更多详细信息

首先, 如果ifelse if是唯一的条件,则Java将在您的上下文中运行,并且此后没有其他条件在运行。 就像您正在做TRUE和FALSE并期待另一个条件一样。 使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");
}

当您掌握了Array,Collections和特别是lambdas流api的方法后,便会稍微提高一点Java知识。

您的Statement永远不会转到else部分,因为input( userName )将等于EQUAL 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();
    } 
}

如果输入(userName)在数组中的任何位置,则将显示"Your UserName is valid"如果不在数组中,则将显示"Your UserName is not valid"

这是有效的用户名的示例:

Enter your user name:
John
Your UserName is valid

如果用户名无效:

Enter your user name:
Jimmy
Your UserName is not valid

如果对此有任何疑问,请发表评论,我会解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM