A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董霁辉 中级黑马   /  2013-3-21 00:31  /  1565 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 董霁辉 于 2013-3-21 15:14 编辑

public class TestSelectSort
{
    public static void main(String[] args)
    {
          int[] arr = {3,42,3234,12,3425,765,87,90,1};
          printArr(arr);
          selectSort(arr);
          printArr(arr);
          System.out.println(arr[arr.length+10]);
    }   
    public static void printArr(int[] arr)
    {
         System.out.print("{");
         for(int x = 0;x<arr.length;x++)
         {
              if(x!=arr.length-1)
                  System.out.println(arr[x]+",");
              else
                  System.out.println(arr[x]+"}");            
         }
    }
    public static void selectSort(int[] arr)
    {
         for(int x = 0;x<arr.length+10;x++)
             for(int y = x+1;y<arr.length;y++)
                {
                     if(arr[x]>arr[y])
                     {
                           int temp = arr[x];
                           arr[x] = arr[y];
                           arr[y] = temp;
                     }
                }
    }

}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------
测试目的:打印数组角标以外的引用时,提示越界,第9行目的已达到。问题:在选择排序函数中,我刻意使外层循环x的值大于数组元素个数,原以为会在调用arr1[x]的时候提示越界,郁闷的是没有报错,还将数组进行了排序,求解 为什么调用arr1[x]的时候没有报错?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

6 个回复

正序浏览
于腾飛 发表于 2013-3-21 10:44
外层循环控制的是循环次数,你加多少都不会越界,内层循环Y才会越界!
内层循环Y才会越界!

真给力! {:soso_e179:}
回复 使用道具 举报
董霁辉 发表于 2013-3-21 09:52
首先 非常感谢您的耐心阅读,这里我想知道的是在选择排序函数中,我刻意使外层循环x的值大于数组元素个数 ...

外层循环控制的是循环次数,你加多少都不会越界,内层循环Y才会越界!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
首先   你的交换方法写的有问题 编译报错
改为:

public static void swap(int[] arr,int a,int b){//换位
                int temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
        }

第九行:数组已经给出,元素个数已经定义,所以 arr1[ s ] 会报错

排序能进行,是你调用了函数的功能。
传递的实际参数,调用了这个功能。

arr.length + 5执行了但没有意义

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
于腾飛 发表于 2013-3-21 01:06
public class ArrayTest
{  
            public static void main(String[] args)

首先 非常感谢您的耐心阅读,这里我想知道的是在选择排序函数中,我刻意使外层循环x的值大于数组元素个数,原以为会在调用arr1[x]的时候提示越界,郁闷的是没有报错,还将数组进行了排序,求解 为什么调用arr1[x]的时候没有报错?
回复 使用道具 举报
本帖最后由 于腾飛 于 2013-3-21 01:09 编辑

public class ArrayTest
{  
            public static void main(String[] args)
        {  
                  int [] arr = {75,654,45,33,32,1,30,3,5,8,45,74545,44,116,456,87,99};
                printArr(arr);
                selectSort(arr);
                printArr(arr);
                int s = arr.length+5-1;
                System.out.print(arr);  
            }  
             //交换数组中两个元素的位置。  
            public static void swap(int[] arr, int index1,int index2)
        {  
                int temp = arr[index1];  
                arr[index1]= arr[index2];  
                arr[index2]= temp;  
            }
            //选择排序:每次循环后,最值放在最前边。  
            public static void selectSort(int[] arr)
        {  
                for(int x=0;x<arr.length+5;x++)
                {  
                            for(int y=x+1;y<arr.length;y++)
                        {  
                                if(arr[x]>arr[y])
                                {  
                                            swap(arr, x, y);  
                                }  
                            }  
                }  
            }  
            //打印数组  
            public static void printArr(int [] arr)
        {  
                System.out.print("[");  
                for(int x=0;x<arr.length;x++)
                {  
                            if(x<arr.length-1)  
                                System.out.print(arr[x]+", ");  
                            else
                        {  
                                System.out.println(arr[x]+"]");  
                            }  
                }  
            }        
}
编译时只是检查语法有没有错误,还没有调用,所以不会报错!要想达到你要的测试目的,选择排序内循环条件表达式y<arr.length+5.此时调用就越界了!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
不知道为什么会变成上面的样子,9行以后每行都有横线
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马