Java 通过二维数组中的子arraylist递增,以将其他每个元素添加到新数组中
我已经到处寻找这个问题的答案,但我没有看到任何关于这个问题的具体说明 我已经编写了一个arraylist of arraylist,我需要在所有子列表中递增,以获得列表中的所有其他元素。这是我到目前为止最接近的结果:Java 通过二维数组中的子arraylist递增,以将其他每个元素添加到新数组中,java,multidimensional-array,arraylist,parent-child,nested-loops,Java,Multidimensional Array,Arraylist,Parent Child,Nested Loops,我已经到处寻找这个问题的答案,但我没有看到任何关于这个问题的具体说明 我已经编写了一个arraylist of arraylist,我需要在所有子列表中递增,以获得列表中的所有其他元素。这是我到目前为止最接近的结果: ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>(); int sz1=0; // how many questions in the new
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
int sz1=0; // how many questions in the new string array
int ctr=0; // increment through Question to set value of index
String [] Question = new String[sz1];
for(int x=0; x < list.size(); x++){
sz1 = ((list.get(x).size() -1) / 2);
for(int y=0; y < list.get(x).size(); y++){
if ((y == 1) || (y % 2 == 1)){
Question[ctr] = list.get(x).get(y); // throws Out of Bounds Exception: 0
ctr++ // add 1 for the next index
}
}
}
ArrayList list=new ArrayList();
int sz1=0;//新字符串数组中有多少个问题
int ctr=0;//通过问题增加到设置索引值
字符串[]问题=新字符串[sz1];
对于(int x=0;x
我想这可能与innerloop有关,但我已经好几个小时没弄清楚了。我猜问题是innerloop调用的是大小而不是索引,但我不确定如何更正二维arraylist的大小
所以最终,我将尝试将父arraylist的每个子arraylist中的每个其他字符串存储到一个新的字符串数组中
提前感谢您提供的任何帮助
更新
非常感谢到目前为止的输入,以下是我所有的代码。就我所知,为了回答提出的一些问题,列表似乎填写正确。此外,“列表数组”的输入是一个文本文件。每个“类别”的第一行是类别名称,然后是问答。每个类别由一个空行分隔。即。:
类别
问题
答复
新类别
...
我已经把所有这些都弄明白了,所以现在我需要把每个问题和答案放在自己的列表中(正如@icyitscold指出的,谢谢),我试图通过只显示我正在处理的循环来保持它的简单性,但最好是显示所有的问题和答案,这样你就可以看到发生了什么(正如@Dukeling指出的)
下面是代码:
`public void Read_File() throws FileNotFoundException{
File infile = new File("trivia.txt");
String line = "";
Scanner sr = new Scanner(infile);
int i=0;
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
ArrayList<String> question = new ArrayList<String>();
while (sr.hasNext()){
i++;
list.add(new ArrayList<String>());
while (sr.hasNext()){ // Reads one whole category
line = sr.nextLine();
//System.out.println(line);
if (line.length() == 0)
{break;}
list.get(i-1).add(line); // add line to the array list in that position
}
System.out.println(list);
}
String [] catName = new String[6];
for(int x=0; x < list.size(); x++){ // category array
catName[x] = list.get(x).get(0);}
for(int x=0; x < list.size(); x++){ // questions array
for(int y=0; y < list.get(x).size(); y++){
if ((y == 1) || (y % 2 == 1)){
question.add(list.get(x).get(y)); // throws OB of 0
}
}
}
System.out.println(question);
sr.close();
}`
`public void Read_File()引发FileNotFoundException{
File infle=新文件(“trivia.txt”);
字符串行=”;
扫描仪sr=新扫描仪(填充);
int i=0;
ArrayList=新建ArrayList();
ArrayList问题=新建ArrayList();
while(sr.hasNext()){
i++;
添加(新的ArrayList());
而(sr.hasNext()){//读取整个类别
line=sr.nextLine();
//系统输出打印项次(行);
if(line.length()==0)
{break;}
list.get(i-1).add(line);//将line添加到该位置的数组列表中
}
系统输出打印项次(列表);
}
字符串[]catName=新字符串[6];
对于(intx=0;x
我希望我能够正确理解您在寻找什么。。。您的代码片段有几个问题。首先,您正在初始化大小为零的“Question”数组-这导致了越界异常-一旦指定了数组的大小,就无法更改它。这就是我在代码段中使用ArrayList而不是字符串[]的原因。ArrayList更好,因为不必担心底层数组的维度,它可以为您扩展
还要注意我是如何将名为“Question”的变量改为“Question”的——在java中,变量名应该以小写字母开头。根据:
除变量外,所有实例、类和类常量都在
首字母小写的混合大小写
假设列表
填充正确,则此代码应能正常工作:
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
ArrayList<String> question = new ArrayList<String>();
for(int x=0; x < list.size(); x++){
for(int y=0; y < list.get(x).size(); y++){
if ((y == 1) || (y % 2 == 1)){
question.add(list.get(x).get(y));
}
}
}
ArrayList list=new ArrayList();
ArrayList问题=新建ArrayList();
对于(int x=0;x
生成的
question
ArrayList应具有指定的每秒钟一个字符串。OOB异常来自question数组,该数组用size初始化0@nitegazer2003如果我们从表面上看代码,列表也是空的,因此,for循环将不会执行。除非您向我们显示将项目添加到列表并递增sz1
的缺失代码,否则我们无法帮助您。有关更多信息,请参阅。如果我们按面值获取代码,列表也是空的,因此for循环将不会执行,因此我们永远不会到达导致异常的行。我们不知道问题有多大。它太小了,但我们不能说更多。这是真的,但用我的解决方案,我们永远不需要知道问题有多大-因此,它应该有助于OP。