算法理论参考:
实现:
import java.util.List;
public class User { private String name;
//用户名 private double integral; //积分 private double rank;
//排名 public User(String name,double integral,int rank){ this.name = name; this.integral = integral; this.rank = rank; } public User(){ } /** * 得到用户积分排名 * @return */ public int getUserRanking(){ int result = 0; return result; } public String getName() { return name; } public String getNameString() { return getName(); } public Double getIntegral(){ return integral; } public double getIntegralString() { return getIntegral(); } public void getNewIntegral(double a){ this.integral = a; } public double getRank(){ return rank; } public double getRankString() { return getRank(); } public void getNewRank(double a){ this.rank = a; } /** * 得到用户名 积分 排名次 * @return */ public String getUserString() { return getRankString()+": "+getNameString()+" "+ " "+getIntegralString(); } /** * 打印用户信息 * @return */ public static String getOutputUser(List User) { String result=""; for (int i = 0; i < User.size(); i++) { User item=(User)User.get(i); result+=item.getUserString()+"\r\n"; } return result; } }
import java.util.ArrayList;import java.util.Comparator; import java.util.List; import java.util.ArrayList; import java.util.Collections;
public class UserItem {
public static void main(String[] args) { // TODO Auto-generated method stub test1(); }
public static void test1() { User p=new User("WangLei",0.55,1); User p2=new User("YangJiang",0.54,2); User p3=new User("XuePeng",0.53,3); User p4=new User("ZhuKai",0.52,4); User p5=new User("ZhenShan",0.51,5); List list=new ArrayList(); list.add(p); list.add(p2); list.add(p3); list.add(p4); list.add(p5); System.out.println(User.getOutputUser(list)); match aa = new match(); aa.setUser(p,p2); aa.setExpect(); aa.setScore(); p.getNewIntegral(aa.setIntegral_a()); p2.getNewIntegral(aa.setIntegral_b()); aa.setUser(p3,p4); aa.setExpect(); aa.setScore(); p3.getNewIntegral(aa.setIntegral_a()); p4.getNewIntegral(aa.setIntegral_b()); aa.setUser(p3,p5); aa.setExpect(); aa.setScore(); p3.getNewIntegral(aa.setIntegral_a()); p5.getNewIntegral(aa.setIntegral_b()); aa.setUser(p2,p4); aa.setExpect(); aa.setScore(); p2.getNewIntegral(aa.setIntegral_a()); p4.getNewIntegral(aa.setIntegral_b()); System.out.println(User.getOutputUser(list)); comparatorUser comparator=new comparatorUser(); Collections.sort(list, comparator);
for (int i=0;i<list.size();i++){
User user_temp=(User)list.get(i);
user_temp.getNewRank(list.size()-i); } System.out.println(User.getOutputUser(list)); }
}
import java.lang.Math;
public class match { private User user_a; private User user_b; private double expect_a = 0; private double expect_b = 0; private double score_a = 0; private double score_b = 0; private double score = 0; /** * 得到比赛结果 * @return */ public double getScore() { if(score == 0) { score = 1; } else { score = 0; } return score; } //public static long pow(double x,double y) /** * 得到成功期望 * @return */ public double getExpect_a() { double result = 0; //1/(1+10^((Ib-Ia)/400)) result = 1/(1 + Math.pow(10, (user_b.getIntegral()-user_a.getIntegral())/400)); return result; } public double getExpect_b() { double result = 0; //1/(1+10^((Ia-Ib)/400)) result = 1/(1 + Math.pow(10, (user_a.getIntegral()-user_b.getIntegral())/400)); return result; } /** * 得到比赛后积分 * @return */ public double setIntegral_a() { //user_a.getIntegral() = user_a.getIntegral() + score_a - expect_a return user_a.getIntegral() + score_a - expect_a; } public double setIntegral_b() { return user_b.getIntegral() + score_b - expect_b; } public void setUser(User a,User b) { this.user_a = a; this.user_b = b; }
public void setExpect() { this.expect_a = getExpect_a(); this.expect_b = getExpect_b(); } public void setScore() { this.score_a = getScore(); this.score_b = getScore(); }
}
import java.util.Comparator; import java.util.List; import java.util.ArrayList; import java.util.Collections;
public class comparatorUser implements Comparator{
public int compare(Object arg0, Object arg1) { User user0=(User)arg0; User user1=(User)arg1; int flag =0; flag = user0.getIntegral().compareTo(user1.getIntegral()); return flag; } }
学习心得:
1 import java.util.List;
import java.util.ArrayList;
熟悉List与ArrayList类的部分用法,如插入等操作;
扩展:
2 import java.lang.Math;
熟悉Math类下指数运算;
扩展:
3 import java.util.Comparator;
import java.util.Collections;
熟悉Comparator与Collections类,结合ArrayList类,实现数组的排序;
扩展:
4 解决问题:
java 提示cannot invoke compareTo(double) on the primitive type double
原因:
错误代码缘由:flag = user0.getIntegral().compareTo(user1.getIntegral()); 解决办法: 把对象的getIntegral方法设为Double 而不是double;
public Double getIntegral(){ return integral; }
5 MyEclipse
?wd=myeclipse字体大小设置&tn=11000002_ie_dg (责任编辑:)
|