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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马超 中级黑马   /  2012-4-30 08:01  /  2033 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 依然小马哥 于 2012-4-30 09:45 编辑

package 基础测试;
import java.util.*;

题目要求:定义的学生类创建5个对象, 属性可为任意值. 编程对这5个对象按成绩排序, 并将结果输出。
class student
{
String name;
int age;
int result;
student(String name,int age,int result)
{
  this.name = name;
  this.age = age;
  this.result = result;
  System.out.println("姓名为:"+name+",年龄为:"+age+",成绩为:"+result);
}
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 getResult()
{
  return result;
}
public void setResult(int result)
{
  this.result = result;
}

}
public class test
{
public static void main(String[] args)
{
  student[] ss = new student[10];
  ss[1] = new student("张三",21,34);
  ss[2] = new student("李四",24,65);
  ss[3] = new student("王五",22,99);
  ss[4] = new student("赵六",19,87);
  ss[5] = new student("钱七",20,45);
sorted(ss);  //该步我要调取下边的排序方法,可是老出错,括号中的参数是不是写错了啊?
}
public static void sorted(student[] stu)  //排序方法
{
  int temp;
  for(int x = 0;x<stu.length-1;x++)
  {
   for(int y = 0;y<stu.length-x-2;y++)
   {
    if(stu[y].result<stu[y+1].result)
    {
     temp = stu[y].result;
     stu[y].result = stu[y+1].result;
     stu[y+1].result = temp;
    }
   }
  }
  
  for(int i = 0;i<stu.length;i++)
  {
   System.out.println("姓名为:"+stu.name+",年龄为:"+stu.age+",成绩为:"+stu.result);
  }
}
}

4 个回复

倒序浏览
本帖最后由 刘基军 于 2012-4-30 08:40 编辑

1.
student[] ss = new student[10];   //你的student数组ss[0],ss[6],ss[7],ss[8],ss[9]都是null,而你下边有使用到它们了,会报空指针异常
  ss[1] = new student("张三",21,34);
  ss[2] = new student("李四",24,65);
  ss[3] = new student("王五",22,99);
  ss[4] = new student("赵六",19,87);
  ss[5] = new student("钱七",20,45);
2.
for(int x = 0;x<stu.length-1;x++)
  {
   for(int y = 0;y<stu.length-x-1;y++)  //冒泡排序法:这边的y应该是: y<stu.length-x-1
   {
    if(stu[y].result<stu[y+1].result)
    {
     temp = stu[y].result;
     stu[y].result = stu[y+1].result;
     stu[y+1].result = temp;
    }
   }
  }
3.
System.out.println("姓名为:"+stu.name+",年龄为:"+stu.age+",成绩为:"+stu.result); //你写成了直接用数组名,会报错

4.你这样做,并不是排序效果,而是实现了篡改学生成绩的目的,呵呵,题目的本意应该是让你使用集合来实现排序的...
  1. class test
  2. {
  3. public static void main(String[] args)
  4. {
  5. student[] ss = new student[5];
  6. ss[0] = new student("张三",21,34);
  7. ss[1] = new student("李四",24,65);
  8. ss[2] = new student("王五",22,99);
  9. ss[3] = new student("赵六",19,87);
  10. ss[4] = new student("钱七",20,45);
  11. sorted(ss);
  12. }
  13. public static void sorted(student[] stu) //排序方法
  14. {
  15. int temp;
  16. for(int x = 0;x<stu.length-1;x++)
  17. {
  18. for(int y = 0;y<stu.length-x-1;y++)
  19. {
  20. if(stu[y].result<stu[y+1].result)
  21. {
  22. temp = stu[y].result;
  23. stu[y].result = stu[y+1].result;
  24. stu[y+1].result = temp;
  25. }
  26. }
  27. }

  28. for(int i = 0;i<stu.length;i++)
  29. {
  30. System.out.println("姓名为:"+stu[i].name+",年龄为:"+stu[i].age+",成绩为:"+stu[i].result);
  31. }
  32. }
  33. }
复制代码
回复 使用道具 举报
刘基军 发表于 2012-4-30 08:39
1.
student[] ss = new student[10];   //你的student数组ss[0],ss[6],ss[7],ss[8],ss[9]都是null,而你下边 ...

我说了,我的角标明明就是5个,怎么就错了,后来才发现,原来没有从0角标开始赋地址值。。粗心啊
回复 使用道具 举报
其实根本没必要自己写排序的算法的,冒泡法太浪费时间了,选择法都还好一点
这个是我做那道题的时候的代码
  import com.test.Test5;
public class Test6 {
        static Test5[] test={
                new Test5("一号",10,60),
                new Test5("二号",20,70),
                new Test5("三号",30,65),
                new Test5("四号",40,90),
                new Test5("五号",50,80),};
         static MyComparator m=new MyComparator();
        public static void main(String[] args){
                List<Test5> list=new ArrayList<Test5>();
                for(int i=0;i<test.length;i++){
                list.add(test[i]);
                }
               
                long l1 = System.currentTimeMillis();
                Collections.sort(list, m);
                 
                for(Iterator it = list.iterator(); it.hasNext();){
                        Test5 t = (Test5) it.next();
                        System.out.println(t.getname()+" "+t.getage()+" "+t.getachievement());
                        }
       
        }

}
class MyComparator implements Comparator{
        public int compare(Object o1, Object o2){
        Test5 t1 = (Test5)o1;
        Test5 t2 = (Test5)o2;
        if(t1.getachievement() < t2.getachievement()){
        return -1;
        }else if(t1.getachievement() == t2.getachievement()){
        return 0;
        }else{
        return 1;
        }
        }
}
我觉得这样应该快很多
回复 使用道具 举报
蒋映辉 发表于 2012-4-30 14:40
其实根本没必要自己写排序的算法的,冒泡法太浪费时间了,选择法都还好一点
这个是我做那道题的时候的代码
...

嗯,运行效率比我的快了,可是其中有好多代码都看不懂。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马