ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

四则运算 ------(计应192-张先良)

2021-05-30 22:34:02  阅读:180  来源: 互联网

标签:static 张先良 计应 str import ------ new jtf result


PSP阶段

预计花费时间(小时) 实际花费时间
计划 2 2
明确需求和其他相关因素,估计每个阶段的时间成本 1 1
开发 8 8.5
需求分析 1 1
代码规范 1 1
具体设计 1 1
具体编码 2 1.5
代码复审 1 1.5

测试(自测、修改代码、提交修改)

2 2.5

 

 

 

 

计划:

  在刚拿到项目时,对项目进行分析,提出问题

需求分析:

  给出题目,

  输入结果,

  对比结果,

  保存正确的题目数量

具体设计

  首先随机生成数字和表达式   

  然后输入自己的计算结果,并与正确结果进行比较

  最终将每一题的结果都显示在界面中,并计算正确率

具体编码和代码规范

  表达式和计算结果

package operations;

import java.text.DecimalFormat;
import java.util.Random;

public class Oper {
static char[] cha = { '+', '-', '*', '/' };// 加减乘除数组

static Random random = new Random();
static double num1 = random.nextInt(100);
static double num2 = random.nextInt(100);
static char c = cha[random.nextInt(4)];

public static String exercises() {
num1 = random.nextInt(100);
num2 = random.nextInt(100);
c = cha[random.nextInt(4)];

if (c == '/') {
while (num2 == 0) {
num2 = random.nextInt(100);
}
return (int) num1 + "" + c + "" + (int) num2 + "=";
}

return (int) num1 + "" + c + "" + (int) num2 + "=";
}

public static Double res() {
double result = 0;
switch (c) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;

default:
break;
}
DecimalFormat df = new DecimalFormat("#.#");//除法运算小数位过多时保留一位小数
result = Double.valueOf(df.format(result));// 转换为一位小数后表达式会转变成字符串,将其转变为double类型
return result;
}
}

    界面设计

package operations_GUI;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import operations.Oper;

public class Snippet {
static JFrame jf = new JFrame();// 主界面
static JPanel pan1 = new JPanel();// 主界面最上方面板
static JPanel pan2 = new JPanel();// 主界面中间面板
static JPanel pan3 = new JPanel();// 主界面最下方面板

static String str = "";// 存储表达式

static JTextField[] jTextFields = new JTextField[10];// 存放表达式的文本框的数组

static int i = 0;// 用于记录写了几道题,十题为一组

static int right = 0;// 用于记录写对几道题

public static void main(String[] args) {
jf.setSize(800, 600);
jf.setLayout(new BorderLayout());
jf.setLocationRelativeTo(null);

pan1.setBackground(Color.WHITE);
pan1.setSize(800, 150);
pan1.setLayout(new FlowLayout());

JTextField jtf = new JTextField(20);// 用于存储表达式
str = Oper.exercises();// 将表达式赋值给str
jtf.setText(str);
jtf.setSize(400, 100);
jtf.setEditable(false);
jtf.setLocation(300, 25);
jtf.setFont(new Font("微软雅黑", 1, 20));
pan1.add(jtf);

JTextField jtf_result = new JTextField(5);// 用于输入计算结果
jtf_result.setFont(new Font("微软雅黑", 1, 20));
pan1.add(jtf_result);

JButton jb = new JButton("下一题");// 按钮,生成下一个表达式
pan1.add(jb);

pan2.setLayout(new GridLayout(5, 2));
for (int i = 0; i < 10; i++) {
jTextFields[i] = new JTextField();
jTextFields[i].setFont(new Font("微软雅黑", 1, 20));// 设置文本框字体
jTextFields[i].setEditable(false);// 设置文本框不可编辑
pan2.add(jTextFields[i]);// 循环生成文本框,并将文本框,并将文本框添加到中间面板中
}

JTextField jt = new JTextField(40);// 用于显示做题结果的文本框
jt.setFont(new Font("微软雅黑", 1, 15));
jt.setEditable(false);// 设置文本框不可编辑

JButton reset = new JButton("再做一遍");// 用于清空所有信息,重新做题

pan3.add(jt);
pan3.add(reset);

jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if (jtf_result.getText().equals("")) {
jTextFields[i].setText(str + jtf_result.getText() + " × 正确结果为:" + Oper.res());
} else if (Oper.res() == Double.parseDouble(jtf_result.getText())) {
jTextFields[i].setText(str + jtf_result.getText() + " √");
right++;
} else {
jTextFields[i].setText(str + jtf_result.getText() + " × 正确结果为:" + Oper.res());
}
i++;
str = Oper.exercises();
jtf.setText(str);
jtf_result.setText("");
jtf_result.requestFocus();// 用来获取焦点

if (i == 10) {
jb.setEnabled(false);
jt.setText("你答对了" + right + "道题,答错了" + (10 - right) + "道题,正确率为:" + (right / 10.0));
if (right >= 8) {
JOptionPane.showMessageDialog(null, "恭喜你,答对了" + right + "道题");
}
}
}
});

reset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
str = Oper.exercises();
jtf.setText(str);
for (int i = 0; i < 10; i++) {
jTextFields[i].setText("");
}
jt.setText("");
i = 0;
right = 0;
jb.setEnabled(true);
}
});

jf.add(pan1, BorderLayout.NORTH);
jf.add(pan2, BorderLayout.CENTER);
jf.add(pan3, BorderLayout.SOUTH);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

  结果:

          

 

代码复审

  首先使用debug一步一步的检查,对一些细节进行了修改,

  然后将重复使用两次或两次以上的代码抽取成一个方法,减少代码的长度,增加可阅读性

 

总结

  对于基础知识的掌握还需要更加的熟练,需要加以练习

 

标签:static,张先良,计应,str,import,------,new,jtf,result
来源: https://www.cnblogs.com/hnzj-jy192-/p/14829440.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有