二维数组如下
Object b[][]={{"name1",5},{"name2",8},{"name3",10},{"name3",20},{"name4",2}};请问如何对有数字那一列排序之后,名字那一列中的名字找到自己正确的位置?譬如说第一个“5”是在位置b[0][1],"name1"b[0][0]排序后,“5”的位置在b[1][1],“name1”在b[1][0]上谢谢

解决方案 »

  1.   


    for(int i=b.length-1;i>0;i--){
        for(int j=0;j<i;j++){
            if(b[j][1]>b[j+1][1]){
                Object[] tmp = b[j];
                b[j] = b[j+1];
                b[j+1] = tmp;
            }
        }
    }
      

  2.   

    import java.util.Arrays;public class Test {
    public static void main(String args[]) {
         Object b[][]={{"name1",5},{"name2",8},{"name3",10},{"name3",20},{"name4",2}};
         Object temp[];
         for(int i=0;i<b.length;i++){
         for(int j=i;j<b.length;j++){
         if((Integer)b[j][1]<(Integer)b[i][1]){
         temp=b[i];
         b[i]=b[j];
         b[j]=temp;
         }
         }
         }
         System.out.println(Arrays.deepToString(b));
        }
    }
    输出
    ===============
    [[name4, 2], [name1, 5], [name2, 8], [name3, 10], [name3, 20]]
      

  3.   

    public class Test{
         public static void changValues(Object a[] , Object b[]){
              Object temp[]; 
              temp=a[];
              a[]=b[];
              b[]=temp;
         }
         public static void main(String args[]) {
             Object b[][]={{"name1",5},{"name2",8},{"name3",10},{"name3",20},{"name4",2}};
             for(int i=0 ; i<b.length-1 ; i++){
                 int k = i;
                 for(int j=i+1 ; j<b.length ; j++){
                     if((Integer)b[j][1]<(Integer)b[k][1]){
                        k = j ;
                     }
                 }
                 changValues( b[i] , b[k]);
             }
        }
    }
      

  4.   

    谢谢各位的回复,追加一个问题,请问在交换的时候,为什么只传一维数组给TEMP呢?由于二维数组操作不常用,一些基础问题都忘记了,希望各位解答一下,谢谢!
      

  5.   


    import java.util.*;
    class temp
    {
       public static void main(String[] args){
        Object tmp,tmp1;
        Object[][] b={{"name1",5},{"name2",8},{"name3",10},{"name3",20},{"name4",2}};
        for(int i=0;i<b.length-1;i++){
    for(int j=i+1;j<b.length;j++){
       if((Integer)b[i][1]>(Integer)b[j][1]){
       tmp=b[i][1];tmp1=b[i][0];
       b[i][1]=b[j][1];b[i][0]=b[j][0];
       b[j][1]=tmp;b[j][0]=tmp1;
       }
    }
        }
        for(int i=0;i<b.length;i++)
          System.out.println(b[i][0]+" "+b[i][1]);
    }
    }
      

  6.   


    哦~谢谢高人,现在再追加一条问题,就是我想写个方法,例如sort(Object b[][],Integer x,String name)
    不知道我这样写对不对,其实就是想通过输入参数,跟已知的二维数组比较,最后把新的元素插进数组里面的正确位置,而且最后得出的数组是有序的。请问这样的方法如何实现啊?万分感谢~~
      

  7.   

    参数Integer x改为 int x,然后修改一下楼上就好了,你可以把name和x加入到数组里面,然后再调用一下楼上的排序就OK。
      

  8.   


    谢谢回复,但是为什么要把参数Integer x改为 int x呢?二维数组b[][]是放Object类型的哦。还有,我想光用楼上的排序不够,因为新的元素插进去之后,在原来数组中的其中一个元素必去要剔除,这是我暂时不能解决的问题。我本来想用到递归,但是发觉好像实现不了,请高人把代码写一下吧~谢谢
      

  9.   


    郁闷,自己回的帖子竟然不能编辑.......再想问一下,如何把name和x加入到数组里面啊?是要重新定义一个二维数组k[1][2]吗?
      

  10.   

    不用改类型,JDK1.5以上(没记错的话)里会自动封箱的。
      

  11.   

    谢谢回复,我现在自己写了一段代码,思路是这样的:
      新创建一个TempData[][]数组,然后把新的元素和旧的数组一起加入进去,然后执行sort()方法,排序,把排好序的TempDatap[][]数组的前5位输入回data数组,代码如下class temp
    {
       public static void sort(Object TempData[][])
       {
       //Object tmp,tmp1;
       Object temp[];
           for(int i=0;i<TempData.length;i++){
               for(int j=i;j<TempData.length;j++){
                   if((Integer)TempData[j][1]<(Integer)TempData[i][1]){
                       temp=TempData[i];
                       TempData[i]=TempData[j];
                       TempData[j]=temp;
                   }
               }
           }
       }
       public static void copy(Object data[][],int x,String name)
       {
       Object TempData[][]=new Object[6][6];
       for(int i=0;i<data.length;i++)
       {
       TempData[i][0]=data[i][0];
       TempData[i][1]=data[i][1];
       }
       TempData[5][1]=x;
       TempData[5][0]=name;
       sort(TempData);
       for(int i=0;i<data.length;i++)
       {
       data[i][0]=TempData[i][0];
       data[i][1]=TempData[i][1];
       }
       }
       public static void main(String[] args){
        
        Object[][] b={{"name1",5},{"name2",8},{"name3",10},{"name3",20},{"name4",2}};
        copy(b,3,"james");
        for(int i=0;i<b.length;i++){
          System.out.println(b[i][0]+" "+b[i][1]);
        }
    }
    }
      

  12.   

    Object b[][]={{"name1",5},{"name2",8},{"name3",10},{"name3",20},{"name4",2}}; for(Object i:Object b[])
    {
       
       for(Object j:b)
       {
          System.out.println(j);
       }
    }