存储嵌套列表
Storing nested lists
我真的需要一些帮助,所以我非常努力地尝试将 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);
}
}
}
在调用 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 个槽位的列表,但您永远不会用列表填充这些槽位。
我不知道这个 infile
是什么,所以我只是用 java.util.Scanner
来测试。我也没有看到这个原始的 MyClass class,所以我只是添加字符串。你的有点不同,但是算法是一样的。
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]
我真的需要一些帮助,所以我非常努力地尝试将 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);
}
}
}
在调用 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 个槽位的列表,但您永远不会用列表填充这些槽位。
我不知道这个 infile
是什么,所以我只是用 java.util.Scanner
来测试。我也没有看到这个原始的 MyClass class,所以我只是添加字符串。你的有点不同,但是算法是一样的。
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]