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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liuelxiwd 中级黑马   /  2013-6-1 10:59  /  2005 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 liuelxiwd 于 2013-6-1 12:37 编辑



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我定义了一个二维数组String [][] arr = new String[5][2];每行的第一列是姓名,第二列是成绩,现在要求按成绩从高到底把这五行拍序打印出来。求代码!!!


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

12 个回复

正序浏览
王永贺 发表于 2013-6-1 12:40
就是交换姓名和成绩的  我在代码上已经加了注释了,  其实这道题你完全可用TreeMap做  这个集合就是按自 ...

刚才上厕所想通了
回复 使用道具 举报
liuelxiwd 发表于 2013-6-1 12:33
哥们儿,再麻烦你一下,中间那个循环体中的能解释一下么

就是交换姓名和成绩的  我在代码上已经加了注释了,  其实这道题你完全可用TreeMap做  这个集合就是按自然顺序来的
回复 使用道具 举报
我的方法,很挫,用的是Comparator,Comparable类实现的。。。。。。
  1. package com.itheima;

  2. import java.util.Arrays;
  3. import java.util.Collections;
  4. import java.util.Comparator;
  5. import java.util.Map;
  6. import java.util.TreeSet;

  7. public class TestArray {
  8.        
  9.         public static void main(String[] args) {
  10.                 String[][] arr = new String[][] { { "刘海芳", "86" }, { "刘海芳1", "87" },
  11.                                 { "刘海芳2", "82" } ,{ "刘海芳3", "68" }, { "刘海芳4", "75" },
  12.                                 { "刘海芳5", "98" }};
  13.                  int[] temp=new int[arr.length];
  14.                  TreeSet set=new TreeSet();
  15.                 for (int i = 0; i < arr.length; i++) {
  16.                         Student stu=new Student(arr[i][0],Integer.parseInt(arr[i][1]));
  17.                         set.add(stu);
  18.                         }
  19.                 for (Object object : set) {
  20.                         Student stu=(Student)object;
  21.                         System.out.println("姓名:"+stu.getName()+"    得分"+stu.getScore());
  22.                 }
  23.                 }
  24.                  
  25.                
  26.         }
  27. class Student implements Comparator,Comparable{
  28.         //定义属性
  29.         private String name;
  30.         private int score;
  31.         Student(String name,int score){
  32.                 this.name=name;
  33.                 this.score=score;
  34.         }
  35.         public String getName() {
  36.                 return name;
  37.         }
  38.         public void setName(String name) {
  39.                 this.name = name;
  40.         }
  41.         public float getScore() {
  42.                 return score;
  43.         }
  44.         public void setScore(int score) {
  45.                 this.score = score;
  46.         }
  47.         //重新tosring方法,便于打印的直观性
  48.         @Override
  49.         public String toString() {
  50.                 // TODO Auto-generated method stub
  51.                 return this.name;
  52.         }
  53.         //重新compareTo和compare方法
  54.         @Override
  55.         public int compareTo(Object o) {
  56.                 Student stu=(Student)o;
  57.                 if (this.score > stu.score) {
  58.                         return 1;
  59.                 } else if (this.score <stu.score) {
  60.                         return -1;
  61.                 } else {
  62.                         return 0;
  63.                 }
  64.         }
  65.         @Override
  66.         public int compare(Object o1, Object o2) {
  67.                 Student st1 =(Student)o1;  
  68.         Student st2 =(Student)o2;  
  69.         return st1.name.compareTo(st2.name);
  70.         }
  71.        
  72. }
  73.        
复制代码
回复 使用道具 举报

哥们儿,再麻烦你一下,中间那个循环体中的
  1. String temp;
  2.                              temp=arr[i][4];
  3.                              arr[i][4]=arr[j][4];
  4.                              arr[j][4]=temp;
  5.                              
  6.                              String temp1;
  7.                              temp1=arr[i][0];
  8.                              arr[i][0]=arr[j][0];
  9.                              arr[j][0]=temp1;
复制代码
能解释一下么
回复 使用道具 举报
  1. public class test {

  2.         public static void main(String[] args) {



  3.                 String[][] arr = { { "wang", "100" }, { "li", "78" }, { "zhao", "77" },

  4.                                 { "xu", "35" }, { "lei", "88.5" } };

  5.                 for (int i = 0; i < arr.length; i++) {

  6.                         for (int j = 0; j < arr.length; j++) {

  7.                                 float n = Float.parseFloat(arr[i][1]);

  8.                                 float m = Float.parseFloat(arr[j][1]);

  9.                                 if (n > m) {

  10.                                         String temp;

  11.                                         temp=arr[i][1];

  12.                                         arr[i][1]=arr[j][1];

  13.                                         arr[j][1]=temp;

  14.                                         String temp1;

  15.                                         temp1=arr[i][0];

  16.                                         arr[i][0]=arr[j][0];

  17.                                         arr[j][0]=temp1;

  18.                                 }

  19.                         }

  20.                 }

  21.                 System.out.println("按照成绩排名为:");

  22.                 for (int i = 0; i < arr.length; i++) {

  23.                         for (int j = 0; j < arr[i].length; j++) {

  24.                                 System.out.print(arr[i][j]+"\t");

  25.                         }

  26.                         System.out.println();

  27.                 }

  28. }}
