|
一个JAVA写的背单词程序(1)
俺看了一些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.Javapackage app2;import Java.awt.*;import Java.awt.event.*;import Javax.swing.*;/** *
|