黑马程序员技术交流社区

标题: 错误提示:Exception in thread “main”。。怎么解决啊? [打印本页]

作者: 李前进    时间: 2014-3-17 19:07
标题: 错误提示:Exception in thread “main”。。怎么解决啊?
  1. class  Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[]arr={3,5,6,7,1,9,12};
  6.                 selectSort(arr);
  7.         }

  8.         public static void selectSort(int[] arr)
  9.         {
  10.                 for(int x=0;x<arr.length-1;x++)
  11.                 {
  12.                         for(int y=x+1;y<arr.length;x++)
  13.                         {
  14.                                 if(arr[x]>arr[y])
  15.                                 swap(arr,x,y);
  16.                         }
  17.                 }
  18.         }

  19.         public static void swap(int[] arr,int a,int b)
  20.         {
  21.                 int temp=arr[a];
  22.                 arr[a]=arr[b];
  23.                 arr[b]=temp;
  24.         }


  25. }
复制代码

作者: 李前进    时间: 2014-3-17 19:10
错误是这样的。该怎么解决呢?{:3_47:}

QQ截图20140317190841.png (2.56 KB, 下载次数: 92)

QQ截图20140317190841.png

作者: 行如止水    时间: 2014-3-17 19:16
下标越界
作者: nicholyx    时间: 2014-3-17 19:25
本帖最后由 nicholyx 于 2014-3-17 19:30 编辑

数组下标越界了,改正之后如下,加上了打印数组语句

  1. class  Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[]arr={3,5,6,7,1,9,12};
  6.                 printArray(arr);
  7.                 selectSort(arr);
  8.                 printArray(arr);
  9.         }

  10.         public static void selectSort(int[] arr)
  11.         {
  12.                 for(int x=0;x<arr.length-1;x++)
  13.                 {
  14.                         for(int y=x+1;y<arr.length;y++)   //最后的语句是y++,原来的是x++
  15.                         {
  16.                                 if(arr[x]>arr[y])
  17.                                 swap(arr,x,y);
  18.                         }
  19.                 }
  20.         }

  21.         public static void swap(int[] arr,int a,int b)
  22.         {
  23.                 int temp=arr[a];
  24.                 arr[a]=arr[b];
  25.                 arr[b]=temp;
  26.         }

  27.                 public static void printArray(int[] arr) {   //数组打印语句
  28.                 System.out.print("[");
  29.                 for(int i = 0; i < arr.length; i++) {
  30.                         if(i < arr.length - 1) {
  31.                                 System.out.print(arr[i] + ", ");
  32.                         } else {
  33.                                 System.out.println(arr[i] + "]");
  34.                         }                                
  35.                 }
  36.         }
  37. }
  38. /*
  39. 输出结果:
  40. [3, 5, 6, 7, 1, 9, 12]
  41. [1, 3, 5, 6, 7, 9, 12]
  42. */
复制代码

作者: 李前进    时间: 2014-3-17 19:26
行如止水 发表于 2014-3-17 19:16
下标越界

再具体点呗,具体是哪个地方产生的越界的?
作者: 目标    时间: 2014-3-17 19:28
  1. for(int x=0;x<arr.length-1;x++)
  2.                 {
  3.                         for(int y=x+1;y<arr.length;x+)//应该是y++不是x++当外层for循环x取到最大值时在内循环 又加1,下面访问时会角标越界
  4.                         {
  5.                                 if(arr[x]>arr[y])
  6.                                 swap(arr,x,y);
  7.                         }
  8.                 }
复制代码

作者: duanyoujiji    时间: 2014-3-17 19:28
  1. class  Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[]arr={3,5,6,7,1,9,12};
  6.                 selectSort(arr);
  7.                 sop(arr);
  8.         }
  9. static void sop(int [] arr)
  10. {
  11.                 for(int i=0;i<arr.length;i++)
  12.                 System.out.println(arr[i]);
  13.         }

  14.         public static void selectSort(int[] arr)
  15.         {
  16.                 for(int x=0;x<arr.length-1;x++)
  17.                 {
  18.                         for(int y=x+1;y<arr.length;y++)//这里是y++
  19.                         {
  20.                                 if(arr[x]>arr[y])
  21.                                 swap(arr,x,y);
  22.                         }
  23.                 }
  24.         }

  25.         public static void swap(int[] arr,int a,int b)
  26.         {
  27.                 int temp=arr[a];
  28.                 arr[a]=arr[b];
  29.                 arr[b]=temp;
  30.         }
  31.         

  32. }
复制代码

作者: 李前进    时间: 2014-3-17 19:29
行如止水 发表于 2014-3-17 19:16
下标越界

看到错误了。。。一个低级错误{:3_48:}
作者: 李前进    时间: 2014-3-17 20:06
nicholyx 发表于 2014-3-17 19:25
数组下标越界了,改正之后如下,加上了打印数组语句

嗯嗯!很详细!:handshake




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2