简体   繁体   English

如何修复数组索引超出范围的错误?

[英]How to fix array index out of bounds error?

The error that I am getting 我得到的错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 610
at Fib.sorted(Fib.java:67)
at Fib.main(Fib.java:17)

My code 我的密码

public class Fib
{
    public static void main(String args[]) 
    {
        System.out.println(Arrays.toString( fiblist) );
        System.out.println(Fib.add());
        System.out.println(Fib.square());
        System.out.println(Fib.reversal());
        System.out.println(Fib.sorted());
    }

     public static int fiblist[] = {1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765};
     public static int fiblen = fiblist.length;

     public Fib() 
     {
        // Do nothing
     }

     public static ArrayList<Integer> sorted()
     {
         ArrayList sorted = new ArrayList();

         for(int counter = 0; counter < fiblist[4]; counter++ )
         {
             int temp1 = fiblist[counter];
             System.out.println("Elements stored " + temp1);
         }
         for(int counter = fiblist[14]; counter < fiblist[19]; counter++)
         {
             int temp2 = fiblist[counter];
             System.out.println("Last Elements stored " + temp2);
         }
         return sorted;
    }
}

I'm trying to store the last 5 elements of my array in temp 2. Then I will switch them. 我试图将数组的最后5个元素存储在temp 2中。然后将其切换。 Is there an easier way to do this? 有没有更简单的方法可以做到这一点? Switch the first five elements of an array with the last five? 切换数组的前五个元素与后五个元素? How would you switch them with a for loop? 您将如何通过for循环切换它们?

You are confusing array index and value. 您在混淆数组索引和值。 fiblist[19] is 6765. You want your counters to go from 0 to 4 and 14 to 19, not fiblist[19]. fiblist [19]是6765。您希望计数器从0变为4,从14变为19,而不是fiblist [19]。

for(int counter = 0; counter < 4; counter++ )
{
    int temp1 = fiblist[counter];
    System.out.println("Elements stored " + temp1);
}

for(int counter = 14; counter < 19; counter++)
{
    int temp2 = fiblist[counter];
    System.out.println("Last Elements stored " + temp2);
}

This works 这有效

for(int i=0;i<fiblist.length;i++){
   System.out.print(fiblist[i]+",");
}
System.out.println();

for (int i=0;i<5;i++){
    temp=fiblist[i];
    fiblist[i]=fiblist[fiblist.length-i-1];
    //the first ellement= the last
    //the second=second from last...
    fiblist[fiblist.length-1-i]=temp;
}

for(int i=0;i<fiblist.length;i++){
    System.out.print(fiblist[i]+",");
}

Output: 输出:

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,
6765,4181,2584,1597,987,8,13,21,34,55,89,144,233,377,610,5,3,2,1,1,

Try this. 尝试这个。 It's a sorting algorithm (A fairly poor one though) 这是一种排序算法(虽然相当差)

public static void sort(int[] a) {
    int iMin;
    int n = a.length;
    for (int j = 0; j < n-1; j++) {
        iMin = j;
        for (int i = j+1; i < n; i++) {
            if (a[i] < a[iMin]) {
                iMin = i;
            }
        }
        if(iMin != j) {
            swap(j, iMin, a);
        }
    }
}

public static void swap(int i, int j, int[] arr){
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM