有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

遇到Java数组索引错误

我对Java完全陌生,有一些C#方面的背景。我目前正在使用Eclipse在程序中运行一个方法,将该方法的参数与文本文件中的用户名和密码进行比较

但是,在运行代码之后,我收到了一个名为“java.lang.ArrayIndexOutOfBoundsException=1”的错误。我不明白为什么会这样。下面包含代码和文件我试图只读取上面的三个用户名和密码。下面的其他三个只是填充它并在程序中稍后使用

**更新:好的。我已经修复了将令牌更改为令牌[0]和令牌1的问题。但它仍然不起作用

**更新2:另外,这是我调用该方法时包含的代码。下:

 s.login("tomrichards", "96744213");


public boolean login (String user, String password) {

  FileReader fr = new FileReader ("auth.txt");
  LineNumberReader r = new LineNumberReader (fr);

  String I = "";
  boolean identity = false;
  String name = "";
  String password = "";

  while ((I = r.readLine()) != null) {

    String [] token = I.split(";");

    name = token[0];
    pass = token[1];

    if (name.equals(user) && pass.equals(password)) {

      identity = true;

      System.out.println("Username " + name + "Password " + pass);

      return true;
    }

    else {

      identity = false;

      return false; 
    }

  }

   r.close();
}

Java Error

text file

**第3次更新:我仔细检查了是否有任何遗漏”在文本文件中,没有


共 (3) 个答案

  1. # 1 楼答案

    你的文本文件有空行

    如果^ {< CD1>}没有任何^ {< CD2>}要拆分,那么就必须考虑得到的数组的大小。

    还要注意Java数组是从0索引的

  2. # 2 楼答案

    首先,这看起来很奇怪:

    name = token[1];
    pass = token[2];
    

    我想你的意思是:

    name = token[0];
    pass = token[1];
    

    除非文本文件中;之前的第一件事是你放弃的

    其次,文本文件似乎至少有一行没有;。搜索并纠正它。如果找不到,可以通过执行以下操作暂时修复此错误:

    String [] token = I.split(";");
    
    if (token.length != 2) {
        continue;
    }
    
    name = token[0];
    pass = token[1];
    

    我说的是暂时的,因为这个修复并不是真正解决问题的根源,只是避免读取无效的行

  3. # 3 楼答案

    考虑当输入中的一行没有一个^ {CD1>}要拆分的情况。

    name = token[1]; // there is no value to be accessed in the token[]
    

    因此,这会导致ArrayIndexOutOfBoundsException