使用IndexOfMaxInRange时出现问题

时间:2013-11-13 04:59:03

标签: java xcode

我发布的原因只是因为我正在编写我正在写的代码。

代码的目标是使用selectionSort方法中的swap和IndexOMaxInRange方法将数组从最大到最小排序。我明白我的代码可能很草率,但我真的碰到了这个代码。

我的问题是:

为什么我一直在“解析时达到了目的”错误,这可能是显而易见但我不热衷于使用return语句,因此在尝试调试时可能会有所帮助,但我很遗憾。

我运行代码时得到的错误是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at indexofmaxinrange.IndexOfMaxInRange.selectionSort(IndexOfMaxInRange.java:27)
at indexofmaxinrange.IndexOfMaxInRange.main(IndexOfMaxInRange.java:36)
Java Result: 1

code:


package indexofmaxinrange;
import java.util.Arrays;
/**
* @author zrcenivi
*/

public class IndexOfMaxInRange {
public static int indexOfMaxInRange (int[]a){        
Arrays.sort(a);
int gindex = a.length - 1;
return gindex;
} 
public static int[] swapElement(int[]a2, int j, int i) {
int temp = i;
a2[i] = a2[j];
a2[j] = temp;
return a2;
}
public static int[] selectionSort(int[]a){
Arrays.sort(a);
int min=0; int temp;
for (int i=0;i<=a.length - 1;i++){
min = i;
}
for (int j = a.length; j >=0; j--){
if (a[min]<a[j]){
a = swapElement(a,a[min],a[j]);
}
}      
return a;
}
public static void main(String[] args) {
int[] A = {1,3,2};
System.out.println(selectionSort(A));
}

2 个答案:

答案 0 :(得分:1)

试试这个

for (int j = a.length - 1; j >=0; j--) {
}

而不是

for (int j = a.length; j >=0; j--){
}

此外,这将打印出您期望的内容

public static void main(String[] args) {
  int[] A = { 1, 3, 2 };
  System.out.println(Arrays.toString(selectionSort(A)));
}

答案 1 :(得分:0)

以下2个地方可能导致指数超出范围。

1    for (int **j = a.length**; j >=0; j--){

我们可以使用的最大索引a.length -1。你应该使用

for (int j = a.length-1; j >=0; j--){

2您应该将index传递给方法swapElement,而不是使用索引传递数组中的值。这是因为该值可能超过Array的长度。

 if (a[min]<a[j]){

  a = swapElement(a,a[min],a[j]);
 }

请改用以下代码。

 if (a[min] < a[j]) {
            a = swapElement(a, min, j);
        }

另外。您可以使用Arrays.toString方法打印数组内容。

 System.out.println(Arrays.toString(selectionSort(A)));

文本示例如下:

int[] A = { 1, 3, 2, 4, 9, 25,12};
System.out.println(Arrays.toString(selectionSort(A)));

控制台输出:

[1, 2, 3, 4, 9, 12, 25]