【问题标题】:Storing nested lists存储嵌套列表
【发布时间】:2015-04-07 19:40:12
【问题描述】:

我真的需要一些帮助,所以我非常努力地将一个 str 存储在一个列表中的一个列表中,这将无法正常工作。我编写的代码对我来说非常有意义。有人可以在这里给我一些指导。我很绝望。我在第 30 行不断收到错误 myArrayList.get(index).add(newClassObj);

建议>>

          at java.util.ArrayList.rangeCheck(ArrayList.java:635)
          at java.util.ArrayList.get(ArrayList.java:411)
          at myClass.main(myClass.java:30)


public class myCLass {

    public static void main(String[] args) 
   {

     ArrayList<LinkedList<myCLass>>
     myArrayList = new ArrayList<LinkedList<MyClass>>(26);

     inFile file = new inFile();
     file.inFile("myfile.txt");
        while(inFile.hasNext())
        {
            String str = inFile.next();
            char ch = str.toUpperCase().charAt(0);
            char ch2 = 'A';
            int index = (int)ch - (int)ch2;
            for (int i = 0; i < 26; i++)
                myArrayList.add(new LinkedList<MyClass>());
            myClass newClassObj = new myClass(str);
            myArrayList.get(index).add(newClassObj);
        }
   }
}

【问题讨论】:

  • 您遇到的错误是什么?堆栈跟踪在哪里?
  • "...and this will not freaking work." -- 它怎么不工作?你得到什么错误? “myfile.txt”中有什么?你期望什么输出?你得到什么输出?请阅读how to ask 一个好问题。
  • 请不要尝试在 cmets 中添加信息。而是编辑您的问题以添加更多信息/说明。
  • 我得到的错误是在 CountWords.main 的 java.util.ArrayList.get(ArrayList.java:411) 的 'java.util.ArrayList.rangeCheck(ArrayList.java:635) (MyClass.java:30)' 对不起,我对这个程序感到非常沮丧。我正在尝试将我的 str 存储到我的一个链接列表的正确位置

标签: java class object methods


【解决方案1】:

在调用myArrayList.get(index).add(newClassObj); 之前,您必须确保index myArrayList.size()。否则你会得到一个索引越界异常。

您的myArrayList 的大小为0,因为您从未向其中添加任何内容。将容量初始化为 26 不会将 26 个元素添加到列表中。它不会向列表中添加任何元素。

如果你希望你的列表有 26 个元素,你应该正确初始化它:

for (int i = 0; i < 26; i++)
    myArrayList.add(new LinkedList<MyClass>());

【讨论】:

  • 我不认为会发生这种情况,因为他用 26 初始化它,而且据我计算有 26 个字母。我认为主要问题是他还没有初始化里面的所有LinkedList。
  • @StackFlowed 26 的 capacity 与 26 的 size 不同。他正在使用 26 的容量初始化它 - 但大小为 0。
  • @StackFlowed ArrayList 不是数组。它不会被 26 个空引用初始化。它被初始化为一个空的 ArrayList。
  • so if index
  • @helperhex 但是,index &lt; myArrayList.Size() 将始终为 false,除非您按照我的回答添加初始化。
【解决方案2】:

看起来你从来没有列出你的清单。您有一个包含 26 个插槽的列表,但您永远不会用列表填充这些插槽。

我不知道这个infile 是什么所以我只是使用java.util.Scanner 进行测试。我也没有看到这个原始的 MyClass 类,所以我只是添加了字符串。你的有点不同,但算法是一样的。

import java.util.*;
import java.io.*;
public class MyClass {
    public static void main(String[] args) throws Exception {
        ArrayList<LinkedList<String>> list = new ArrayList<>(26);
        for(int i = 0; i < 26; i++) {
            list.add(new LinkedList<String>());
        }
        Scanner sc = new Scanner(new File("words.txt"));
        while(sc.hasNext()) {
            String next = sc.next();
            char c = next.toUpperCase().charAt(0);
            int index = c - 'A';
            list.get(index).add(next);
        }
        // let's test it by looking at all the H words
        System.out.println(list.get(7));
    }
}

结果:

C:\files\j>javac MyClass.java

C:\files\j>java MyClass
[have, he, his, her, him, how]

【讨论】:

  • 当我尝试 .add(str) 时,它说没有找到适合 add(STRING) 的方法
  • 那是因为你有一个 LinkedList&lt;myClass&gt; 而我有一个 LinkedList&lt;String&gt; - 如果你要添加字符串,请添加字符串。如果要添加 myClasses,请添加 myClasses。
  • 所以在我发布之后我就明白了,哈哈;但是,它打印出我认为是 myClass 的地址。像“myClass@454bff”或w.e
  • 您需要重写toString() 方法来打印传递给其构造函数的数据,或者循环遍历这些值并直接打印字符串。
  • 我无权访问该作业的课程:/
猜你喜欢
  • 2018-10-21
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
相关资源
最近更新 更多