结队成员:陈欣容,孙奇文

一、要求:

  四则运算2,可控制下列参数:

  是否有乘除法; 是否有括号(最多可以支持十个数参与计算); 数值范围; 加减有无负数。

二、思路:

  1.存储结构:构建一个表达式类,私有属性为一个字符串数组,即将一个表达式拆成若干字符串,每个操作数和操作符都视为一个字符串。若需生成多个表达式则用类创建一个对象数组。

  2.生成一个表达式的实现过程:

    1)随机生成一个2-10的整数number表示操作数的数量;

    2)随机选择该表达式操作数全为整数或全为分数;

    3)若全为整数则判断是否要出现负数(用户输入控制),然后随机生成number个操作数,若操作数为分数则会生成一个分数字符串,格式为:“[a/b]” ,负数格式为“[-4]”;

    4)判断是否有乘除法(输入控制),若有则随机生成number-1个含有+-*÷的操作符,若无则只有+-两种操作符;

    5)用表达式类创建对象,将上述生成的操作数及操作符合成一个完整的表达式如 “9*5+6÷3=”;

    6)若用户输入有括号(即ifKuoHao参数为1),则根据表达式字符串数组的长度随机出两个位置填入一对括号,如 “9*5+6÷3=”这个表达式,该字符串数组长度为8,则随机生成整数k,范围是0-7,再判断k/2的值是否为偶数,若不为偶数则将k/2+1即为表达式数组插入右括号的位置(因为操作数的位置下标为偶数,如6的下标为4),例如,就上述表达式而言,若生成的k值为7,7/2=3,3+1=4,所以生成右括号的位置为4,即在“6”和“÷”之间添加右括号,再在k-3的位置后添加左括号,所以最终表达式为“9*(5+6)÷3=”;

    7)若ifKuoHao参数为2,则在第5)步结束。

三、源代码:

import java.util.*;public class MathHomeWork2 {

public static int choose,from,to,operNum,ifFuShu,number,ifKuoHao,ifChengChu;

public static int randomArr[]=new int[10];

public static Random ran=new Random();

public static char randomCh[]={'+','-','*','÷'};

public static Formular formu[];

@SuppressWarnings({  "resource" })

public static void main(String[] args){

Scanner in=new Scanner(System.in);

System.out.println("题目个数:");

number=in.nextInt();

System.out.println("数字范围(从小到大输入两个正整数):");

from=in.nextInt();

to=in.nextInt();

System.out.println("是否有乘除法(1有2无):");

ifChengChu=in.nextInt();

System.out.println("是否有括号(1有2无):");

ifKuoHao=in.nextInt();

System.out.println("是否有负数(1有2无):");

ifFuShu=in.nextInt();

formu=new Formular[number];

for(int i=0;i<number;i++){

formu[i]=new Formular();

choose=ran.nextInt(2)+1;

operNum=ran.nextInt(9)+2;

formu[i]=creaFormula(choose,operNum,ifChengChu,ifKuoHao);

if(formu[i]==null)

i--;

}

showFormulas(formu);

}

//生成分数

public static String creaFenShu(){

int a=0,b=0;

while(a>=b){

a=randomNum(from,to,2);

b=randomNum(from,to,2);

}

int fenshu[]={a,b};

fun1(fenshu);

String s="["+a+"/"+b+"]";

return s;

}

//生成表达式

public static Formular creaFormula(int choose,int nums,int ifChengChu,int ifKuoHao){

Formular formu=new Formular();

char operator[]=new char[nums-1];

if(ifChengChu==1){

for(int i=0;i<operator.length;i++){

int n=ran.nextInt(4);

operator[i]=randomCh[n];

}

}

else{

for(int i=0;i<operator.length;i++){

int n=ran.nextInt(2);

operator[i]=randomCh[n];

}

}

if(choose==1){

for(int i=0;i<nums;i++){

randomArr[i]=randomNum(from,to,ifFuShu);

}

for(int i=0;i<nums-1;i++){

formu.push(""+randomArr[i]);

formu.push(""+operator[i]);

}

formu.push(""+randomArr[nums-1]);

formu.push("=");

}

else if(choose==2){

String fenshu[]=new String[nums];

for(int i=0;i<nums;i++){

fenshu[i]=creaFenShu();

}

for(int i=0;i<nums-1;i++){

formu.push(""+fenshu[i]);

formu.push(""+operator[i]);

}

formu.push(""+fenshu[nums-1]);

formu.push("=");

}

else

return null;

if(ifKuoHao==1){

int k=ran.nextInt(2*nums);

k/=2;

if(k%2!=0) k++;

formu.insert(k+3,")");

formu.insert(k,"(");

}

//处理表达式,给负数加括号

for(int i=0;i<formu.size();i++){

String s=formu.get(i);

if(s.indexOf('-')!=-1&&s.length()>1){

s="["+s+"]";

}

formu.set(i,s);

}

return formu;

}

//打印表达式

public static void showFormulas(Formular f[]){

int len=f.length;

for(int i=0;i<len;i++){

System.out.print("No."+(i+1)+": ");

f[i].show();

System.out.print("\n");

}

}

//约分函数

public static void fun1(int x[]){

int k=fun2(x[0],x[1]);

x[0]=x[0]/k;

x[1]=x[1]/k;

}

//求分子分母最大公约数

public static int fun2(int x,int y){

int min,i;

if(x>y) min=x;

else

min=y;

for(i=min;i>=1;i--){

if(x%i==0&&y%i==0){

break;

}

}

return i;

}

//范围生成随机数

public static int randomNum(int fromA,int toB,int ifFuShu){

int x=ran.nextInt(toB)+fromA+1;

if(ifFuShu==1){

boolean ifFushu=ran.nextBoolean();

if(ifFushu)

x=x-2*x;

}

return x;

}

}

