俺看了一些java, 写个程序出来玩玩。由于界面是用jbuilder生成的,可能代码比较乱,而且还没合起来。 目前版本是0.00001 /* * word.java * * created on 2004-9-26 * */ package com.henry.vocabulary; import java.util.*; import java.text.*; public class word { private static final simpledateformat format = new simpledateformat( "yyyy-m-dd hh:mm:ss"); private static final int[] memorycurve = { 1, 2, 4, 8, 12, 20, 36, 54, 87, 160, 360 }; // every "tomorrow" starts from 5am, not from middle night. private static final int houradjust = -5; static calendar today = calendar.getinstance(); { today.add(calendar.hour, houradjust); today.set(calendar.hour,12); today.set(calendar.minute,0); today.set(calendar.second,0); } private string _wordvalue; date _nextreviewtime; int _reviewtimes; int _forgettimes; /** * @param _wordvalue the _wordvalue to set. */ public void setwordvalue(string _wordvalue) { this._wordvalue = _wordvalue; } /** * @return returns the _wordvalue. */ public string getwordvalue() { return _wordvalue; } public word(string wordvalue, string nextreviewtime, int reviewtimes, int forgettimes) { try { setwordvalue(wordvalue); _nextreviewtime = format.parse(nextreviewtime); _reviewtimes = reviewtimes; _forgettimes = forgettimes; } catch (parseexception pe) { system.out.println("the input is not a date!"); throw new runtimeexception(pe); } } public word(string strword) { try { string[] values = strword.split(","); setwordvalue(values[0]); _nextreviewtime = format.parse(values[1]); _reviewtimes = integer.parseint(values[2].trim()); if(values.length == 4) { // for compatible to the old version _forgettimes = integer.parseint(values[3]); } else { _forgettimes = 0; } } catch (parseexception pe) { system.out.println("the input is not a date!"); throw new runtimeexception(pe); } } public void forget() { _nextreviewtime = today.gettime(); _reviewtimes = 0; _forgettimes++; } public void remember() { calendar nexttime = (calendar) today.clone(); nexttime.add(calendar.date, memorycurve[_reviewtimes]); _nextreviewtime = nexttime.gettime(); _reviewtimes++; } public string tostring() { final simpledateformat format2 = new simpledateformat( "yyyy-m-dd hh:mm:ss"); string s = getwordvalue() + "," + format2.format(_nextreviewtime) + "," + _reviewtimes + "," + _forgettimes; return s; } /** * judge if this word need to be reviewed today. * comment for isneedreview */ public boolean isneedreview() { if(this._nextreviewtime.after(today.gettime())) { return false; } return true; } public static void main(string[] args) { word w = new word("test", "2004-8-30", 2, 3); word w1 = new word("test,2004-8-30,2,3"); system.out.println(w); w.remember(); system.out.println(w); w.forget(); system.out.println(w); system.out.println(w1); w1.remember(); system.out.println(w1); w1.forget(); system.out.println(w1); } } /* * wordsreview.java * * created on 2004-9-26 * */ package com.henry.vocabulary; import java.util.*; import java.io.*; /** * @author henry * */ public class wordsreview { list wordlist = new arraylist(); list wordneedreviewlist = new arraylist(); word currentword; /** * @param filename */ public void readfromfile(string filename){ try{ stringbuffer sb = new stringbuffer(); bufferedreader br = new bufferedreader(new filereader(filename)); string s; while ((s = br.readline()) != null) { this.currentword = new word(s); this.wordlist.add(this.currentword); if(this.currentword.isneedreview()){ this.wordneedreviewlist.add(this.currentword); } } this.currentword = null; } catch (filenotfoundexception e) { system.out.println(e); system.out.println(e.getstacktrace()); } catch (ioexception ioe) { system.out.println(ioe); system.out.println(ioe.getstacktrace()); } } /** * @param filename */ public void savetofile(string filename){ } /** * get a word, which needs to be reviewed. * @return */ public string getword(){ if(this.wordneedreviewlist.isempty()){ return null; } random random = new random(); int ramdonindex = random.nextint() % this.wordneedreviewlist.size(); currentword = (word)this.wordneedreviewlist.get(ramdonindex); return currentword.getwordvalue(); } public void saveword(boolean isforget){ if(this.currentword == null){ system.out.println("should not come here!"); system.out.println("when you call saveword to save the word, "); system.out.println(" you should get the word first."); return; } if(isforget) { this.currentword.forget(); } else { this.currentword.remember(); this.wordneedreviewlist.remove(currentword); } } public static void main(string[] args) { wordsreview wr = new wordsreview(); wr.readfromfile("henrypan.txt"); string s = wr.getword(); wr.saveword(false); } } // mainframe.java package app2; import java.awt.*; import java.awt.event.*; import javax.swing.*; /** *
title:
*
description:
*
copyright: copyright (c) 2004
*
company:
* @author henry * @version 1.0 */ public class mainframe extends jframe { jpanel contentpane; gridbaglayout gridbaglayout1 = new gridbaglayout(); jtextfield word = new jtextfield(); jradiobutton remember = new jradiobutton(); jradiobutton forget = new jradiobutton(); jbutton next = new jbutton(); buttongroup buttongroup1 = new buttongroup(); //construct the frame public mainframe() { enableevents(awtevent.window_event_mask); try { jbinit(); } catch(exception e) { e.printstacktrace(); } } //component initialization private void jbinit() throws exception { contentpane = (jpanel) this.getcontentpane(); word.setfont(new java.awt.font("dialog", 0, 16)); word.setselectionstart(0); word.settext(""); contentpane.setlayout(gridbaglayout1); this.setsize(new dimension(560, 463)); this.settitle("tafu vocabulary"); remember.setfont(new java.awt.font("dialog", 0, 16)); remember.settext("i remember it well."); forget.setfont(new java.awt.font("dialog", 0, 16)); forget.setselected(true); forget.settext("i forget it."); next.setfont(new java.awt.font("dialog", 0, 16)); next.settext("next"); next.addactionlistener(new frame1_next_actionadapter(this)); contentpane.add(word, new gridbagconstraints(0, 0, 2, 1, 0.0, 0.0 ,gridbagconstraints.center, gridbagconstraints.none, new insets(17, 9, 0, 31), 494, 39)); contentpane.add(remember, new gridbagconstraints(0, 1, 1, 1, 0.0, 0.0 ,gridbagconstraints.southwest, gridbagconstraints.none, new insets(26, 0, 1, 0), 0, 0)); contentpane.add(forget, new gridbagconstraints(1, 1, 1, 2, 0.0, 0.0 ,gridbagconstraints.southwest, gridbagconstraints.none, new insets(25, 0, 37, 0), 0, 0)); contentpane.add(next, new gridbagconstraints(1, 3, 1, 1, 0.0, 0.0 ,gridbagconstraints.center, gridbagconstraints.none, new insets(0, 9, 59, 13), 44, 11)); buttongroup1.add(forget); buttongroup1.add(remember); } //overridden so we can exit when window is closed protected void processwindowevent(windowevent e) { super.processwindowevent(e); if (e.getid() == windowevent.window_closing) { system.exit(0); } } void next_actionperformed(actionevent e) { system.out.println("next action perform!"); if(this.forget.isselected()){ } } } class frame1_next_actionadapter implements java.awt.event.actionlistener { mainframe adaptee; frame1_next_actionadapter(mainframe adaptee) { this.adaptee = adaptee; } public void actionperformed(actionevent e) { adaptee.next_actionperformed(e); } } // mainwin.java package app2; import javax.swing.uimanager; import java.awt.*; /** *
title:
*
description:
*
copyright: copyright (c) 2004
*
company:
* @author not attributable * @version 1.0 */ public class mainwin { boolean packframe = false; //construct the application public mainwin() { mainframe frame = new mainframe(); //validate frames that have preset sizes //pack frames that have useful preferred size info, e.g. from their layout if (packframe) { frame.pack(); } else { frame.validate(); } //center the window dimension screensize = toolkit.getdefaulttoolkit().getscreensize(); dimension framesize = frame.getsize(); if (framesize.height > screensize.height) { framesize.height = screensize.height; } if (framesize.width > screensize.width) { framesize.width = screensize.width; } frame.setlocation((screensize.width – framesize.width) / 2, (screensize.height – framesize.height) / 2); frame.setvisible(true); } //main method public static void main(string[] args) { try { uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname()); } catch(exception e) { e.printstacktrace(); } new mainwin(); } }
