关于四则运算程序
package operation;
import java.util.Random;
import java.util.Scanner;
public class Operate {
/**
* 需求:
* 输入大的出题数量值
* 定制操作数的个数
* 定制是否有乘除法
* 定制是否有括号(随机加入)
* 定制数值范围(确定操作数的取值范围)
*/
/**
* 思路:
* 定义数量sum、个数count、乘除法Ysign、Nsign、是否有括号lsign、范围MAX、MIN
*/
/**
* 返回随机字符,根据是否有乘除
* @return
*/
static String sign(int yn) {
String ss="";
Random ran=new Random();
if(yn==2) {
int sign=ran.nextInt(2);
switch(sign){
case 0:ss+="+";break;
case 1:ss+="-";break;
//case 2:ss+="*";break;
//case 3:ss+="/";break;
}
}
else if(yn==1){
int sign=ran.nextInt(4);
switch(sign){
case 0:ss+="+";break;
case 1:ss+="-";break;
case 2:ss+="*";break;
case 3:ss+="/";break;
}
}
return ss;
}
/**
* 是否有括号
*/
static String[] Iskuohao(String[]array,int uu) {
return array;
}
/**
* 查重:
* 将最新的字符串和已保存的数组进行比较
* 输出重复字数
*/
static void Isrepeat(String[]array,int ss) {
int k=0;
for(int ii=0;ii<ss;ii++) {
if(!array[ss].equals(array[ii])) k++;
}
}
public static void main(String[] args) {
Random ran=new Random();
System.out.println("请输入出题数量:");
Scanner sc=new Scanner(System.in);
int sum=sc.nextInt();//题目数量
System.out.println("请输入操作数个数:");
int count=sc.nextInt();
System.out.println("请输入打印方式:");
int f=sc.nextInt();
int k=0;
/**
* 利用数组将指定个数的随机数保存,其中插入操作符号
*/
int []NUM=new int[count+10000];
System.out.println("是否有括号?1有、2无");
int lsign=sc.nextInt();
System.out.println("是否有乘除?1有、2无");
int IsSign=sc.nextInt();
System.out.println("请输入操作数范围(从小到大)");
int MIN=sc.nextInt();//输入最小值
int MAX=sc.nextInt();//输入最大值
String[]Equa=new String[sum+10000] ;//假使填入{“”},就会发生数组越界,只有一个位置
//定义括号出现位置与操作符数量的关系
/**
* 如果有两个操作符1+2+3=
* “(”有两个位置
* “)”有两个位置
* 同理1+2,“(”“)”都只有一个位置
* 所以括号出现的位置数量与操作符数量一致
*
* 操作符出现时,允许括号出现,但仅出现一次,左括号出现,右括号也必出现
* 定义一个判断数来规定
* “(”只出现在操作数前面;“)”只出现在操作数后面
*/
for(int i=0;i<sum;i++) {
int wc1=0;//保证只出现一对括号
int wc2=0;
int ww1=ran.nextInt(count-1);//出现“(”操作符数量的位置
//System.out.println("ww1的值:"+ww1);
//int ww2=ran.nextInt(count-1 );//出现“)”操作符数量的位置
//System.out.println("ww2的值:"+ww2);
//System.out.println("wc1"+ww1);
for(int j=0;j<count;j++) {
int random_n1=ran.nextInt(MAX-MIN+1)+MIN;//指定范围内的随机数
NUM[j]=random_n1;//保存了指定数量的操作数
}
/**
* 保存式子的字符串数组Equa[sum]
*/
for(int j=0;j<count;j++) {//count代表操作数个数
//实现操作数之间插入操作符
if(lsign==2) //不带括号
{
if(j==0){
Equa[i]="";
Equa[i]+=NUM[j]+"";
}
else if(j!=count) {
Equa[i]+=sign(IsSign)+NUM[j]+"";
}
}
/////////////////////////////////////////////1
else {//有括号
/**
* 操作数count为5时(操作符有四个)
* ww1出现的有效数字是0~3
* 若有效数字ww1是为3时
* 当j=0时,5+
* 当j=1时,5+4/
* 当j=2时,5+4/3-
* 当j=3时,5+4/3-8/
* 当j=4时,5+4/3-8/9
*/
//System.out.println("ww1"+ww1+"j"+j);
if(j==0) {
if(j==ww1) {//保证只有一对括号
Equa[i]="";
Equa[i]+="(";
wc1=2;//判断是否同时出现一对括号
Equa[i]+=NUM[j]+""+sign(IsSign);
//System.out.println("j为"+j+"ww1为"+ww1);
}
else {
//System.out.println("j为000000");
Equa[i]="";
Equa[i]+=NUM[j]+""+sign(IsSign);
}
}
else if(j!=count-1){
if(j==ww1) {//保证只有一对括号
//Equa[i]+="";
Equa[i]+="(";
wc1=1;//判断是否同时出现一对括号
Equa[i]+=NUM[j]+""+sign(IsSign);
//System.out.println("j为"+j+"ww1为"+ww1);
}
/*else if(wc1==1&&wc1!=wc2)
{
Equa[i]+=NUM[j];
if(j==count-1) {
Equa[i]+=")";wc2++;}
else {
Equa[i]+=")"+sign(IsSign);wc2++;}
}*/
else if(wc1!=2) {
Equa[i]+=NUM[j]+""+sign(IsSign);
}
else {
Equa[i]+=NUM[j]+""+")"+sign(IsSign);
}
}
else if(j==count-1)
{ if(wc1==1) {
Equa[i]+=NUM[j]+""+")";}
else {
Equa[i]+=NUM[j]+"";
}
}
}
}
Equa[i]+="=";
}
//最后输出=号
//else
//Isrepeat(Equa, sum);
for(int i=0;i<sum;i++) {
if(lsign==1)//有括号
{
System.out.print(Equa[i]+"\t\t");
k++;
if(k%f==0)System.out.println("");
}
else
{
System.out.print(Equa[i]+"\t");
k++;
if(k%f==0)System.out.println("");
}
}
}
}
=================================================================================================================
1、格式不够清晰,思路混乱
2、对于if else用的过于频繁
3、数组越界
4、学会了一些基础的数组下标运用的功能
本文作者:TranquilTimber
本文链接:https://www.cnblogs.com/gbrr/p/16738407.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步