复制代码
回复 使用道具 举报
楼上说的没错,和普通的排序差不多的,思路都是一样

class ArrayTest
{
        public static void main(String[] args)
        {
                String[][] a = new String[][]{
                                {"a","44"},{"b","92"},
                                {"c","67"},{"d","82"},{"e","74"}};
               
                String temp="";
                System.out.println("交换前");
                sop(a);
                for(int i=0;i<5-1;i++){
                        for(int j=0;j<5-i-1;j++){                               
                                if(swap(a[j][1],a[j+1][1])){
                                        //交换成绩
                                        temp = a[j+1][1];
                                        a[j+1][1] = a[j][1];
                                        a[j][1] = temp;
                                        //交换姓名
                                        temp = a[j+1][0];
                                        a[j+1][0] = a[j][0];
                                        a[j][0] = temp;
                                }
                        }
                }
                System.out.println("交换后");
                sop(a);
        }
       
        public static boolean swap(String a, String b){
                int A = Integer.parseInt(a);
                int B = Integer.parseInt(b);
                if(A>B){
                        return true;
                }else{
                        return false;
                }
        }
       
        public static void sop(String[][] Array){
                for(int i=0;i<5;i++){
                        for(int j=0;j<2;j++){
                                System.out.print(Array[i][j]);
                        }
                        System.out.println();
                }
        }
       
}
回复 使用道具 举报
楼上说的没错,和普通的排序差不多的,思路都是一样

class ArrayTest
{
        public static void main(String[] args)
        {
                String[][] a = new String[][]{
                                {"a","44"},{"b","92"},
                                {"c","67"},{"d","82"},{"e","74"}};
               
                String temp="";
                System.out.println("交换前");
                sop(a);
                for(int i=0;i<5-1;i++){
                        for(int j=0;j<5-i-1;j++){                               
                                if(swap(a[j][1],a[j+1][1])){
                                        //交换成绩
                                        temp = a[j+1][1];
                                        a[j+1][1] = a[j][1];
                                        a[j][1] = temp;
                                        //交换姓名
                                        temp = a[j+1][0];
                                        a[j+1][0] = a[j][0];
                                        a[j][0] = temp;
                                }
                        }
                }
                System.out.println("交换后");
                sop(a);
        }
       
        public static boolean swap(String a, String b){
                int A = Integer.parseInt(a);
                int B = Integer.parseInt(b);
                if(A>B){
                        return true;
                }else{
                        return false;
                }
        }
       
        public static void sop(String[][] Array){
                for(int i=0;i<5;i++){
                        for(int j=0;j<2;j++){
                                System.out.print(Array[i][j]);
                        }
                        System.out.println();
                }
        }
       
}
回复 使用道具 举报

哥们儿,谢了,等有机会见面请你喝酒,哈哈{:soso_e113:}
回复 使用道具 举报

急用,希望能在两个板块中都有人能看到
回复 使用道具 举报
本帖最后由 王永贺 于 2013-6-1 12:39 编辑
  1. public class test {
  2.         public static void main(String[] args) {

  3.                 String[][] arr = { { "wang", "100" }, { "li", "78" }, { "zhao", "77" },
  4.                                 { "xu", "35" }, { "lei", "88.5" } };
  5.                 for (int i = 0; i < arr.length; i++) {
  6.                         for (int j = 0; j < arr.length; j++) {
  7.                                 float n = Float.parseFloat(arr[i][1]);
  8.                                 float m = Float.parseFloat(arr[j][1]);
  9.                                 if (n > m) { //为了保持姓名和成绩同步,必须同时交换成绩和姓名
  10.                                         String temp;  //交换成绩
  11.                                         temp=arr[i][1];
  12.                                         arr[i][1]=arr[j][1];
  13.                                         arr[j][1]=temp;
  14.                                         String temp1;//交换姓名
  15.                                         temp1=arr[i][0];
  16.                                         arr[i][0]=arr[j][0];
  17.                                         arr[j][0]=temp1;
  18.                                 }
  19.                         }
  20.                 }
  21.                 System.out.println("按照成绩排名为:");
  22.                 for (int i = 0; i < arr.length; i++) {
  23.                         for (int j = 0; j < arr[i].length; j++) {
  24.                                 System.out.print(arr[i][j]+"\t");
  25.                         }
  26.                         System.out.println();
  27.                 }
  28. }}
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
你怎么发了两次
回复 使用道具 举报
- - 和普通排序没有区别。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马