class Formular{

private Vector<String> formular;

public Formular(){

formular=new Vector<String>();

}

public void push(String x){

formular.addElement(x);

}

public String get(int i){

if(formular!=null&&i>=0&&i<formular.size()){

return formular.get(i);

}

else return null;

}

public void set(int i,String x){

if(formular!=null&&i>=0&&i<formular.size()){

formular.set(i,x);

}

else return;

}

public void insert(int i,String x){

if(formular!=null&&i>=0&&i<formular.size()){

formular.insertElementAt(x,i);

}

else return;

}

public void add(int i,String x){

if(formular!=null&&i>=0&&i<formular.size()){

formular.add(i,x);

}

else return ;

}

public void delete(int i){

if(formular!=null&&i>=0&&i<formular.size()){

formular.removeElementAt(i);

}

else return ;

}

public void show(){

for(int i=0;i<formular.size();i++){

System.out.print(formular.get(i));

}

}

public int size(){

if(formular!=null)

return formular.size();

else return -1;

}

}

转载于:https://www.cnblogs.com/cxr0711/p/6945954.html

课堂结队作业:二维数组(2)相关推荐

  1. 软件工程概论课堂作业二维数组

    结对作业 结对人员:曹婷婷,王凯路 设计思想:先输入一个二维数组,通过遍历二维数组,找到一个正数,确定它的下标,判断是否联通通过判断二维数组的下标假设找到一个正数,它的下标为i和j,如果找到的下一个数 ...

  2. 【c语言作业-二维数组】编写程序,求一个给定的n阶方阵的鞍点。

    [问题描述] 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点. [输入形式] 输入第一行给出一个正整数n(1≤ ...

  3. 作业九 二维数组和字符数组的应用

    知识点: (1)二维数组的定义形式为: 类型名 数组名 [行长度] [列长度]; (2)引用二维数组的元素要制定两个下标,即行下标和列下标,形式为: 数组名 [行下标] [列下标] (3)行下标的合理 ...

  4. 课堂练习:返回一个二维数组中最大子数组的和

    1.题目: 返回一个二维数组中最大子数组的和. 2.要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子 ...

  5. c语言编程实现二维数组的蛇形矩阵,蛇形矩阵 - 作业部落 Cmd Markdown 编辑阅读器...

    蛇形矩阵 C-study-code Erin最近学习了数组,她想通过数组实现一个蛇形方阵的打印,你可以帮她实现这个程序吗? input:整数n(2 output:n*n的方阵,从方阵右上角开始以顺时针 ...

  6. c语言实验7字符串,C语言实验六(第七章二维数组字符串数组)

    C语言实验六(第七章二维数组字符串数组) 第 1 页 共 7 页第七章二维数组.字符串数组题[书面作业] 以书面作业形式上交,2010 年 11 月 1 日课堂交三道题的源程序1. 编写一个主函数:用 ...

  7. Python数据挖掘1:创建一位数组和二维数组,取最大最小值,切片

    ''' 来源:天善智能韦玮老师课堂笔记 1.numpy 可以高效处理数据.提供数组支持.很多模块都依赖他,比如pandas.scipy.matplotlib都依赖他,所以这个模块是基础. 2.pand ...

  8. VC++中从txt文本中读取数据并且存到二维数组中

    这几天因为在做作业,所以不仅会想到这一类有关的问题.现在我需要实现的是讲txt文件的数据读取出来并且存储到一个二维数组中.,首先为了对待什么样的矩阵我们都可以读取,我们就要设置一个动态的矩阵,这样当我 ...

  9. Python创建二维数组(关于list的一个小坑)

    0.目录 1.遇到的问题 2.创建二维数组的办法 3.1 直接创建法 3.2 列表生成式法 3.3 使用模块numpy创建 1.遇到的问题 今天写Python代码的时候遇到了一个大坑,差点就耽误我交作 ...

  10. php 数组与数组之间去重,PHP开发中一维数组与二维数组去重功能实现教程

    本篇文章讲述了PHP实现一维数组与二维数组去重功能示例.希望对在php学习和开发的同学有所帮助! 数组中重复项的去除 一维数组的重复项: 使用array_unique函数即可,使用实例如下: ? $a ...

最新文章

  1. Python ModuleNotFoundError: No module named ‘xlrd‘
  2. 东莞日报报道:比派科技(banana pi)致力于打通物联风创业生态链》
  3. 5G 在地空通信网络中的需求
  4. 笨办法学Python——学习笔记1
  5. Arcgis License的安装及破解
  6. qpushbutton里面的文字怎么换行_ipad读PDF必备,OCR局部识别文字并快速提取,免费的buff你要不要?...
  7. 索引 CREATE INDEX
  8. Dialog高仿Toast实现
  9. 中山大学本科偏微分方程试题
  10. 转载:常见的15种音频格式
  11. Linux下 文件或文件夹的复制(拷贝 cp)
  12. 031-JVM-合并写(write combining)
  13. Rank Scores(分数排序)
  14. 常见算法:c语言矩阵算法问题
  15. 【Java】全栈工程师
  16. Hiho303周 H国的身份证号码I
  17. Win CE5.0背光驱动
  18. solr直接对pdf、word等建索引
  19. 中国异丁酸酐(CAS+97-72-3)行业市场供需与战略研究报告
  20. 抖音八大推流机制是怎样的?鹰迪电子商务

热门文章

  1. Kelvin connection-开尔文连接
  2. Hibernate查询性能优化技巧
  3. 获取一个group by里面的总和或者聚合函数 思路杂乱 不要看
  4. MyOS(三):软盘读写
  5. 计算机产业、互联网造富的时代
  6. Matlab中Robotics toolbox的安装及使用
  7. 程序员转行做自媒体,抖音,快手原创作者,必备的免费视频素材网站
  8. https页面加载http资源的解决方法
  9. C语言中声明和定义详解
  10. WGCLOUD默认登录账号密码是什么