【问题标题】:Out of bounds array exception for one line and not the other?一行而不是另一行的越界数组异常?
【发布时间】:2014-09-17 05:38:55
【问题描述】:

代码

 ArrayList<String> tokens = new ArrayList<String>();
    ArrayList<String> PRINT = new ArrayList<String>();

    String tok = "";

    for(String element : list) {
        StringTokenizer st = new StringTokenizer(element);

        if(!element.startsWith("PRINT")) {
            while(st.hasMoreTokens()) {
                tok = st.nextToken();
                tokens.add(tok);

                for(String key : expression.keySet())
                    if(tok.equals(key))
                        System.out.println(tokens.get(0) + " changed from " + expression.get(key) + " to " + Integer.parseInt(tokens.get(2)));
            }

            expression.put(tokens.get(0),Integer.parseInt(tokens.get(2)));
            tokens.clear();
        }

我在下面一行得到一个数组越界异常

System.out.println(tokens.get(0) + " changed from " + expression.get(key) + " to " + Integer.parseInt(tokens.get(2))

我知道 tokens.get(0) = "A"、tokens.get(1) = "=" 和 tokens.get(2) = "7"

【问题讨论】:

  • 看来你知道的不正确
  • 考虑提供一个runnable example 来证明您的问题。这将减少混乱并获得更好的响应
  • 你可以在for循环之前打印token.size()来进行交叉检查吗?
  • 保重{}内部块for loop!!!
  • 我猜问题可能是我的文件包含 A = 6 行,但它读取为“A=6”,对此有何帮助?

标签: java indexoutofboundsexception stringtokenizer


【解决方案1】:

代替代码

for(String element : list) {
        StringTokenizer st = new StringTokenizer(element);

        if(!element.startsWith("PRINT")) {
            while(st.hasMoreTokens()) {
                tok = st.nextToken();
                tokens.add(tok);

使用下面的代码

for(String element : list) {

     for(int i=0;i<element.length();i++){         
           tokens.add(element.charAt(i)+"");
     }

【讨论】:

    【解决方案2】:

    问题在于,第一次将令牌添加到 tokens 时,只会有一个项目,但您的 for 循环需要 3(在索引 0、1 和 2 处)。

    【讨论】:

    • 我猜问题可能是我的文件包含 A = 6 行,但它读取为“A=6”,对此有什么帮助吗?
    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2019-07-18
    相关资源
    最近更新 更多