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