j2me 积分榜的实现

//Top类实现积分榜,创建该类对象后,调用相应方法操作积分榜
import java.io.*;
import javax.microedition.rms.*;


public class Top {  //与积分榜有关的类
	private int leastscore=0;  //最少要多少次才能上积分榜
	private String fname;
	private int mes;
	private RecordStore rs;
	//判断是否是新纪录
	public boolean isNewRecord(int score){
		if(score<=leastscore)return false;
		else{
            int i=0,getscore=0;
	    	try {
	            rs=RecordStore.openRecordStore(fname, true);
	            myFilter mf=new myFilter(leastscore);
	            MyComparator mc=new MyComparator();
	            RecordEnumeration en=rs.enumerateRecords(mf,mc,true);
	            while(en.hasNextElement()&&(i<mes)){  //是否有下一条
	                byte dat[]=en.nextRecord();//得到下一条
	                for(int j=4;j>0;j--){
	              	    getscore<<=8;  //一个字节
	              	    getscore|=dat[dat.length-j];
	                }
	                i++;
	            }
	        } catch (Exception e) {
	            System.out.println("读取过程出现异常");
	            e.printStackTrace();
	        }
	        finally{
	            try {
	                rs.closeRecordStore();
	            }
	            catch (RecordStoreException ex) {
	            	return false;
	            }
	        }
//	    	System.out.println("------------------------"+"i:"+i+" score:"+score+" getscore:"+getscore);
	    	if(i<mes)return true;
	    	else if(score>getscore) return true;
	    	else return false;
	    }
	}
	//设置新纪录
	public void set(String name,int score){
		try {
            rs=RecordStore.openRecordStore(fname, true);
            ByteArrayOutputStream bo=new ByteArrayOutputStream();
            DataOutputStream dao = new DataOutputStream(bo);
            dao.writeUTF(0==name.length()?"----":name);  //如果未输入名字,用四条杠代替
            dao.writeInt(score);
            byte[] data=bo.toByteArray();
            rs.addRecord(data, 0, data.length);
            dao.close();
            bo.close();
        } catch (Exception e) {
            System.out.println("存储过程出现异常");
            e.printStackTrace();
        }
        finally{
            try {
                rs.closeRecordStore();
            }
            catch (RecordStoreException ex) {
            }
	    }
	}
	//输出积分榜
    public String getTop(){
    	StringBuffer strb=new StringBuffer();
    	try {
    		RecordEnumeration en;
    		rs=RecordStore.openRecordStore(fname, true);
    		en=rs.enumerateRecords(new myFilter(leastscore),new MyComparator(),true);
            strb.append("名字                         分数\n");
            int i=0;
            while(en.hasNextElement()&&(i<mes)){  //是否有下一条
                byte dat[]=en.nextRecord();//得到下一条
                ByteArrayInputStream bis=new ByteArrayInputStream(dat);
                DataInputStream dis=new DataInputStream(bis);
                strb.append(dis.readUTF()) //读取昵称
                    .append("                         ")
                    .append(dis.readInt()) //读取分数
                    .append("\n");
                dis.close();
                bis.close();
                i++;
            }
        } catch (Exception e) {
            System.out.println("读取过程出现异常");
            e.printStackTrace();
        }
    	finally{
			try{
				rs.closeRecordStore();
			}
			catch (RecordStoreException ex) {}     
		}
    	return strb.toString();
    }
//重置积分榜
    public void deleteAll(){
        try {                                          
			RecordStore.deleteRecordStore(fname);      
		} catch (RecordStoreNotFoundException e) {            
			e.printStackTrace();                       
		} catch (RecordStoreException e) {                   
			e.printStackTrace();                       
		}                                              
    }
//构造函数,三个参数分别是RecordStore的名字,积分榜显示的条数,至少上积分榜的分数
    public Top(String fname,int mes,int leastscore){
    	this.fname=fname;
    	this.mes=mes;
    	this.leastscore=leastscore;
    }


}
//自定义过滤器
class myFilter implements RecordFilter{
      private int leastscore=0,score=0;
      public boolean matches(byte[] dat) {
      for(int i=4;i>0;i--){
    	  score<<=8;  //一个字节
    	  score|=dat[dat.length-i];
      }
      if(score>leastscore)return true;
      else return false;
      }
      public myFilter(int leastscore){
    	  this.leastscore=leastscore;
      }
}
class MyComparator implements RecordComparator{
    public int compare(byte[] rec1,byte[] rec2){
    	int score1=0,score2=0;
        for(int i=4;i>0;i--){ //4是int型所占字节数
        	score1<<=8;  //一个字节
        	score2<<=8;
        	score1|=rec1[rec1.length-i];
        	score2|=rec2[rec2.length-i];
        }
        if(score1==score2){
            return RecordComparator.EQUIVALENT;
        }//if
        if(score1>score2){
            return RecordComparator.PRECEDES;
        } else{
            return RecordComparator.FOLLOWS;
        }//else
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值