打印数组/反转数组

5

我有一个关于打印数组的问题。这些方法从创建自文件的数组中接收数据。输出应该每行包含10个整数,对于文件中包含的所有整数都应该如此。假设文件包含{0,1,2,3,4,5},则输出应为:

0   1   2   3   4   5

第一种方法完全正常。第二种方法会返回一个错误,我会在下面包含。有人能帮我弄清楚问题出在哪里吗?我已经尝试过谷歌搜索,但仍然不明白。以下是代码:
public static void printArray(int[] array){
            System.out.println("Printing array: ");
            for (int i = 1; i<array.length+1; i++){
                    System.out.printf("%7d", array[i-1]);
                    if (i%10==0){
                            System.out.println();
                    }

            }
            System.out.println();
}
public static void reverseArray(int[] array){
            System.out.println("Printing reversed array: ");
            int a=0;
            for (int i = array.length; i>-1; i--){
                    System.out.printf("%7d", array[i]);
                    a++;
                    if (a%10==0){
                            System.out.println();
                    }
            }
            System.out.println();
}

以下是错误信息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
    at Paniagua_ArrayProcessing.reverseArray(Paniagua_ArrayProcessing.java:49)
    at Paniagua_ArrayProcessing.main(Paniagua_ArrayProcessing.java:8)

感谢你的帮助!希望这只是一个简单的问题。
编辑:这是在Java中。

4
数组索引从0开始,一直到该数组的长度减1结束;这就是为什么你会遇到这个错误。你应该将循环改为for (int i = array.length - 1; i >= 0; i--)。请注意不要改变原始意思,使翻译更加通俗易懂。 - fge
@fge 没关系,那个方法可行!非常感谢 :) 如果这是一个答案,我会标记为正确的哈哈。 - a12b23c34
这肯定是一个重复的吧? - John Saunders
4个回答

3
一个数组的索引从 0length-1。请将您的代码改为以下形式:
for (int i = array.length-1; i>-1; i--){

代码将会运行。

您可以在此处阅读更多相关信息:Java语言基础:数组


3

数组从索引 0 开始并以 array.length-1 结尾。这就是为什么在访问数组的最后一个元素(实际上是倒数第二个元素)的时候,如果使用了 array.length,会抛出 ArrayIndexOutOfBoundsException 异常。

public static void printArray(int[] array){
    System.out.println("Printing array: ");
    for (int i = 0; i < array.length; i++){
        System.out.printf("%7d", array[i]);
        if (i % 10 == 0){
            System.out.println();
        }
    }
    System.out.println();
}

此外,您对反转数组中第10个条目的检查打印不正确,每次都重置了a。
public static void reverseArray(int[] array){
    System.out.println("Printing reversed array: ");
    for (int i = array.length - 1; i >= 0; i--){
        System.out.printf("%7d", array[i]);
        if ((array.length - i) % 10 == 0){
            System.out.println();
        }
    }
    System.out.println();
}

0

将 array.length 改为 array.length-1,因为数组的最后一个索引是 length-1

  public static void reverseArray(int[] array){
        System.out.println("Printing reversed array: ");
        int a=0;
        for (int i = array.length-1; i>=0; i--){
                System.out.printf("%7d", array[i]);
                a++;
                if (a%10==0){
                        System.out.println();
                }
        }
        System.out.println();
  }

0
啊,这是一个简单的东西使用:
public class reversearray {

    public static void main(String args[]){

        int arr[]={10,20,30,20,40,50};
        int size=arr.length;
        **for(int i=size-1;i>=0;i--)**{         //This is the imp change
            System.out.println(arr[i]);


        }


    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接