java 对象数组排序的问题,急急急急
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 对象数组排序的问题,急急急急相关的知识,希望对你有一定的参考价值。
以下是我编写的程序,写了一个Score类,里面包含学生的相关信息,在主程序中用ArrayList进行排序,是按照学生成绩排序的,怎么排序打印学生完整信息哦,方法我在Score类里面写了,在用Collections。binarySearch查找哦。对ArrayList、Collections 的使用不熟练,望牛人在我的程序上小小的改动,错误基本上也没有什么。
package method2;
import java.util.ArrayList;
import java.util.Collections;
public class Test
public static void main(String args[])
ArrayList list= new ArrayList();
list.add(new Score(1, "Liming",472));
list.add(new Score(2, "Fangfang",445));
list.add(new Score(3, "Lily",323));
list.add(new Score(4, "Green",540));
list.add(new Score(5, "Mike",332));
Collections.sort(list,new StuScoreComparator());
for(int i=0;i<list.size();i++)
System.out.println(list.get(i).toString());
Collections.binarySearch(list, new Score(1, "Liming",472));
class StuScoreComparator extends Score implements java.util.Comparator
public int compare(Object o1,Object o2)
Score score1=(Score) o1;
Score score2=(Score) o2;
return score1.getStuScore()-score2.getStuScore();
package method2;
/**
*
* @author Liuzhichao
*/
public class Score
private int stuNumber;
private String stuName;
private int stuScore;
Score()
public Score(int stuNumber,String stuName,int stuScore)
if (stuNumber > 0)
this.stuNumber = stuNumber;
else
System.out.println("输入的学生学号不正确");
System.exit(1);
if (stuScore > 0)
this.stuScore = stuScore;
else
System.out.println("输入的学生学号不正确");
System.exit(1);
this.stuName=stuName;
//设置学生信息
public void setStuNumber(int stuNumber)
this.stuNumber=stuNumber;
//设置学生学号
public void setStuScore(int stuScore)
this.stuScore=stuScore;
//设置学生分数
public void setStuName(String stuName)
this.stuName=stuName;
//设置学生名字
public int getStuNumber()
return this.stuNumber ;
//设置学生学号
public int getStuScore()
return this.stuScore ;
//设置学生分数
public String getStuName()
return this.stuName;
//获取学生名字
public String getStuInfomation()
return "名字:"+this.stuName+" 学号:"+this.stuNumber+" 成绩:"+this.stuScore;
//获取学生信息
大家说的都没有错 但是怎么打印输出哦,这几个不太熟悉的类把我搞晕了,把所有学生的信息打印出来,再实现查询学生的信息的功能
o(∩_∩)o...,老师要求用对象数组的。所以才这样写
就在我的主程序test里面改吧
public class Score implements java.lang.Comparable
在方法getStuInfomation() 后追加两个方法(compareTo为Comparable接口要求实现此方法,toString为重写基类的打印输出方法):
public int compareTo(Object otherScore)
return this.stuScore - ((Score) otherScore).stuScore;
public String toString()
return "[学号:" + stuNumber + "分数:" + stuScore + "姓名:" + stuName + "]";
重新编译Score.java,再运行Test,输出结果为:
----------
[学号:3分数:323姓名:Lily]
[学号:5分数:332姓名:Mike]
[学号:2分数:445姓名:Fangfang]
[学号:1分数:472姓名:Liming]
[学号:4分数:540姓名:Green]
-->2008/04/05
哎......
package method2;
import java.util.ArrayList;
import java.util.Collections;
public class Test
public static void main(String args[])
ArrayList list = new ArrayList();
list.add(new Score(1, "Liming", 472));
list.add(new Score(2, "Fangfang", 445));
list.add(new Score(3, "Lily", 323));
list.add(new Score(4, "Green", 540));
list.add(new Score(5, "Mike", 332));
Collections.sort(list, new StuScoreComparator());
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i).toString());
Collections.binarySearch(list, new Score(1, "Liming", 472));
class StuScoreComparator extends Score implements java.util.Comparator
public int compare(Object o1, Object o2)
Score score1 = (Score) o1;
Score score2 = (Score) o2;
return score1.getStuScore() - score2.getStuScore();
package method2;
/**
*
* @author Liuzhichao
*/
public class Score implements java.lang.Comparable
private int stuNumber;
private String stuName;
private int stuScore;
Score()
public Score(int stuNumber, String stuName, int stuScore)
if (stuNumber > 0)
this.stuNumber = stuNumber;
else
System.out.println("输入的学生学号不正确");
System.exit(1);
if (stuScore > 0)
this.stuScore = stuScore;
else
System.out.println("输入的学生学号不正确");
System.exit(1);
this.stuName = stuName;
//设置学生信息
public void setStuNumber(int stuNumber)
this.stuNumber = stuNumber;
//设置学生学号
public void setStuScore(int stuScore)
this.stuScore = stuScore;
//设置学生分数
public void setStuName(String stuName)
this.stuName = stuName;
//设置学生名字
public int getStuNumber()
return this.stuNumber;
//设置学生学号
public int getStuScore()
return this.stuScore;
//设置学生分数
public String getStuName()
return this.stuName;
//获取学生名字
public String getStuInfomation()
return "名字:" + this.stuName + " 学号:" + this.stuNumber + " 成绩:" + this.stuScore;
//获取学生信息
public int compareTo(Object otherScore)
return this.stuScore - ((Score) otherScore).stuScore;
public String toString()
return "[学号:" + stuNumber + "分数:" + stuScore + "姓名:" + stuName + "]";
参考技术A 你对java 思想理解得不错 基本的操作可以吧
不过你把每个学生信息都封装成一个对象,数据量如果大的话就有性能这么一说了。 参考技术B 如果你只想排序,那么你的做法很正确。但是如果你想使用Collections.binarySearch()方法进行搜索的话,那么list中的对象就需要实现Comparable接口。
下面是我修改后的程序,仅供参考:
--------------------------------------------
import java.util.ArrayList;
import java.util.Collections;
public class Test
public static void main(String args[])
ArrayList<Score> list = new ArrayList<Score>();
list.add(new Score(1, "Liming", 472));
list.add(new Score(2, "Fangfang", 445));
list.add(new Score(3, "Lily", 323));
list.add(new Score(4, "Green", 540));
list.add(new Score(5, "Mike", 332));
Collections.sort(list);
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i).toString());
int n = Collections.binarySearch(list, new Score(1, "Liming", 472));
System.out.println("You found: " + list.get(n));
/**
*
* @author Liuzhichao
*/
class Score implements Comparable<Score>
private int stuNumber;
private String stuName;
private int stuScore;
Score()
public Score(int stuNumber, String stuName, int stuScore)
if (stuNumber > 0)
this.stuNumber = stuNumber;
else
System.out.println("输入的学生学号不正确");
System.exit(1);
if (stuScore > 0)
this.stuScore = stuScore;
else
System.out.println("输入的学生学号不正确");
System.exit(1);
this.stuName = stuName;
// 设置学生信息
public void setStuNumber(int stuNumber)
this.stuNumber = stuNumber;
// 设置学生学号
public void setStuScore(int stuScore)
this.stuScore = stuScore;
// 设置学生分数
public void setStuName(String stuName)
this.stuName = stuName;
// 设置学生名字
public int getStuNumber()
return this.stuNumber;
// 设置学生学号
public int getStuScore()
return this.stuScore;
// 设置学生分数
public String getStuName()
return this.stuName;
// 获取学生名字
// 获取学生信息
public String toString()
return "名字:" + this.stuName + " 学号:" + this.stuNumber + " 成绩:"
+ this.stuScore;
public int compareTo(Score otherScore)
return this.stuScore - otherScore.stuScore ;
参考技术C 我看到就晕晕了。。我还是初学者。。
Java算法bug求大神解答。。明天交作业 急急急急急急
我的一个求数字逆反的程序(就是把数字反着写,比如输入210 输出 12;输入1234 输出4321)我的算法好像没有问题,但是输入某些数值会出现int格式数值的最大值,不知道为什么。。明天我就要交作业了,求大神解答!!!图片是我的源代码和在cmd中运行的结果,有的输入值会出现bug的情况,有的输入值就不会,是怎么回事?
用字符串接收输入,用StringBuffer的reverse函数翻转字符串,如果确定都是整数就在做一次字符串转int ,如果严谨一点就直接从循环输出,从第一个不为0 的字符开始输出
public static void main(String[] args)
String in =new StringBuffer(args[0]).reverse().toString();
//这里如果确定都是整数就做下面的操作
int out= Integer.parseInt(in);
//如果不确定就不做上面这一步直接下面的操作
char[] outchar =in.toCharArray();
int i=0;
for(int len=outchar.length;i<len;++i)
if(outchar[i]!='0')
break;
System.out.println(in.substring(i,in.length()));
参考技术A 如果我输入12345678,貌似你的代码就不能用了。为什么不用字符数组呢?先判断下输入的是不是合法的数字字符串,然后将字符从尾道头从新组成字符串,将新的字符串转化为数字输出。追问
我的代码是哪里出错了?
是不是循环有问题?
以上是关于java 对象数组排序的问题,急急急急的主要内容,如果未能解决你的问题,请参考以下文章