精华内容
下载资源
问答
  • 小学生四则运算JAVA

    2021-03-05 20:05:25
    组员:黄浩格,何坤一、项目说明1题目:实现一个自动生成小学四则运算题目的命令行程序。2说明:自然数:0, 1, 2, …。• 真分数:1/2, 1/3, 2/3, 1/4, 1’1/2, …。• 运算符:+, −, ×, ÷。• 括号:(, )。• ...

    组员:黄浩格,何坤

    一、项目说明

    1题目:实现一个自动生成小学四则运算题目的命令行程序。

    2说明:

    自然数:0, 1, 2, …。

    • 真分数:1/2, 1/3, 2/3, 1/4, 1’1/2, …。

    • 运算符:+, −, ×, ÷。

    • 括号:(, )。

    • 等号:=。

    • 分隔符:空格(用于四则运算符和等号前后)。

    • 算术表达式:

    e = n | e1 + e2 | e1 − e2 | e1 × e2 | e1 ÷ e2 | (e),

    其中e, e1和e2为表达式,n为自然数或真分数。

    • 四则运算题目:e = ,其中e为算术表达式。

    3需求:

    使用 -n 参数控制生成题目的个数,例如

    Myapp.exe -n 10

    将生成10个题目。

    使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如

    Myapp.exe -r 10

    将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。

    生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2。

    生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。

    每道题目中出现的运算符个数不超过3个。

    程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。

    其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。

    在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:

    答案1

    答案2

    特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。

    程序应能支持一万道题目的生成。

    程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计

    二、PSP表格

    e8c7a23733af7e23c8714c5e192af636.png

    三、设计思路

    1、将整数统一为分数形式,利用random随机生成数和符号,以字符串数组的方式存储(一个数组只包含一个分数或者一个符号),编写加减乘除算法。

    2、在 题目 文件的控制台输入 题目数 数的上限 ,就可生成对应题目在 题目.txt,对应答案存放在 正确答案.txt 文件中,学生在 学生答案.txt中输入每题答案,对错和分数在 成绩分数.txt中呈现。

    四、代码实现

    043805c980b4092309b2a8a8ea3c5138.png

    f1cfadaec2fe77c0221e793053f9276a.png

    d58af9c85744818289c5db235a73e914.png

    9f2a28f9330b3b7c43c13dacc9610ed0.png

    ef3bca3a75e966720b71e96e2ce0518d.png

    8534aa94a6428ac7d724c84b0855c51d.png

    7d8e9d0a0abadaab8da3dd17f6e5f5f3.png

    7780e2d17c6fddb352ad9fce88ab4622.png

    14b9ea9bc0aa23c18b75618f668a30c1.png

    60cb20aa44c9b62d17d99ae1cfe47278.png

    fda6383aa07a9db2981a3c5e647bcce0.png

    81a7fbf517f37f19ef2a105afeed331d.png

    五、测试结果

    508853db7f0ca37190731b626a5ccb8d.png

    33e041224b283d6209e251d2beb07882.png

    f4a4860a12e0311702a51a75bec6406d.png

    a5248ff957ffd8e23314c3aa445e04ab.png

    3f5bd2a70750fd6c887bfb2e152675de.png

    六、总结

    1、一开始想从整数入手,后来发现很多算法不适用于分数,于是再将整数化为分数,再重写各种算法。

    2、有两三个要求没有实现,比如括号和运算过程不能出现负数,而且生成题目速度较慢,以后会努力尽量改进这些。

    3、写代码的时间分配不是很好,有时写两三小时,有时只有半个钟,分工不是很明确,下次会注意的。

    java小学生四则运算带面板版 但我不知道为什么同类变量却进不了动作监听中去

    ---恢复内容开始--- package yun; import java.util.*; import java.awt.*; import java.awt.event.ActionEvent; ...

    3.结对编程成果报告(小学生四则运算的出题程序,Java实现)

    程序名称:小学生四则运算的出题程序 先附上代码: package com.makequestion; import java.text.DecimalFormat;import java.util.R ...

    作业六:小学生四则运算之NABCD模型与产品Backlog。

    NABCD模型与产品Backlog NABCD模型 ) N (Need 需求) 方便了老师和学生,使他们可以想要的时候随时可以得到,省时省力,快速出题,马上得到答案. ) A (Approach 做法 ...

    30道小学生四则运算题C/C++编程

    软件工程科课上,老师通过实例讲解什么是程序,程序和软件的区别,要求我们通过短时间写一道编程题, 题目就是编写30道小学生四则运算题.以下就是源代码: #include

    四则运算 Java 杨辉鹏,郑冠华

    四则运算 Java 杨辉鹏,郑冠华 GitHub链接:https://github.com/yanghuipeng/arithmetic 项目相关要求 使用 -n 参数控制生成题目的个数,例如 -n ...

    《软件工程》小组团队项目-小学生四则运算APP(First Sprint)

    团队项目我们小组选择了小学生四则运算APP,在上学期原有的项目基础上进行更新升级.(自我感觉我们团队上学期的小学生四则运算APP是较为成功且实用的,不过这学期学习到了新的知识, ...

    第三周结对项目--小学生四则运算CAI软件汇报及总结(UI/web)

    前言: 这周是和我队友苏卫喜一起结对开发,我主要是写项目文档需求分析,她是通过我的需求文档来进行做思维导图,之后我们通过思维导图一起讨论用户界面设计. 以下就是我的需求分析1.0版本 1.   软件名 ...

    作业6小学生四则运算测试APP的NABCD模型

    小学生四则运算测试NABCD模型 组员:李新,朱浩龙,叶煜稳,陈俊金,林德麟 (1)  N (Need 需求) 需求分析: 四则运算是小学生学习数学的核心和基础,必须经过大量的练习才能熟练掌握,但是一 ...

    使用MFC做一个简单的‘能自动生成小学生四则运算的软件’

    这是软件工程的第一次作业!但由于我们python还没入门,所以这次的要求是‘语言不限’. 小学期做过一个关于MFC的‘资金管理系统’,也正好可以有界面,所以就选择了自己很熟悉的MFC来做这个作业! 1 ...

    随机推荐

    ASP.NET MVC图片管理(上传,预览与显示)

    先看看效果(下面gif动画制作有点大,5.71MB): 题外话:上面选择图片来源于Insus.NET的新浪微博:http://weibo.com/104325017 也是昨晚(2015-07-03)I ...

    C#获取 URL参数

    假设当前页完整地址是:http://www.test.com/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.te ...

    Java并发编程核心方法与框架-CountDownLatch的使用

    Java多线程编程中经常会碰到这样一种场景:某个线程需要等待一个或多个线程操作结束(或达到某种状态)才开始执行.比如裁判员需要等待运动员准备好后才发送开始指令,运动员要等裁判员发送开始指令后才开始比赛 ...

    第二百五十二天 how can I 坚持

    明天就要去旅游了...还不知道去哪呢,只知道要滑雪,要泡温泉,还要去西柏坡..哈哈. 其他没什么了吧.只是昨晚刷的鞋还没干,不知道明天会不会干,明天还得早走会,九点之前就得到. 还不知道坐车坐多长时间 ...

    CenOS下安装Eclipse并配置PyDev

    为方便安装,使用SecureCRT来操作CentOS 1. 更改网络配置 虚拟机使用桥接方式上网(默认是NAT方式) 2. 启动后让虚拟机上网 3. 启动终端查看ip地址 4. 使用SecureCRT ...

    修复服务器上出现ImportError: cannot import name main的问题

    在服务器上成功升级pip2之后再运行pip2命令出现如下报错信息 Traceback (most recent call last): File "/usr/bin/pip2.7" ...

    Java的数组堆溢出问题

    在写测试方法的时候,生成了一个数组,之后报了堆溢出错误,这样的报错一般来说只要有一些JVM的基础都知道要用-Xmx.-Xms来开更大的堆,接下来看看我碰到的一个堆溢出的问题 在测试代码中开了一个500 ...

    JAVA对URL的解码【转】

    前段时间做URL的中文转换,有些url是utf8的格式,有的是gb2312的格式,很难区分到底是utf8还是gb2312,找了好久,发现网上的一个牛人写的转换代码: package org.apach ...

    三:Jquery-event

    一:jq中事件 1.页面载入事件 ready()方法 格式: $(document).ready(function(){}); $(function(){}); 2.绑定事件 click(),dblc ...

    展开全文
  •  由于对java还不够熟悉,我们在写代码需要不断百度来学习一些Java语言的一些细节。 3. 此次合作让我们认识到两人合作再讨论问题上,可以比一个人提出更多的思路和方法,但是合作中可能由于沟通不当的原因,也经常...

    一、github链接

    https://github.com/flames-z/sizeyunsuan

    二、项目成员

    伍欣怡、钟秋爽

    三、PSP表格

    PSP2.1

    Personal Software Process Stages

    预估耗时(分钟)

    实际耗时(分钟)

    Planning

    计划

    30

    20

    · Estimate

    · 估计这个任务需要多少时间

    60

    50

    Development

    开发

    2000

    2500

    · Analysis

    · 需求分析 (包括学习新技术)

    60

    120

    · Design Spec

    · 生成设计文档

    30

    20

    · Design Review

    · 设计复审 (和同事审核设计文档)

    50

    50

    · Coding Standard

    · 代码规范 (为目前的开发制定合适的规范)

    60

    30

    · Design

    · 具体设计

    160

    180

    · Coding

    · 具体编码

    1500

    2000

    · Code Review

    · 代码复审

    80

    150

    · Test

    · 测试(自我测试,修改代码,提交修改)

    60

    30

    Reporting

    报告

    90

    120

    · Test Report

    · 测试报告

    30

    15

    · Size Measurement

    · 计算工作量

    15

    15

    · Postmortem & Process Improvement Plan

    · 事后总结, 并提出过程改进计划

    30

    15

    合计

    4255

    5315

    四、主要代码

    1.main函数

    2f4b5afd5d07d4d62b18ed1112d5c71e.png

    750c98a4b15b081f200dc47d9fbe9a02.png

    b52f3f7383d3a8e45bbb3e45f71c7f5d.png

    2. Fraction函数,用来随机出一个分数或自然数。

    a77b76696f4dbb69fb051e79119741b9.png

    90e5978c60d80d3dc6c519c969fd9edb.png

    3. Generate,用来生成一个运算表达

    a5144e5ba97bc16f8e0d254c8b43eaf6.png

    dfb5c590d173c6fedca404a7e94fa97d.png

    4. 计算答案

    a2c92ec877b6fa784eb84fea68970a8b.png

    d20395cb7e7b9cf590c7aa9546e8c040.png

    8309d5d49b7133994274c93e6a1ff2b9.png

    5167330454d8b3175299226ad12553de.png

    5. 文件处理函数

    bf0197a2b016c5cba4214704d450d9fa.png

    14daf594b46eb833cbeb0a16b9f18b87.png

    五、生成一万道式子和答案

    910bc2a177323f9d98666b1d9d94b85c.png

    b2bd5c6c454c626f6ad01b17a05d6963.png

    六、比对答案生成成绩文档

    4df43abed657d3cb012859fbcbaa50ef.png

    七、小结

    1. 这次我们在着手写代码之前做的计划和整体思路的准备不够充分了,以至于在后面出现了写着写着回过头来重新计划设计思路的情况,非常地低效。

    2. 由于对java还不够熟悉,我们在写代码需要不断百度来学习一些Java语言的一些细节。

    3. 此次合作让我们认识到两人合作再讨论问题上,可以比一个人提出更多的思路和方法,但是合作中可能由于沟通不当的原因,也经常互相无法理解对方的表达的意思,沟通对于团队合作而言是非常重要的。

    4. 我们一开始在生成表达式的时候,因为还没有找到查重的思路,所以先不考虑它先写出生成表达式的函数,这导致后来我们找到在生成表达式时实现查重的思路时,因为时间关系,不打算重新写生成函数,故没有实现。所以一开始就生成设计文档是非常重要的。

    5. 此次结对项目,我们增强了实现合作的能力,认识到了有一个完整清晰思路的重要性。

    原文:https://www.cnblogs.com/zhongqiushuang/p/9733652.html

    展开全文
  • java小学生四则运算练习

    千次阅读 2019-03-27 19:58:25
    使用JAVA编程语言,独立完成一个3到5个运算符的四则运算练习的软件。 软件基本功能要求如下: • 程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号±÷来表示)练习题,每个数字在 0 和 100 之间,...

    软件工程导论第一次个人作业!

    0.0项目基本任务

    使用JAVA编程语言,独立完成一个3到5个运算符的四则运算练习的软件。
    软件基本功能要求如下:

    • 程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号±÷来表示)练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
    • 每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3÷5+2=2.6,2-5+10=7等算式。
    • 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
    • 当程序接收的参数为4时,以下为一个输出文件示例。
    2018010203
    13+17-1=29
    11
    15-5=160
    3+10+4-16=1
    15÷5+3-2=4
    软件附加功能要求如下:(请有余力的同学完成)
    • 支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号数必须大于2对,且不得超过运算符的个数。
    • 扩展程序功能支持真分数的出题与运算(只需要涵盖加减法即可),例如:1/6 + 1/8 + 2/3= 23/24。注意在实现本功能时,需支持运算时分数的自动化简,比如 1/2+1/6=2/3,而非4/6,且计算过程中与结果都须为真分数。

    1.0我的整体思路和基本模块:
    在百度了一些博客之后,我基本确定了思路:
    1.用两个数组结合来生成运算式中的数字和运算符,并按照一定格式插入左右括号;
    2.运用逆波兰算法将中缀表达式转换为后缀表达式,并使用栈对后缀表达式进行计算,并在运算过程中判断排除负数和小数中间结果的出现;
    3.最后在Main函数中将结果输出到指定文件;

    2.0我的学习和开发过程:
    阶段一:
    首先我参考了这篇博客,开始大概懂了几个方法后开始编码,还对这篇的方法和整体思路特别有自信,觉得弄懂他的方法就完成了,后来发现是我太天真了,在测试的时候有很多问题。在一边编码的时候由于没有从总体上理解清楚后再下手,使得开发效率低,花多时间调试,浪费很多时间,表达式生成后运算符和括号位置混乱并且没有结果,最后决定另寻他路。
    (https://www.cnblogs.com/Fuenli/p/8605497.html)
    阶段二:
    由于自身java基础很差,我花了很多时间研究别人的博客,而且第一阶段的开发又浪费很时间,所以这时距离交作业很近了,我就想赶紧再找一个思路相近的再学习学习,于是根据上课时老师的推荐找到了这个学姐的代码:(https://coding.net/u/wanghz499/p/2016012032week2-2/git/tree/master/src)
    Alt
    其中我没有实现"ProperFraction()",其余思路类似:

    很巧妙地产生运算式:

    //相当于固定了运算式的运算符位置,即格式固定
         switch (operatorCount){
                case 3:{
                    if(choose==0){
                        s=num[0]+operator[index[0]]+"("+"("+num[1]+operator[index[1]]+num[2]+")"+operator[index[2]]+num[3]+")";//1+((2×3)-4)型
                    }else s="("+num[0]+operator[index[0]]+num[1]+")"+operator[index[1]]+"("+num[2]+operator[index[2]]+num[3]+")";//(1+2)×(3+4)型
                    break;
                }
    
                case 4:{
                    if(choose==0){
                        s="("+num[0]+operator[index[0]]+num[1]+")"+operator[index[1]]+num[4]+operator[index[3]]+"("+num[2]+operator[index[2]]+num[3]+")";//(1+2)×3÷(4-1)型
                    }else s=num[4]+operator[index[3]]+"("+num[0]+operator[index[0]]+num[1]+")"+operator[index[1]]+"("+num[2]+operator[index[2]]+num[3]+")";//3×(1+2)+(4÷2)型
                    break;
                }
    
                case 5:{
                    if(choose==0){
                        s="("+num[0]+operator[index[0]]+num[1]+operator[index[4]]+num[5]+")"+operator[index[1]]+"("+num[4]+operator[index[3]]+num[2]+")"+operator[index[2]]+num[3];//(6+2×3)-(1+2)×3型
                    }else s="("+num[0]+operator[index[0]]+"("+num[1]+operator[index[1]]+num[2]+operator[index[2]]+num[3]+")"+")"+operator[index[3]]+"("+num[4]+operator[index[4]]+num[5]+")";//(1+(2×3+4))-(6÷3)型
                    break;
                }
            }
    
            
    

    并且 保证式子里至少有2个不同操作符的方法:

     private static int[] index(int n,int m){ //产生操作符的下标数组
            Random random = new Random();
            int similar=0;
            int[] a = new int[n];
            for(int j=0;j<n;j++){
                a[j] = random.nextInt(m);
            }
            for(int j=1;j<n;j++){
                if(a[0]==a[j]) similar++;
            }
            if(similar==n-1) return index(n); //保证一个式子里至少有2个不同的操作符,若所有操作符下标都一样,则重新产生操作符下标
            else {
                return a;
            }
    
        }
            
    

    虽然都是核心使用逆波兰表达式,但这个是在中缀转后缀的同时进行计算,
    对负数和小数的判断:
    (1)在计算时由最基本的运算单元返回的结果来实现,若不符合标准就(return -1;),

    
     case('-'):{
        res = a - b; //产生负数就不合格
         break;
    	}
    case('÷'):{
        if(b==0)
    		 return -1;
        else if(a%b!=0) //产生小数就不合格
    	 	 return -2;
    	  else
    		res = a / b;
    	break;
    		    		
    	}
            
    

    (2)这样在运算的方法中只要得到了小于0的返回值也返回状态值为-1,

    int a = stack1.pop();
    int b = stack1.pop();
    int sresulat =calculate (b, a, stmp);
      if(sresulat<0)
        return  -1;
     stack1.push(sresulat);
            
    

    (3)在生成运算式的方法中用一个if语句判断此时的结果,若为负数则递归调用生成函数一直到合格为止。

    		Calculator c = new Calculator();
            int sum = c.Cal(s);
            s += sum;
            if(sum>=0){ //判断式子是否符合要求,凡是返回负数的就是不合格的
                s+=sum;
            }else {
                return format(); //递归直到产生合格的式子
            }
    
            return s;
            
    

    后来我又觉得既然已经弄懂了她的想法,想自己改进一下,就又搜了搜中缀转后缀这里,然后找到了这篇让我感觉这个理解起来很透彻:
    (https://www.cnblogs.com/fuck1/p/5995857.html)
    理解清楚后自己练习一下,在改了很久以后发现这个方法只能处理像(2*3+5=?)这种只含有一位数字的运算,这里我也花了不少时间

    	Pattern pattern = Pattern.compile("\\d+||(\\d+\\.\\d+)");
           // 将后缀表达式分割成字符串数组,此处直接使用空白也可以对字符串进行分割!!
       String[] strings = exp.split("");
            
    

    主要问题是我发现这里的 split(" ") 会将 23 这样的数分割成 2 和 3,接下来就无法计算了;学习了用pattern 正则匹配的方法,我尝试着百度split()函数怎样将运算式中的运算符和数字分开,应该是知识储备不够,这个问题没有解决。。。

    阶段三:
    这时我想再好好研究一下第一次放弃的那个方法,再试试吧;
    最终的结果是我没有找到合适的方法排除小数和负数,当式子中没有出现"-" ," ÷"时计算是正确的,希望以后可以改进出来吧,多多学习和练习。

    学习到的小知识,也还算有收获:
    1.正则表达式:http://www.runoob.com/java/java-regular-expressions.html
    2.输出流:https://www.cnblogs.com/fnz0/p/5423201.html
    3.类型转换:https://blog.csdn.net/u010502101/article/details/79162587
    4.包括命令行cmd的使用也基本get了

    个人总结
    首先由于知识和编程经验不足,整个作业效率很低,而且大多数都是看别人的思路后一点点学习的,java学习基本空白,练习的又少;另一方面,我在真正去做的时候也有偷懒的心理,有的时候知其然而不知其所以然,项目整体构思不够清楚,到写的时候要花很多时间,然而编写完其实只是完成了20%的工作量,甚至是无用功,测试和修改的时间真的是比想象的多很多,要解决太多的问题了,因此以后开发时我会先分析清楚再下手;对于以后的学习我觉得还是要采用项目驱动式,一边做一边学,更有针对性,实践出真知!!!

    *主要花费的时间如下
    **
    任务内容 …… 计划与实际
    计划 : 10 --------》 20
    开发 : 685--------》 2238(~35h)
    具体设计 : 40 --------》 100
    具体编码 : 6
    60 --------》 (7+7+5)*60=1140
    测试与修改: 200--------》 420+300=720

    谢谢观看~

    展开全文
  • GitHub地址: ... 软件需求分析: 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间...同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程...

    GitHub地址:

    https://github.com/Sophur/four_arithmetic_operation

    软件需求分析

    • 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
    • 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
    • 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt中,不要输出额外信息,文件目录与程序目录一致。
    • 当程序接收的参数为4时,以下为输出文件示例。

                      

     功能设计:

                输入数字n,随机生成n个包含至少两个运算符的式子以及相应的结果并输出到指定文件

       

    设计实现:

               设计思路: 本次设计包含一个类Demo,共分为四个模块,分别为随机生成中缀表达式;将生成的中缀表达式转换为后缀表达式;计算后缀表达式的值;将第一个模块中生成中缀表达式以及第三个模块中计算出的相应的值输出到txt文件。

    测试运行:

    • 控制台输出:                                                                                               

                               

    • 文件输出:                       

                   

    •  命令行输出:

                     

    核心代码: 

    计算后缀表达式的值:

            从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。

            本次设计我先把中缀表达式转换为后缀表达式,再对后缀表达式求值。

    //计算后缀表达式
        public static int evaluateExpression(String expression) {
    
            Stack<Integer> operandStack = new Stack<Integer>();// 存放操作数的栈
            Stack<Character> operatorStack = new Stack<Character>();// 存放运算符的栈
            // 分割算术表达式
            ArrayList<String> result = new ArrayList<String>();
            String num = "";
            for (int i = 0; i < expression.length(); i++) {
                if (Character.isDigit(expression.charAt(i))) {
                    num = num + expression.charAt(i);
                } else {
                    result.add(num);
                    result.add(expression.charAt(i) + "");
                    num = "";
                }
            }
            result.add(num);
            // 测试分割后的算术表达式
    //       for(String str:result){
    //       System.out.print(str+" ");
    //       }
            // 后缀表达式
            for (int i = 0; i < result.size(); i++) {
    
                if (result.get(i).equals("+") || result.get(i).equals("-")) {
                    // 如果字符串为"+"或者"-",则执行栈中已存数据的加减乘除计算
                    while (!operatorStack.isEmpty() && (operatorStack.peek() == '+' || operatorStack.peek() == '-'
                            || operatorStack.peek() == '*' || operatorStack.peek() == '/')) {
                        processOneOperator(operandStack, operatorStack);
                    }
                    operatorStack.push(result.get(i).charAt(0));// 将操作符压入操作符栈中
                } else if (result.get(i).equals("*") || result.get(i).equals("/")) {
                    // 如果字符串为"*"或者"/",则执行栈中已存数据的乘除计算
                    while (!operatorStack.isEmpty() && (operatorStack.peek() == '*' || operatorStack.peek() == '/')) {
                        processOneOperator(operandStack, operatorStack);
                    }
                    operatorStack.push(result.get(i).charAt(0));
                } else if (result.get(i).equals("(")) {
                    // 如果遇到左括号,则将左括号压入操作符栈中
                    operatorStack.push('(');
                } else if (result.get(i).equals(")")) {
                    // 如果遇到右括号,则计算栈中的数据,直到遇到左括号为止
                    while (operatorStack.peek() != '(') {
                        processOneOperator(operandStack, operatorStack);
                    }
                    operatorStack.pop();// 将进行过计算的左括号弹出
                } else {
                    // 如果遇到的是操作数,则将操作数直接压入操作数栈中
                    operandStack.push(Integer.parseInt(result.get(i)));
                }
            }
            // 对栈中数据进行计算,知道栈为空为止
            while (!operatorStack.isEmpty()) {
                processOneOperator(operandStack, operatorStack);
            }
            // 此时操作数栈中的栈顶元素也就是计算结果
            return operandStack.pop();

     

    总结:

           在看到项目的题目时觉得应该能轻松做出来,毕竟在学习C语言时学过有相关的例子,可以如法炮制。但是真正开始动手做时很艰难,原因有两点:其一,很长时间不使用java语言,基本的语法知识都已模糊,程序的开头定义一个ArrayList数组时都已忘记数组的基本格式,百度后重新学习后再去做已经花了很多时间,整个程序编码的过程基本伴随着不断的查询基本语法。其二:设计的功能过于简单,在后期完善阶段进行了很多次修改。通过这次项目的完成我真正意识到了在软件开发的过程中基础知识匮乏的致命性,几乎整个实现过程我都在处理低级的语法错误。    

    展示PSP:

    PSP2.1

    任务内容

    计划完成需要的时间(min)

    实际完成需要的时间(min)

    Planning

    计划

    20

    15

    ·       Estimate

    ·  估计这个任务需要多少时间,并规划大致工作步骤

    20

    15

    Development

    开发

    600

    500

    ··       Analysis

      需求分析 (包括学习新技术)

    60

    60

    ·       Design Spec

    ·  生成设计文档

    6

    10

    ·       Design Review

    ·  设计复审 (和同事审核设计文档)

    4

    6

    ·       Coding Standard

      代码规范 (为目前的开发制定合适的规范)

    5

    5

    ·       Design

      具体设计

    10

    12

    ·       Coding

      具体编码

    500

    450

    ·       Code Review

    ·  代码复审

    15

    15

    ·       Test

    ·  测试(自我测试,修改代码,提交修改)

    13

    30

    Reporting

    报告

    15

    20

    ··       Test Report

    ·  测试报告

    5

    10

    ·       Size Measurement

      计算工作量

    10

    13

    ·       Postmortem & Process Improvement Plan

    ·  事后总结 ,并提出过程改进计划

    3

    3

     

     

     

    转载于:https://www.cnblogs.com/hxyao/p/8604748.html

    展开全文
  • Java小学四则运算

    2021-02-26 13:58:01
    作业需求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正...
  • java 四则运算gui界面

    2021-03-08 23:29:33
    importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Font;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax...
  • java简单四则运算

    2021-04-17 07:07:56
    java四则运算(递归的思想)_计算机软件及应用_IT/计算机_专业资料。java四则运算(递归的思想)package demo; importjava.util.Stack...三、项目需求 所选项目名称:小学生四则运算练习程序实现对小学生简单......四则运...
  • 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如 Myapp.exe -r 10 将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息...
  • 一、背景阿超有个儿子上小学二年级,老师...C/C++、C#、Java、Python、VB、JavaScript、Perl……具体要求如下:能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)除了整数外,...
  • 一、需求分析(描述自己对需求的理解,以及后续扩展的可能性)实现一个命令行程序,要求:- 自动生成小学四则运算题目(加,减,乘,除)- 支持整数- 支持多运算符(比如生成包含100个运算符的题目)- 支持真分数- 统计...
  • 一、项目成员以及coding地址:二、结对编程题目描述在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI,成为一个有基本功能、一定价值的程序。在下面的功能需求中实现...
  • 实现一个自动生成小学四则运算题目的命令行程序。程序一次运行生成的题目不重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和...
  • 我们老师最近布置了一项作业,让每个人用Java语言实现整数或是分数的四则运算功能。 具体需求如下: 1、程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题,每个数字在 0 和 ...
  • 文章目录 前言 一、Java背景故事 二、使用步骤 1.... 2.... 3.... 4.... 5....通过这个小游戏可以对Java用户图形界面的基础方面有进一步的认识。...(还有就是目录不好用,我研究了好久也没琢磨出来...Java语言前身:Oak(橡...
  • java实现随机四则运算

    2019-10-01 01:56:31
    使用JAVA编程语言,独立完成一个包含3到5个数字的四则运算练习,软件基本功能要求如下: 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。 为了让小学生...
  • Github项目地址:https://github.com/feser-xuan/Arithmetic.git1、需求分析软件基本功能要求如下:程序可接收一个输入参数...同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整...
  • (注:附上coding.net项目网址:https://git.coding.net/LilyF/Software.git,coding.net与GitHub功能相同,coding.net的语言为中文,而GitHub是英文。) 二、项目报告 1、需求分析 (1)程序...
  • 小学四则运算

    2019-03-27 20:06:02
    使用JAVA编程语言,独立完成一个3到5个运算符的四则运算练习的软件。 软件基本功能要求如下: 程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题,每个数字在 0 和 100 之间,...
  • 小伙伴的博客链接地址... 任务一: ...老师层面:特意找到了母校的老师,由于双方地处较远所以采用电话等方式进行的咨询。...学生层面:询问了几位小学生,主要是家教的时候顺便访问的。 (3)调查问卷 利用问卷...
  • 同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件...
  •  任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案...
  • 随机四则运算 C语言

    2021-05-21 11:11:57
    设计思想:出三十道一百以内数的随机四则运算题目,先随机两个一百以内的数字,再通过随机数确定四则运算算符,最后通过for循环输出三十道源代码程序:#include #include #include #include int main(){int a = 0;...
  • 主要功能:运算小学四则运算,可以选择加减乘除以及混合运算。除了整数以外,还要支持真分数的四则运算。 (例如: 1/6 + 1/8 = 7/24)思考:1.支持整数和分数,基本数据类型难以满足,考虑新建一个封装的类number,...
  • 四则运算

    2021-05-23 07:16:50
    网页简易四则运算器2021-05-18 22:35:40下载地址:https://download.csdn.net/download/qq_31293575/18340399项目介绍Calculator WebsiteThe George Washington UniversityComputer Science 1023Professor Brenner ...
  • 小学四则运算自动生成程序 ·能够自动生成四则运算练习题 ·可以定制题目数量 ·用户可以选择运算符 ·用户设置最大数(如十以内、百以内等) ·用户选择是否有括号、是否有小数 ·用户选择输出方式(如输出到文件...
  • .计算模块接口的设计与实现过程 五.计算模块接口部分的性能改进 六.计算模块部分单元测试展示 七.计算模块部分异常处理说明 八.界面模块的详细设计过程 九.界面模块与计算模块的对接 十.结对过程的描述 ...
  •  像二柱子那样,花二十分钟写一个能自动生成三十道小学四则运算题目的 “软件”。要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性)、题目避免重复、可定制出题的数量。 设计思路:首先通过...
  • 2016011990小学四则运算练习软件项目报告 小学四则运算练习软件项目报告 项目克隆地址:https://git.coding.net/chenf640/workhome2_2.git 目录: 一、需求分析 二、功能设计 三、设计...
  • 任务源代码github地址: ... 需求分析: 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和100...同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,989
精华内容 795
关键字:

java语言小学生四则运算

java 订阅