【问题标题】:Encountering Java Array Index error [duplicate]遇到 Java 数组索引错误 [重复]
【发布时间】:2017-09-28 05:52:36
【问题描述】:

我是 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();
}

**更新第 3 条:我仔细检查了是否缺少任何“;”在文本文件中,没有。

【问题讨论】:

  • 索引从 0 开始。您的意思是使用token[0]token[1] 吗?此外,您可能在文件中有一行没有;
  • 您是否在调试器中运行了您的代码,并且每次都查看数组的大小,或者至少在您遇到异常时查看?如果您不熟悉调试器,那么现在是学习的好时机。

标签: java arrays


【解决方案1】:

您的文本文件有空行

如果I 没有任何; 可以拆分,那么您必须考虑结果数组的大小。

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

【讨论】:

  • 我明白了。如果是这样,那我是否必须消除用户名和密码与三个帐户之间的空行?或者是别的什么?
  • 您可以测试字符串的长度或测试它是否包含您要拆分的字符
  • 对。因为我试图只拆分用户名和密码之间的字符。
【解决方案2】:

假设输入中的一行没有要拆分的;

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

因此这会导致 ArrayIndexOutOfBoundsException。

【讨论】:

    【解决方案3】:

    首先,这看起来很奇怪:

    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];
    

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

    【讨论】:

    • 也许是if (token.length < 2)
    • @ScaryWombat 我认为如果某行中有 2 个 ;,则该行可能无效。
    • 是的,很难说
    猜你喜欢
    • 2020-12-19
    • 2013-03-12
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 2014-12-05
    相关资源
    最近更新 更多