黑马程序员技术交流社区

标题: 这个错误是什么原因呢?谢谢解答! [打印本页]

作者: 陈志伟    时间: 2012-4-13 20:03
标题: 这个错误是什么原因呢?谢谢解答!
代码如下:
  1. public class Array
  2. {
  3.    public static void main(String[] args)
  4.    {
  5.      int[] arr={5,1,6,2,8,9};
  6.      GetResult(arr);
  7.      SelectionSort(arr);
  8.      GetResult(arr);  
  9.    }

  10.   public static void SelectionSort(int[] arr)
  11.   {
  12.     for(int x=0;x<arr.length-1;x++)
  13.     {
  14.       for(int y=0;y<arr.length-x;y++)
  15.       {
  16.        if(arr[y]>arr[y+1])//用判断条件来让相邻的两个元素进行比较
  17.        {
  18.         int temp = arr[y];
  19.         arr[y] = arr[y+1];
  20.         arr[y+1]= temp;
  21.        }            
  22.       }     
  23.     }
  24.   }
  25.   
  26.   public static void GetResult(int[] arr)
  27.   {
  28.     for(int x=0;x<arr.length;x++)
  29.     {
  30.       if(x==arr.length-1)
  31.       System.out.println(arr[x]);
  32.       else
  33.       System.out.print(arr[x]+",");      
  34.     }  
  35.   }
  36. }
复制代码
运行结果如下图:

请教错误原因。

作者: 尹博    时间: 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