我在Java中有以下代码。
public class TestArray
{
public static void main(String s[])
{
int arr[]={23,12,1,4,1,4,23,6};
int temp=arr[0];
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr.length;j++)
{
if(arr[i]>arr[j+1])
{
temp=arr[j+1];
arr[j+1]=arr[i];
arr[i]=temp;
}
if(arr[i]==arr[j+1])
{
arr[j+1]=arr[j+2];
}
}
}
for(int i=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
}
}
但是这段代码正在抛出
线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException:8 在com.test.java.TestArray.main(TestArray.java:16)
有人可以帮我吗?
答案 0 :(得分:0)
当arr[j + 1]
为arr[j + 2]
时,尝试索引j
或arr.length - 1
将会失败。
您应该将索引运行到比目前更低的值吗?此外,您索引j + 2
的最终繁荣看起来是不必要的。
作为一种风格点,尽可能保持temp
的范围。交换两个数组元素时只需要它。
答案 1 :(得分:0)
看起来您正在尝试按降序对数组进行排序。你可以试试这个:
public class TestArray
{
public static void main(String s[])
{
int arr[]={23,12,1,4,1,4,23,6};
int n = arr.length;
int temp = 0;
for(int i=0; i < n; i++){
for(int j=1; j < (n-i); j++){
if(arr[j-1] < arr[j]){
//swap elements
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
for(int i=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
}
}
您可以理解代码。 如果您想知道如何获得例外,请参考Bathsheba
的回答答案 2 :(得分:0)
将您的代码修改为
for(int i=0;i<arr.length-1;i++) {
for(int j=i;j<arr.length-1;j++) {
if(arr[i]>arr[j+1]) {
temp=arr[j+1];
arr[j+1]=arr[i];
arr[i]=temp;
}
if(arr[i]==arr[j+1]) {
arr[j+1]=arr[j+2];
}
}
}
在循环中,j的值将从0到7.并且您正在尝试访问数组的第j + 1位置。因此,当j的值为7时,您正在访问[8]并且它不在数组大小的范围内。大小为8的数组的索引值为0到7。