⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 history.java

📁 利用开源的源码为一个朋友的V3手机手机写的科学计算器
💻 JAVA
字号:
package xcalc;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Enumeration;
import java.util.Vector;

import javax.microedition.rms.RecordStore;

public final class History {
	private static final String XCALC_HISTORY = "XCALCHistory";	
	private final Vector formulars;
	private final Vector results;
	private RecordStore store;
	private final ByteArrayOutputStream byteOutStream ;
	private final DataOutputStream dataOutStream;
	
	public History(){
		
			formulars = new Vector();
			results = new Vector();
			
			byteOutStream = new ByteArrayOutputStream();
			dataOutStream = new DataOutputStream(byteOutStream);
		try {
			store = RecordStore.openRecordStore(XCALC_HISTORY,true);
		} catch(Exception e) {	
		}
	}
	
	public void add(final Vector formular,final Real result){
		formulars.insertElementAt(formular,0);	
		results.insertElementAt(result,0);	
		if(formulars.size() > 8) {
			formulars.removeElementAt(8);
			results.removeElementAt(8);
		}
		saveHistory();
	}
	
	public int size(){
		return formulars.size();
	}
	
	public String getFormular(final int index){
		StringBuffer result = new StringBuffer();
		for (Enumeration e =  ((Vector)formulars.elementAt(index)).elements() ; e.hasMoreElements();) {
			result.append(e.nextElement());
		}
		return result.toString();
	}
	
	public String getResult(final int index){
		return ((Real)results.elementAt(index)).toString();
	}
	
	public Real ANS(){
		if(results.size()>0){
			return(Real)results.elementAt(0);
		} else {
			return Real.ZERO;
		}	
	}
	
	public void loadHistory(){
		try {  
		    final int numrecords = store.getNumRecords();		    
		    if (numrecords == 0) return;			   		    	       
		    for(int i=0;i<numrecords;++i){
		    	final int size = store.getRecordSize(i+1);
		    	final byte[] buff = new byte[size];
		    	
		    	store.getRecord(i+1, buff, 0);
		    	final ByteArrayInputStream  byteInputStream = new ByteArrayInputStream(buff);
				final DataInputStream dataInputStream = new DataInputStream(byteInputStream);

				Real res = new Real();
				res.sign = dataInputStream.readByte();
				res.exponent = dataInputStream.readInt();
				res.mantissa = dataInputStream.readLong();
				results.addElement(res);
								
				final Vector formular = new Vector();
				while(dataInputStream.available()>=4){
		    		final int tokentype = dataInputStream.readInt();
		    		formular.addElement(Solver.C_COMMANDS[tokentype]);
		    	}
				formulars.addElement(formular);
		    }
		} catch(Exception x) {
		}	
	}
	
	private void saveHistory(){
		try {		  
		    final int numrecords = store.getNumRecords();		    	
			for(int i=0;i<formulars.size();++i){
				byteOutStream.reset();	
				
				Real result = ((Real)results.elementAt(i));
				dataOutStream.writeByte(result.sign);
				dataOutStream.writeInt(result.exponent);
				dataOutStream.writeLong(result.mantissa);
				
				final Vector formular = (Vector)formulars.elementAt(i);
				for(int j=0;j<formular.size();++j){
					final int tokentype = Solver.tokenType((String)formular.elementAt(j));
					dataOutStream.writeInt(tokentype);
				}
			
				dataOutStream.flush();
				final byte[] buff = byteOutStream.toByteArray();
				
				if (numrecords <= i)
					store.addRecord(buff, 0, buff.length);
			    else
			    	store.setRecord(i+1, buff, 0, buff.length);
			}						
		} catch(Exception x) {
        }	
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -