java学习之电影《社交网络》Facemash算法实现

算法理论参考:http://www.biaodianfu.com/fackbook-facemash-algorithm.html

实现:

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类的部分用法,如插入等操作;

扩展:http://blog.sina.com.cn/s/blog_68f262210100mape.html

      http://jingyan.baidu.com/article/851fbc37d844553e1f15abe1.html

2 import java.lang.Math;

熟悉Math类下指数运算;

扩展:http://wxb-j2ee.iteye.com/blog/1010258

      http://blog.csdn.net/lixiang0522/article/details/7557851

      http://www.cnblogs.com/ksuifeng/archive/2010/03/24/1693856.html

3 import java.util.Comparator;

 import java.util.Collections;

熟悉Comparator与Collections类,结合ArrayList类,实现数组的排序;

扩展:http://www.blogjava.net/zygcs/archive/2008/01/17/176032.html

      http://www.cnblogs.com/fzzl/archive/2010/08/14/1799408.html

      http://blog.csdn.net/toweryangtao/article/details/7518325

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

http://www.baidu.com/s?wd=myeclipse字体大小设置&tn=11000002_ie_dg

时间: 2024-10-07 15:33:48

java学习之电影《社交网络》Facemash算法实现的相关文章

非专业码农 JAVA学习笔记 6java工具类和算法-string

续<非专业码农 JAVA学习笔记 5 java工具类和算法> 五.字符串string 字符串和字符的差别:字符串双引号括起来”n”,字符用单引号括起来,表示一种符号’\n’ 1.string的主要方法和属性 类 方法或者属性 备注 定义string Stirng s=new string(“值”),string s=”值” 属性 string.length:string的长度为字节 方法startswith,endswith s.startwith(“值”)-以值为开头,s.endswith(

(转)《深入理解java虚拟机》学习笔记3——垃圾回收算法

Java虚拟机的内存区域中,程序计数器.虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭:栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性.垃圾回收重点关注的是堆和方法区部分的内存. 常用的垃圾回收算法有: (1).引用计数算法: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器都为0的对象就是不再被使用的,垃

Java 学习路线建议

在大家看之前,我要先声明两点.1.由于我本人是Java后端开发出身,因此所推荐的学习内容是Java Web和Java后端开发的路线,非Java Web和Java后端开发的同学请适当参考其学习思想即可,切勿照搬.2.下面对于[第一部分]的推荐内容,目的是让你尽快成为一个可以参加工作的Java开发者,更适用于处于待业状态,准备转行Java的同学. 如果你是在校学生,务必要在学好基础(比如计算机系统.算法.编译原理等等)的前提下,再考虑去进行下面的学习.第一部分:对于尚未做过Java工作的同学,包括一

Java 学习文章汇总

目前JAVA可以说是产业界和学术界最热门的语言,许多人都很急切想把JAVA学好. 但学习是需要步骤的,除非像电影中演的那样,能够把需要的专业技巧下载到脑海:主角只花了几秒下载资料,就马上具备飞行员的技巧,或是武侠小说中的运功传送内力的方式,否则花上一段时间苦学是少不了的.花时间,不打紧,就怕方法错误,事倍功半. java 学习文章推荐.java学习线路.java 知识图谱. HTML5 微数据 RDFa/微格式 使用 jQuery 的 Autocomplete 插件实现input输入提示功能 创

程序员大佬推荐的java学习路线

作为我的第一篇博客,我第一个想到的就是在校时就看到的这篇文章.并且在之后的时间里自己都反复观看过,有时候这不单单是一篇学习路线,也是审视自己技术能力的里程碑,和激励自己的鞭挞绳. //以下为转载原文 开始 java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍.这一部分的内容,同样适用于一些希望转行到Java的同学.

java学习历程,一年三年五年计划

学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍.这一部分的内容,同样适用于一些希望转行到Java的同学. 在大家看之前,我要先声明两点.1.由于我本人是Java后端开发出身,因此所推荐的学习内容是Java Web和Java后端开发的路线,非Java Web和Java后端开发的同学请适当参考其学习思想即可,切勿照搬.2.下

2015最新最全Java学习资料下载

Java学习资料下载大全 : java的开发建议使用jbuilder.eclipse或是netbeans  eclipse在这里免费下载:http://www.eclipse.org/downloads/ netbeans在这里免费下载:http://dlc.sun.com.edgesuite.net/netbeans/6.0/final/ 教程的话,你可以看看这个: 网盘下载地址:http://pan.baidu.com/s/1hqLl3Vm 密码直通车:521595826(扣扣qun) 精通

Java学习笔记_25_Collections类

25.Collections类: Collections类是一个工具类,用来对集合进行操作,它主要是提供一些排序算法,包括随机排序.反相排序等. Collections类提供了一些静态方法,实现了基于List容器的一些常用算法. Collections的一些方法列表: · void sort(List): 对List内的元素进行排序. · void shuffle(List): 对List内的元素随机排序. · void reverse(List): 对List内的元素进行逆序排列. · voi

&lt;Java&gt;&lt;学习路线图&gt;

Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了. 但有一些一般的步骤: 1.熟悉一种文本编辑器,比如Vim, Emacs, Notepad++, TextMate等.知道哪些是开源的,哪些是闭源的,哪些要收费.养成不用盗版软件的习惯.2. 安装JDK(建议用你的Linux发行版自带的软件包管理器安装openjdk,过程中可能需要读发行版特定的文档)3. 写一个Java的Hello world程序,并用命令行工具javac编译,再用java命令运行这个程序.过程中熟悉源