//计算题器
import java.awt.Color;
import java.awt.Font;
import java.awt.Label;
import java.awt.List;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.DecimalFormat;
import javax.swing.JFrame;
public class Main extends JFrame{
Label labRule=new Label();//规则描述标签
Label labA=new Label();//第一个数字标签
Label labOp=new Label();//加减乘除标签
Label labB=new Label();//第二个数字标签
Label label5=new Label();//等于号“=”标签
Label labWarn=new Label();//输入合法性校验提示标签
Label labQues=new Label();//答题列表标签
Label labResult=new Label();//判分标签
TextField txtAnswer=new TextField();//输入答案输入框
int total=0;//记录答题总数
int right=0;//记录答题正确数量
int error=0;//记录答题错误数量
int score=0;//记录答题总分
boolean isOver=false;//一轮结束后标识
boolean isFirst=true;//程序第一次运行标识
long startTime;//每一轮运行开始时间
List listDisp=new List();//答题列表展示框
List listScore=new List();//分数展示框
public static void main(String[] args){
Main score=new Main();
}
public Main(){
init();
setSize(450,630);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public void init(){
setLayout(null);
setSize(450,630);
labRule.setText("Ruler:Ten questions for each group,every question for ten score,ENTER key start,2 decimal places");
labRule.setBounds(36, 10, 390, 72);
labRule.setFont(new Font("Dialog",Font.PLAIN,12));
getContentPane().add(labRule);
labA.setText("x");
labA.setBounds(36,82,36,36);
labA.setFont(new Font("Dialog",Font.PLAIN,24));
getContentPane().add(labA);
labOp.setText("+");
labOp.setFont(new Font("Dialog",Font.PLAIN,24));
labOp.setBounds(72, 82, 45, 36);
getContentPane().add(labOp);
labB.setText("y");
labB.setFont(new Font("Dialog",Font.PLAIN,24));
labB.setBounds(118, 82, 33, 36);
getContentPane().add(labB);
label5.setText("=");
label5.setFont(new Font("Dialog",Font.PLAIN,24));
label5.setBounds(168, 82, 24, 36);
getContentPane().add(label5);
labWarn.setFont(new Font("Dialog",Font.PLAIN,12));
labWarn.setBackground(Color.RED);
labWarn.setBounds(320, 82, 80, 36);
labWarn.setVisible(false);
getContentPane().add(labWarn);
labQues.setText("Question List:");
labQues.setFont(new Font("Dialog",Font.PLAIN,12));
labQues.setBounds(36, 148, 100, 20);
getContentPane().add(labQues);
labResult.setText("Score:");
labResult.setFont(new Font("Dialog",Font.PLAIN,12));
labResult.setBounds(36,420,100,20);
labResult.setVisible(false);
getContentPane().add(labResult);
txtAnswer.setFont(new Font("Dialog",Font.PLAIN,24));
txtAnswer.setBounds(216, 82, 100, 36);
getContentPane().add(txtAnswer);
listDisp.setFont(new Font("Dialog",Font.PLAIN,16));
listDisp.setBounds(36, 174, 282, 230);
getContentPane().add(listDisp);
listScore.setFont(new Font("Dialog",Font.PLAIN,16));
listScore.setBounds(36,450,282,135);
MyKey myKey=new MyKey();// 答案输入框,键盘按键监听类
txtAnswer.addKeyListener(myKey);
}
class MyKey implements KeyListener{
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getSource()==txtAnswer){
if(e.getKeyCode()==KeyEvent.VK_ENTER){
if(isOver || isFirst){
updateQuestion(null);
}else if("".equals(txtAnswer.getText())){
labWarn.setText("Please input answer!");
labWarn.setVisible(true);
}else{
labWarn.setVisible(false);
if(!isNumber(txtAnswer.getText())){
labWarn.setText("Please input number!");
labWarn.setVisible(true);
}else if(total<9){
judge(null);
updateQuestion(null);
}else{
judge(null);
labResult.setVisible(true);
scorePerformed(null);
}
}
}
}
}
@Override
public void keyReleased(KeyEvent e) {
}
}
int a=0,b=0;
String op="";
double result=0;
DecimalFormat df=new DecimalFormat("#.00");
/**
* 出题方法
* @param e
*/
public void updateQuestion(ActionEvent e){
if(isFirst){
startTime=System.currentTimeMillis();
}
if(isOver==true){
listDisp.clear();
listScore.clear();
labResult.setVisible(false);
listScore.setVisible(false);
}
isOver=false;
a=(int)(Math.random()*9+1);
b=(int)(Math.random()*9+1);
int c=(int)(Math.random()*4);
switch (c) {
case 0:
op="+";
result=a+b;
break;
case 1:
op="-";
result=a-b;
break;
case 2:
op="*";
result=a*b;
break;
case 3:
op="/";
result=(a*1.0)/b;
//若两个数除不尽,则按四舍五入保留2位小数
if(String.valueOf(result).length()>10){
result=Double.parseDouble(df.format((a*1.0)/b));
}
break;
}
labA.setText(String.valueOf(a));
labB.setText(String.valueOf(b));
labOp.setText(op);
label5.setText("=");
txtAnswer.setText("");
isFirst=false;
}
/**
* 判断结果
* @param e
*/
public void judge(ActionEvent e){
try{
double value=Double.parseDouble(txtAnswer.getText());
String resultStr=(total+1)+": "+a+op+b+"="+value;
if(value==result){
resultStr+=" \ttrue";
right++;
score+=10;
}else{
resultStr+=" \tError / true answer:"+result;
error++;
}
listDisp.add(resultStr);
total++;
}catch(NumberFormatException ignored){
}
}
/**
* 统计分数
* @param e
*/
public void scorePerformed(ActionEvent e){
isOver=true;
listScore.clear();
listScore.setVisible(true);
String exitStr="This answer "+total+" question";
listScore.add(exitStr);
listScore.add("UsedTime:"+(System.currentTimeMillis()-startTime)/1000+"s");
listScore.add("BingoNumber:"+right+"question");
listScore.add("EorrorNumber:"+error+"question");
listScore.add("Score:"+score+" grade");
getContentPane().add(listScore);
score=0;
right=0;
error=0;
total=0;
}
/**
* 校验输入是否位数字
* @param numberStr
* @return
*/
public boolean isNumber(String numberStr){
boolean isNumber=true;
try{
Double.parseDouble(numberStr);
}catch(NumberFormatException e){
isNumber=false;
}
return isNumber;
}
}
//画个循环圆
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame {
public static void main(String args[])
{
JFrame frame=new Main();
frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
frame.setSize(600,600);
frame.setVisible(true);
}
public void paint( Graphics g)
{
g.drawString("circle 99",20,20);
int x0=getSize().width/2;
int y0=getSize().height/2;
for(int r=0;r<getSize().height/2;r+=10)
{
g.setColor(getRandomColor());
g.drawOval(x0-r,y0-r,r*2,r*2);
}
}
Color getRandomColor()
{
return new Color(
(int)(Math.random()*255),//random本身只产生(0~1)之间的小数,
(int)(Math.random()*255),
(int)(Math.random()*255)
);
}
}