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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

黄凯

黑马帝

  • 黑马币:1

  • 帖子:16

  • 精华:0

© 黄凯 黑马帝   /  2012-2-7 20:52  /  1997 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄凯 于 2012-2-8 13:53 编辑

题目是这样的:
定义好了一个类A,有成员属性为a,b,c。使用定义好的A类创建5个对象, 属性可为任意值. 编程对这5个对象按c排序, 并将结果输出。
我当时使用了三个数组arrA[], arrB[] ,arrC[]来分别存储这五个对象的属性,然后用两个for循环嵌套来对arrC[]进行排序,而arrA[]和arrC[]也做出相应的改变。
虽然也同然得出了正确的结果,但是我想在Java里他提供了个工具类Arrays,里面提供了对数组进行一些操作的方法,不过对象都是一维数组。
我要的是在Java里有没有提供这样一个类,里面提供了一些对多维组进行操作的方法。如果有,请告诉我类名;如果没有,请给诉我遇到这种类型的题目
用哪种方式做出的代码比我做的更简洁,能给个范例更好,没有给想法也行。感谢各位了~!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

5 个回复

倒序浏览
用TreeSet集合吧,同时给他传递一个比较器,public TreeSet(Comparator<? super E> c)就会把传递进去的对象按照比较器进行排序。或者楼主的A类实现Comparator接口,按照c的自然升序排序,这样把A类对象加入treeset中也能实现有序存储,这就达到了排序的目的哦

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
我用的是定义一个对象数组A[] args,调用A的中c的get和set方法,将c用for循环嵌套,做出排序,再输出结果,具体我是这样做的:
package cn.ithema.basetest;
public class Student {
                private String name;
                private int age;
                private int score;       
                public String getName() {
                        return name;
                }
                public void setName(String name) {
                        this.name = name;
                }
                public int getAge() {
                        return age;
                }
                public void setAge(int age) {
                        this.age = age;
                }
                public int getScore() {
                        return score;
                }
                public void setScore(int score) {
                        this.score = score;
                }
                public Student(){}
                public Student(String name, int age, int score) {
                        this.name = name;
                        this.age = age;
                        this.score = score;
                }
}

package cn.ithema.basetest;
import cn.ithema.basetest.Student;
public class Score {
        public static void main(String[] args) {       
                Student[] students = new Student[5];
                students[0] = new Student("学生1",20,80);
                students[1] = new Student("学生2",24,70);
                students[2] = new Student("学生3",22,90);
                students[3] = new Student("学生4",17,50);
                students[4] = new Student("学生5",22,100);
                Student stu =new Student();
                for(int i=0;i<=students.length-1;i++){
                        for(int j=0;j<students.length-1-i;j++){
                                if(students[j].getScore()<students[j+1].getScore()){
                                        stu = students[j+1];
                                        students[j+1]=students[j];
                                        students[j]=stu;
                                }       
                        }
                }
                for(int i=0;i<5;i++){
                System.out.println("第"+(i+1)+"名是:"+students[i].getName()+"!他的分数是:"+students[i].getScore()+",他今年"+students[i].getAge()+"岁。");
                }
        }
}

你应该可以看得懂。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
用TreeSet可以装入Person类对象,并设定的compareTo方法 控制输出顺序

import java.util.*;
class StudentTest
{
        public static void main(String[] args)
        {
                TreeSet ts=new TreeSet();
                ts.add(new Student("stu03",23,98));
                ts.add(new Student("stu02",20,94));
                ts.add(new Student("stu01",28,100));
                ts.add(new Student("stu06",27,87));
                ts.add(new Student("stu07",23,92));
               
                print(ts);
        }
                public static void print(TreeSet ts)//遍历打印
        {
                for (Iterator it=ts.iterator();it.hasNext() ; )
                {
                        Object obj=it.next();
                        Student stu=(Student)obj;
                        System.out.println(stu.getName()+"::"+stu.getAge()+"::"+stu.getScore());
                }
        }
}
class Student implements Comparable//类Student 私有name,age,score成员变量,实现set,get方法
{
        private String name;
        private int age;
        private int score;
        public Student(String name,int age,int score)//初始化
        {
                this.name=name;
                this.age=age;
                this.score=score;
        }
        public String getName()//获取名字
        {
                return(name);
        }
        public int getAge()//获取年龄
        {
                return(age);
        }
        public int getScore()//获取分数
        {
                return(score);
        }
        public void setName(String name)//重新设定名字
        {
                this.name=name;
        }
        public void setAge(int age)//重新设定年龄
        {
                this.age=age;
        }
        public void setScore(int score)//重新设定分数
        {
                this.score=score;
        }
        public int compareTo(Object obj)
        {
                Student stu=(Student)obj;
                int num1=stu.score-this.score;
                int num2=this.name.compareTo(stu.name);
                int num3=this.age-stu.age;
                if(num1==0)
                {
                        if (num2==0)
                        {
                                return num3;
                        }
                        return num2;
                }
                return num1;
        }
}

评分

参与人数 1技术分 +2 收起 理由
admin + 2 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 黄凯 于 2012-2-8 00:04 编辑

楼上的,你发的代码我自己试验了下,结果也是正确的。非学感谢大家提供的帮助~
回复 使用道具 举报
package com.calculator;
/**
* 学生类
* @author 黑马_王康
*/
public class Student implements Comparable{//实现Comparable接口

        private String name; //学生姓名

        private int age; //学生年龄
       
        private int score; //学生成绩
       
       
        @Override
        public int compareTo(Object obj) {//覆盖compareTo方法
                if(!(obj instanceof Student))
                        throw new RuntimeException("不是学生对象");
                Student s = (Student)obj;
                if(this.score > s.score)
                        return 1;
                if(this.score == s.score){
                        return this.name.compareTo(s.name);//若分数相同,则比较姓名.
                }
                return -1;
        }
       

        public Student(String name, int age, int score){ //构造函数初始化变量
                this.name = name;
                this.age = age;
                this.score = score;
        }
       
        public String getName(){ //姓名get方法
                return name;
        }
        public void setName(String name){ //姓名上set方法
                this.name = name;
        }

        public int getAge(){ //年龄get方法
                return age;
        }
        public void setAge(int age){ //年龄set方法
                this.age = age;
        }
       
        public int getScore(){ //成绩get方法
                return score;
        }
        public void setScore(int score){ //成绩set方法
                this.score = score;
        }
       
        //为了输入方便,重写了toString()
        public String toString(){
            return name +" "+age+" "+score;
        }
}
//编写测试类
package com.calculator;
import java.util.Iterator;
import java.util.TreeSet;

/**
* 测试类
* @author 黑马_王康
*/
public class TestStudent {

        /**
         * @param args
         */
        public static void main(String[] args) {
                TreeSet<Student> ts = new TreeSet<Student>();
                ts.add(new Student("zhangsan", 21, 80));
                ts.add(new Student("lisi", 22, 88));
                ts.add(new Student("wangwu", 25, 90));
                ts.add(new Student("zhaolius", 24, 83));
                ts.add(new Student("zhaoliu", 24, 83));
               
                Iterator<Student> it = ts.iterator();
                while(it.hasNext()){
                        Student stu = it.next();
                        System.out.println(stu.getName()+": "+stu.getAge()+" : "+stu.getScore());
                }
               
        }
}
//输出结果:
zhangsan: 21 : 80
zhaoliu: 24 : 83
zhaolius: 24 : 83
lisi: 22 : 88
wangwu: 25 : 90

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马