我一直在这个阵列上出界...为什么?

时间:2013-11-24 21:18:11

标签: java arrays sorting

问题基本上是标题....为什么这个程序不喜欢我:3我继续得到“ArrayIndexOutofBoundsException”

public static void main(String[] args) {
   double[] l1 = {1.2, 3.4, 1.2, 3.4, 1.1};
   double[] l2 = {1.2, 1.3, 1.4, 1.5, 1.6};

   isSorted(l1);
   isSorted(l2);

}
public static void isSorted(double[] l1){
    Scanner in = new Scanner(System.in);

     if (l1[2]>l1[1])
         if(l1[3]>l1[2])
             if(l1[4]>l1[3])
                 if(l1[5]>l1[4])
                 System.out.println("True");
     else
                 System.out.println("False");
}

是因为我预先填充了阵列吗?

edit2:忽略扫描仪。

编辑3:哇。好的。索引从0开始,我是个白痴!

感谢。 -_-

4 个答案:

答案 0 :(得分:1)

请注意这一点

if(l1[5]>l1[4])

l1数组中只有5个值。但是你可以访问l1[5]

l1[0],l1[1],l1[2],l1[3],l1[4]

这些都是五个值,但您访问l1[5],因此会引发异常。

答案 1 :(得分:1)

java中的数组是0-base。这意味着您无法访问案例中的索引5。 如果你使用java,最好使用List的接口的一些实现。

我只是想知道您花了多少时间来调试代码。 (在你的情况下,仅仅打印元素就足以实现数组基于零。)

答案 2 :(得分:0)

java中的数组是使用基于0的计数完成的。这意味着数组中的第一个元素是l1[0]。因此,使用l1[5]的代码行意味着您访问超出范围的元素。

答案 3 :(得分:0)

Java中的数组索引和大多数语言从0开始:

if ((l1[1]>l1[0]) && (l1[2]>l1[1]) && (l1[3]>l1[2]) && (l1[4]>l1[3]))
    System.out.println("True");
else
    System.out.println("False");