黑马程序员技术交流社区
标题:
这个错误是什么原因呢?求大虾!
[打印本页]
作者:
史卜坤
时间:
2012-6-18 10:57
标题:
这个错误是什么原因呢?求大虾!
代码如下:
class Array
{
public static void main(String[] args)
{
int[] arr={5,1,6,2,8,9};
GetResult(arr);
SelectionSort(arr);
GetResult(arr);
}
public static void SelectionSort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=0;y<arr.length-x;y++)
{
if(arr[y]>arr[y+1])//用判断条件来让相邻的两个元素进行比较
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1]= temp;
}
}
}
}
public static void GetResult(int[] arr)
{
for(int x=0;x<arr.length;x++)
{
if(x==arr.length-1)
System.out.println(arr[x]);
else
System.out.print(arr[x]+",");
}
}
}
20120412_110a343cd5ac49fda07dBcwoO4ToROKj.png
(3.33 KB, 下载次数: 33)
下载附件
2012-6-18 10:56 上传
作者:
黑马—陈磊
时间:
2012-6-18 11:06
《java.lang.ArrayIndexOutOfBoundsException:》:这个错误是下标越界。 你的索引值大于数组总长度了,导致发生了这个异常。
public static void SelectionSort(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
for (int y = 0; y < arr.length -1-x; y++) {
//你这边错了,我已修改,还需要减1
if (arr[y] > arr[y + 1])// 用判断条件来让相邻的两个元素进行比较
{
int temp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = temp;
}
}
}
}
作者:
胡卿
时间:
2012-6-18 11:12
错误原因 java.lang.ArrayIndexOutOfBoundsException(数组角标越界)
for(int y=0;y<arr.length-x;y++)
这地方应该改成 for(int y=0;y<arr.length-x-1;x++)
如果为arr.length-x, 当x=0,y=arr.length-x-1就为arr.length-1,那么y+1的值就为arr.length,而数组中最大角标只能是arr.length-1,所以出现以上错误
希望楼主能明白
作者:
余清兰
时间:
2012-6-18 11:25
public static void SelectionSort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=0;y<arr.length-x;y++)
//这里要写成for(int y=0;y<arr.length-x-1;y++)你这里是选择排序,每次循环比一次后就会少一个比较的数,当到最后一个数的时候,就是相当于自己在跟自己比,自已就不用比较了,就要把自己那个角标减掉,所以要写成y<arr.length-x-1
{
if(arr[y]>arr[y+1])//用判断条件来让相邻的两个元素进行比较
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1]= temp;
}
}
}
}
作者:
常佳杰
时间:
2012-6-18 11:33
public static void SelectionSort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=0;y<arr.length-x;y++)//
这条语句导致(索引值大于数组总长度)下标越界异常,应改成 for(int y=0;y<arr.length-x;y++)
{
if(arr[y]>arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1]= temp;
}
}
}
}
也就是现在你有6个元素,刚开始就应该比较5次,但你想想要写成你的那样的话,就是比较了6次.....
作者:
曾祥彬
时间:
2012-6-18 12:09
大哥,出现错误的时候应该学会看出错信息,你看你上面的出错信息已经很明确的告诉你了在哪一行出现了什么错误!!!
ArrayIndexOutOfBoundsException翻译过来的意思就是:数组下标越界异常
然后错误信息是在main函数的中低21行出现的,而21这里出错又是SelectionSort中的也就是在程序中的第35行引起的
第一行告诉的是引起下标越界的错误下标是6,也就是说你数组里面的元素少于6个,所以下标就越界了,Understand?
作者:
胡大强
时间:
2012-6-18 12:19
class Array1
{
public static void main(String[] args)
{
int[] arr={5,1,6,2,8,9};
GetResult(arr);
SelectionSort(arr);
GetResult(arr);
}
public static void SelectionSort(int[] arr)
{
for(int x=0;x<arr.length-1;x++) //冒泡排序。。。 一共要做arr.length-1趟,每趟保证可一把最大的数放到最后
{
for(int y=0;y<arr.length-x-1;y++) ///此处修改为arr.length-x-1。//每趟将从0~arr.length-x-1之间每两个数相互比较,共比较arr.length-x
{
if(arr[y]>arr[y+1])//用判断条件来让相邻的两个元素进行比较
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1]= temp;
}
}
}
}
public static void GetResult(int[] arr)
{
for(int x=0;x<arr.length;x++)
{
if(x==arr.length-1)
System.out.println(arr[x]);
else
System.out.print(arr[x]+",");
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2