Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 抛出一个IndexOutOfBoundsException,我不';我不明白怎么做_Java_Arrays_Arraylist - Fatal编程技术网

Java 抛出一个IndexOutOfBoundsException,我不';我不明白怎么做

Java 抛出一个IndexOutOfBoundsException,我不';我不明白怎么做,java,arrays,arraylist,Java,Arrays,Arraylist,此类中的代码正在引发“indexOutOfBounds异常”。我不明白为什么会这样,我只是尝试循环遍历每一行和每一列,然后将每一列赋给一个变量。为了进一步说明,initializeArray是一个常规2D数组,initializeArray是一个ARRAYLIST //Array to initialize course list (format is first name, last name, student number} //This is the array that I will b

此类中的代码正在引发“indexOutOfBounds异常”。我不明白为什么会这样,我只是尝试循环遍历每一行和每一列,然后将每一列赋给一个变量。为了进一步说明,initializeArray是一个常规2D数组,initializeArray是一个ARRAYLIST

//Array to initialize course list (format is first name, last name, student number}
//This is the array that I will be using to store each row into the ArrayList
      String [] [] initializeArray = 
          {{"Hasan","Ahmed","462948"},
           {"Abdul","Alvi","764226"},
           {"Omar","Askalany","719049"},
           {"Harsim","Grewal","438629"},
           {"Anis","Habib","576510"},
           {"Hamiz","Hasan","621802"},
           {"Bilal","Hussain","417440"},
           {"Mazhar","Jabakhan","603544"},
           {"Tharsh","Kamalan","447615"},
           {"Rohan","Kanjani","443604"}};
      

      //Setting up an ordered collection class of Students using the values in initializeArray
      //The parameter "Student", is a class. Student(String firstName, String lastName, String stuNum)
      ArrayList<Student> initializedArray = new ArrayList<Student>();
      
      //for every row in initializeArray
      for(int row = 0; row<initializeArray.length; row++)
      {
        //for every column in initializeArray
        for(int col = 0; col<initializeArray[row].length; col++)
        {
          String temp = initializeArray[row][col];      //set the first element to temp
          String temp2 = initializeArray[row][col+1];   //set the second element to temp2
          String temp3 = initializeArray[row][col+2];   //set the third element to temp3, this is where the run-time error is happening, but its happening with the other temp vars as well
          initializedArray.add(new Student(temp, temp2, temp3));
        }
      }
      System.out.println(initializedArray);
//初始化课程列表的数组(格式为名字、姓氏、学生编号}
//这是我将用于将每一行存储到ArrayList中的数组
字符串[][]初始值设置array=
{{“哈桑”、“艾哈迈德”、“462948”},
{“阿卜杜勒”、“阿尔维”、“764226”},
{“Omar”、“Askalany”、“719049”},
{“Harsim”、“Grewal”、“438629”},
{“Anis”、“Habib”、“576510”},
{“哈米兹”、“哈桑”、“621802”},
{“比拉尔”、“侯赛因”、“417440”},
{“Mazhar”、“Jabakhan”、“603544”},
{“塔尔什”、“卡玛兰”、“447615”},
{“Rohan”、“Kanjani”、“443604”};
//使用initializeArray中的值设置学生的有序集合类
//参数“Student”是一个class.Student(stringfirstname、stringlastname、stringstunum)
ArrayList InitializeArray=新ArrayList();
//对于initializeArray中的每一行

对于(int row=0;row,问题在于索引超出了界限,就像异常所说的那样


看看
initializeArray[row][col+1];
和循环条件
col我将使用

if (initializeArray[row].length > 2) {
    initializedArray.add(new Student(initializeArray[row][0], initializeArray[row][1], initializeArray[row][2]));
}
否则,内部循环的条件应为

col < initializeArray[row].length - 2
col

假设您正在访问
初始化array[row][col+2]

您需要做的就是删除第二个循环,在第一个循环中,您的代码如下所示:

String temp = initializeArray[row][0]; 
String temp2 = initializeArray[row][1];
String temp3 = initializeArray[row][2];  
initializedArray.add(new Student(temp, temp2, temp3));

因为当您在initializeArray[row]内部循环时,以及当您变为等于initializeArray[row]的列时.length+1和+2将超出范围

我认为您不需要内部循环。这样做应该足够了,但可能是一种不好的做法,因为存在硬编码。可能首先检查内部数组的长度是否有足够的元素:
String temp=initializeArray[row][0];String temp2=initializeArray[row][1];…
谢谢你的回答,我对这整件事有了更好的理解。我怎样才能只打印出这个数组列表的一个元素。当我尝试初始化Array.get(1)时,它会打印出乱七八糟的随机字符。use
initializeArray.get(index)
而index是一个介于0和initializeArray.size()之间的整数我已经试过了,但它打印出的是乱七八糟的,或者是索引的哈希值,而不是实际的字符串。我还有一个问题,我怎么能在之后打印出ArrayList中的值呢?就像它应该被排序一样,第一个学生的名字,姓氏,学号,然后是新行,第二个学生的名字,姓氏等等。直到到达最后一个学生。@Anonymous嗯,您可以迭代外部数组,从内部数组中获取元素并相应地打印(或仅迭代列表:)。我将添加一个示例。@Anonymous我已经添加了示例。您得到的那些“奇怪”字符是实例的类和id,即
Object.toString()的输出
。您需要重写该方法以获得更有意义的输出。@好吧,ArrayList是内部使用数组的列表。它们的行为非常相似,但也有不同之处(例如,如果需要,ArrayList可以通过分配新数组来“增长”)。循环和打印仍然差不多。@Anonymous抱歉,到目前为止还没有看到这个问题。如果您想只打印一个索引处的数据,请尝试正常的for循环,如
for(int i=startIndex;i如何打印ArrayList的一个元素?基本上只有一个学生和他的信息。
for(Student student : initializedArray) {
  System.out.println(student);
}
if (initializeArray[row].length > 2) {
    initializedArray.add(new Student(initializeArray[row][0], initializeArray[row][1], initializeArray[row][2]));
}
col < initializeArray[row].length - 2
String temp = initializeArray[row][0]; 
String temp2 = initializeArray[row][1];
String temp3 = initializeArray[row][2];  
initializedArray.add(new Student(temp, temp2, temp3));