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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public static void main(String[] args)
         {               
                swap(new String[]{"aaa","bbb","ccc"},1,2);
                swap(new int[]{1,2,3,4,5},4,5);
               
          }
        public static <T> void swap (T[] arr ,int i,int j){
                T tem = arr[i];
                arr[i]= arr[j];
        }
第二个swap 总是报错误。 求解

评分

参与人数 1黑马币 +30 收起 理由
王德升 + 30 去上面通道把名字改下,要不无法给你加技术.

查看全部评分

6 个回复

倒序浏览
swap(new int[]{1,2,3,4,5},4,5);

这位同学,你角标越界了。
角标:0 1 2 3 4
数值:1 2 3 4 5  

4和5 交换 ,5越界啦。
回复 使用道具 举报
  1.         public static void main(String[] args)
  2.         {               
  3.               swap(new String[]{"aaa","bbb","ccc"},1,2);
  4.                swap(new Integer[]{1,2,3,4,5},4,3);//既然知道了泛型的参数只能是引用类型,你为什么要传一个基本类型的参数?
  5.                
  6.         }
  7.        public static <T> void swap (T[] arr ,int i,int j)
  8.        {
  9.                T tem = arr[i];
  10.                arr[i]= arr[j];
  11.                arr[j]=tem;
  12.        }
复制代码
回复 使用道具 举报
public static void main(String[] args)
         {               
                swap(new String[]{"aaa","bbb","ccc"},1,2);
                swap(new Integer[]{1,2,3,4,5},4,5);
               
          }
        public static <T> void swap (T[] arr ,int i,int j){
                T tem = arr[i];
                arr[i]= arr[j];
                arr[j] = tem;
        }
第二个swap 总是报错误?

   其实这个是由于你没有在函数的开始定义类型,泛型,不是基本数据类型呀。
  
  int基本数据类型,你用该使用引用数据类型,所以你应该改成是 Integer
回复 使用道具 举报
皮卫凯 发表于 2012-9-20 18:30
swap(new int[]{1,2,3,4,5},4,5);

这位同学,你角标越界了。

我原来的程序有个6的,少写了一个 数字 ,:#
回复 使用道具 举报
黑马张涛 发表于 2012-9-20 18:31

我知道泛型的参数只能是引用类型,开始错误的想当然了,泛型 T是定义的数组的类型,而不是定义的数组,而数组的类型中 int 是基本类型不是引用类型。因此 ,此例中需要改成  new Integer[]{1,2,3,4,5,6}.  
Thanks for replying.
回复 使用道具 举报
public static void main(String[] args)
         {               
                swap(new String[]{"aaa","bbb","ccc"},1,2);
                swap(new Integer[]{1,2,3,4,5},4,5);
               
          }
        public static <T> void swap (T[] arr ,int i,int j){
                T tem = arr[i];
                arr[i]= arr[j];
                arr[j] = tem;
        }
第二个swap 总是报错误?

首先肯定的,做得很好 用到了自动装箱和拆箱(值得借鉴)。
但是呢 你的  角标越界了
函数是正确的:
        public static <T> void swap (T[] arr ,int i,int j){
                T tem = arr[i];
                arr[i]= arr[j];
                arr[j] = tem;
        }
这里越界了:swap(new Integer[]{1,2,3,4,5},4,5);
原因:数组new Integer[]{1,2,3,4,5}的长度是5 最大角标是5-1=4!!你却写出了带有5的角标!!!!
简单的问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马