试图在java中显示二维数组内容

时间:2015-02-21 21:29:35

标签: java

我是java的新手。我希望打印两个dimemensional数组中的内容,即myPoints。但是,当我打印代码时,它会抛出以下错误。

 mypoints4
 i value is 0
 2
 i value is 1
 5
 i value is 2
  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:                             
  2 at perceptron.main(perceptron.java:37)



 import java.util.*;
 import java.io.*;
 import java.text.*;
 import java.math.*;
 import java.awt.*;
 class perceptron{

   public static void main(String[] args){
     int[][] myPoints = {{2,3},{4,5},{7,8},{9,10}};
     int [][] myplot  = {{3,4},{5,6},{5,5},{5,3}};
     int sum=0;
     int i=0;
     System.out.println("mypoints"+myPoints.length);
     while(i<=myPoints.length){
       System.out.println("i value is"+i);
       System.out.println(myPoints[i][i]);
       i = i+1;
     }
   }
 }

4 个答案:

答案 0 :(得分:1)

这是因为while(i<=myPoints.length)需要while(i<myPoints.length) ..如果数组大小为5,你的i应该是i = 0,i = 1,i = 2,i = 3, i = 4 ..排除5。

另一个问题是:

System.out.println(myPoints[i][i]);

应该是:System.out.println(myPoints[i][0] + " " + myPoints[i][1]);

因为你的数组的第二维只有2个大小而不是5

答案 1 :(得分:1)

您需要使用嵌套循环。 你得到ArrayIndexOutOfBoundsException的原因是因为你正在使用myPoints[i][i],所以当i为2时,它正在寻找第三个内部数组的第三个元素(即{7,8})它不存在

答案 2 :(得分:0)

你在while循环中的条件必须是&#34; less&#34;不是&#34;少于或等于&#34;。 这是因为数组索引是基于零的,因此索引范围始终从0到(length - 1)。

答案 3 :(得分:0)

  1. 你要去(以及包括)外部数组的长度。这是一个超出范围的数组索引,因为长度为n的数组的索引为0 ... (n-1)。因此,尝试访问索引n已超出范围。

  2. 您正在访问索引i的子数组,该子数组超出以后的子数组的范围。这适用于方形矩阵(你读下对角线),但你的矩阵是4 * 2,所以myPoints[2][2]是OOB,因为你不能访问长度为2的长度{ {1}}数组2

  3. 迭代2-D数组中每个元素的最简单方法是必须有一个嵌套循环,如下所示:

    {7,8}

    更简洁的方法是使用 for-each 循环,完全删除索引,然后按顺序给出数组中的每个元素:

    for(int i = 0; i < myPoints.length; i++){
        for(int j = 0; j < myPoints[i].length; j++){
            System.out.println(myPoints[i][j]);
        }
    }
    

    甚至更简洁的方法是使用方法Arrays.deepToString(...)

    for(int[] row : myPoints){
        for(int val : row){
            System.out.println(val);
        }
    }