【软工Work1】四则加减乘除混合运算(带括号、真分数)

大家好,很高兴写一片博客给分享自己的这段奇妙的experience of coding!

本来想听老师建议在github上down一些代码的,但之后看网上代码都挺复杂怕难改。而且自己更简单的自己的思路,于是一个一个实现了。

从构思,到完成基础功能,到想完成附加功能,到想放弃,再到再试试,然后各种debug前从上周三开始做,每天花时大约6+6+8+8+6+8+6+6>=54小时 3240min。

一共约750行代码。

我发布在github上的项目,敬请查看:

https://github.com/a1171404817/Ruangongzuoye.git

 

文件说明、实现如下:

文件名

说明

主要思路

Main.java

  1. 用于生成表达式的字符串,调用Caculate类并且写到文件。

用随机数控制+-×÷运算符以及1~100的生成;用循环进行生成;通过String的+号拼接。

Caculate.java

  1. 实现加减法器:输入表达式字符串,输出结果(字符串)。
  2. 乘除法器:输入表达式字符串,输出只带加减符号的表达式。(用于之后交给1处理)。
  3. Judge函数:通过判断式子中的符号,交给1或2->1处理。

1、加法器:通过运算符作为区分和循环,分别提取出来,放在数字字符串数组和符号字符串数组中,然后一个一个数值加。

2、乘法器:

提取×左右的两个数,计算结果,并且替代,循环,转化成加减表达式,然后交给加减法器处理。

3、Judge函数:

用来判断是调用加减还是乘除法器。

Zhengfushu.java

  1. Init函数用于生成真分数表达式,并且调用2,输出。
  2. caculate用于计算真分数表达式。
  3. 3、isKeyue 判断分子分母是否可约,可约既返回可约因子。
  1. 通过随机生成分子分母,用数组装起来,生成若分母,再成成分子,使得分子小于分母,。再通过循环进行拼接即可(main.java生成字符串)。
  2. Caculate函数先字符串中数字、符号提取出来用数组装,再判断每个分数是否可约,可约就越。然后再通过分母同分,分子同乘其他所有分母再加起来,分子上面就调用加法器,下面不用动。最终结果再调用iskeyue函数。

Kuohao.java

  1. init函数:输入表达式字符串(不带括号),输出带括号的字符串表达式。
  2. proceed函数:用于计算带括号的字符串表达式。
  1. 左括号只生成在首、和每个符号之后。左右括号的距离可约是2、3,但要小于数-通过循环,括号长度确定,右括号就确定。先生成长度为2的括号,通过随机数代表括号生成的每个位置、生成几个也随机。再处理以一个。直到长度为数-1停止,达到最大个数。并且会判断其是否有实际意义,如(33)这样是没实际意义的要筛选掉。
  2. 怎么替换:2+3+4 将2+3取出来 变成(2+3) 再用Stringbuilder的replace即可 第一个字串替换
  3. proceed 找到最后一个“(”,其里面一定不会再有括号,计算这个()得到结果(调用caculate类,再用这个结果代替这个括号。如此循环直到表达式里面没有括号,就会得到一个只有加减法或者结果的表达式。

部分代码展示:

Main.java 主要用于生成算术表达式字符串

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;

import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;

public class Main {

	public static void main(String [] args) throws IOException
	{	
		 File f=new File(".\\src\\result.txt");
		 if(!f.exists())
			 f.getParentFile().mkdir();
		 	
			{	 
			 f.createNewFile();
			}
			
		 PrintStream outPrintStream=new PrintStream(f);

		Scanner in = new Scanner(System.in);
		int n1=in.nextInt();
		int nc=0;
		System.out.println("2017010302");
		outPrintStream.println("2017010302");
//		outPrintStream.println("2017010302");
		while(nc<n1)
		{	int modelrdn=((int) (Math.random() * 10000))%3;
		
		
		if(modelrdn==0||modelrdn==2){	
			 int nFuhao = ((int) (Math.random() * 10000))%3+3;//产生符号个数  
//			 System.out.println(nFuhao);
			 
			S
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值