课堂结队作业:二维数组(2)
结队成员:陈欣容,孙奇文
一、要求:
四则运算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)相关推荐
- 软件工程概论课堂作业二维数组
结对作业 结对人员:曹婷婷,王凯路 设计思想:先输入一个二维数组,通过遍历二维数组,找到一个正数,确定它的下标,判断是否联通通过判断二维数组的下标假设找到一个正数,它的下标为i和j,如果找到的下一个数 ...
- 【c语言作业-二维数组】编写程序,求一个给定的n阶方阵的鞍点。
[问题描述] 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点. [输入形式] 输入第一行给出一个正整数n(1≤ ...
- 作业九 二维数组和字符数组的应用
知识点: (1)二维数组的定义形式为: 类型名 数组名 [行长度] [列长度]; (2)引用二维数组的元素要制定两个下标,即行下标和列下标,形式为: 数组名 [行下标] [列下标] (3)行下标的合理 ...
- 课堂练习:返回一个二维数组中最大子数组的和
1.题目: 返回一个二维数组中最大子数组的和. 2.要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子 ...
- c语言编程实现二维数组的蛇形矩阵,蛇形矩阵 - 作业部落 Cmd Markdown 编辑阅读器...
蛇形矩阵 C-study-code Erin最近学习了数组,她想通过数组实现一个蛇形方阵的打印,你可以帮她实现这个程序吗? input:整数n(2 output:n*n的方阵,从方阵右上角开始以顺时针 ...
- c语言实验7字符串,C语言实验六(第七章二维数组字符串数组)
C语言实验六(第七章二维数组字符串数组) 第 1 页 共 7 页第七章二维数组.字符串数组题[书面作业] 以书面作业形式上交,2010 年 11 月 1 日课堂交三道题的源程序1. 编写一个主函数:用 ...
- Python数据挖掘1:创建一位数组和二维数组,取最大最小值,切片
''' 来源:天善智能韦玮老师课堂笔记 1.numpy 可以高效处理数据.提供数组支持.很多模块都依赖他,比如pandas.scipy.matplotlib都依赖他,所以这个模块是基础. 2.pand ...
- VC++中从txt文本中读取数据并且存到二维数组中
这几天因为在做作业,所以不仅会想到这一类有关的问题.现在我需要实现的是讲txt文件的数据读取出来并且存储到一个二维数组中.,首先为了对待什么样的矩阵我们都可以读取,我们就要设置一个动态的矩阵,这样当我 ...
- Python创建二维数组(关于list的一个小坑)
0.目录 1.遇到的问题 2.创建二维数组的办法 3.1 直接创建法 3.2 列表生成式法 3.3 使用模块numpy创建 1.遇到的问题 今天写Python代码的时候遇到了一个大坑,差点就耽误我交作 ...
- php 数组与数组之间去重,PHP开发中一维数组与二维数组去重功能实现教程
本篇文章讲述了PHP实现一维数组与二维数组去重功能示例.希望对在php学习和开发的同学有所帮助! 数组中重复项的去除 一维数组的重复项: 使用array_unique函数即可,使用实例如下: ? $a ...
最新文章
- Python ModuleNotFoundError: No module named ‘xlrd‘
- 东莞日报报道:比派科技(banana pi)致力于打通物联风创业生态链》
- 5G 在地空通信网络中的需求
- 笨办法学Python——学习笔记1
- Arcgis License的安装及破解
- qpushbutton里面的文字怎么换行_ipad读PDF必备,OCR局部识别文字并快速提取,免费的buff你要不要?...
- 索引 CREATE INDEX
- Dialog高仿Toast实现
- 中山大学本科偏微分方程试题
- 转载:常见的15种音频格式
- Linux下 文件或文件夹的复制(拷贝 cp)
- 031-JVM-合并写(write combining)
- Rank Scores(分数排序)
- 常见算法:c语言矩阵算法问题
- 【Java】全栈工程师
- Hiho303周 H国的身份证号码I
- Win CE5.0背光驱动
- solr直接对pdf、word等建索引
- 中国异丁酸酐(CAS+97-72-3)行业市场供需与战略研究报告
- 抖音八大推流机制是怎样的?鹰迪电子商务