黑马程序员技术交流社区
标题:
这个错误是什么原因呢?谢谢解答!
[打印本页]
作者:
陈志伟
时间:
2012-4-13 20:03
标题:
这个错误是什么原因呢?谢谢解答!
代码如下:
public 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]+",");
}
}
}
复制代码
运行结果如下图:
error.jpg
(37.16 KB, 下载次数: 34)
下载附件
2012-4-13 19:43 上传
请教错误原因。
作者:
尹博
时间:
2012-4-13 20:21
for(int y=0;y<arr.length-x;y++)
if(arr[y]>arr[y+1])//用判断条件来让相邻的两个元素进行比较
这里角标越界了,应该改成y<arr.length-1-x,因为x==0时y最大值取到arr.length-1,此时arr[y+1]角标值为arr.length,数组中最大的角标才arr.length-1.
ps:呵呵,你这函数应该是bubblesort吧?
作者:
chenwei
时间:
2012-4-13 20:53
错误是数组索引越界,
for(int y=0;y<arr.length-x;y++)
{
if(arr[y]>arr[y+1])
当x=0,y<arr.length
当y循环到length-1时,arr[y+1]就超过了数组的长度所以报错了
作者:
马强
时间:
2012-4-13 20:59
报错写得挺明显的,
main的第7行方法,方法中的17行角标越界,
y<length-x 但是+1后 超出了数组长度
所以报错了
作者:
蒋亮
时间:
2012-4-13 23:00
数组下标越界了。
for(int y=0;y<arr.length-x;y++)
if(arr[y]>arr[y+1])
x=0时,y达到最大值arr.length-1,y+1的值就为arr.length,这样就越界了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2