俺看了一些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();
  }
}
 
 
  |