Java 通过二维数组中的子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 of arraylist,我需要在所有子列表中递增,以获得列表中的所有其他元素。这是我到目前为止最接近的结果:

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。