软件工程个人作业02
二柱子,你真是太厉害了!
package 二柱四则; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Random; import java.util.Scanner; import java.util.Vector; public class Szys { static int gs;//此次出题每题运算个数 static int kh=0;//有无括号,默认没有 static int i=0,j=0;//循环出题i(N),j(gs) static int jsj;//每次出题加入数据 static String st1,str2;//运算数字 运算符 static Scanner sc=new Scanner(System.in); static Random ne=new Random(); static List list = new List(); //static Vector vector=new Vector(); static Vector<String> va=new Vector<String>();//一维元素 public static void main(String[] args) throws FileNotFoundException { System.out.println("用户您好,请对该次出题做出要求"); //基本要求 System.out.print("出题数目N(正整数):"); int N=sc.nextInt(); System.out.print("输入运算范围fw?(1~fw,正整数?):"); int fw=sc.nextInt(); System.out.print("是否有乘除cc(有1,无0):"); int cc=sc.nextInt(); System.out.print("是否有真分数zf(有1,无0):"); int zf=sc.nextInt(); System.out.println("是否要求减法无负数(是1,否0)"); int fs=sc.nextInt(); //分类选择 //整数 //chA 整数+对负数不作要求+加减 if(cc==0&&fs==0&&zf==0) { System.out.println("输入此次出题每题运算数个数gs(2<=gs<=10)"); gs=sc.nextInt(); if(gs>2) { System.out.println("是否要求括号(是1,否0)"); kh=sc.nextInt(); } chA(N,fw,gs,kh); } //chB 整数+对负数作要求+加减 //chC 整数+对负数不作要求+加减乘除+对余数不作要求 //chD 整数+对负数不作要求+加减乘除+对余数作要求 //chE 整数+对负数作要求+加减乘除+对余数作要求 //分数 /* cc=1 System.out.println("是否要求除法无余数(是1,否0)"); int ys=sc.nextInt(); */ /* zf=1 System.out.println("要求真分数个数(小于等于题目数N)"); int zfnn=sc.nextInt(); */ /* System.out.println("是否要求括号(是1,否0)"); int kh=sc.nextInt();个数>2才有括号 */ /* System.out.println("输入此次出题每题运算数个数gs(2<=gs<=10)"); int gs=sc.nextInt(); */ }//main public static void chA(int N,int fw,int gs,int kh) throws FileNotFoundException {//chA 整数+对负数不作要求+加减 //因为四则运算中缀表达式特点是:奇数个数与奇数个运算符交替进行。 for(i=0;i<N;i++) { String tt = "";//每道加入vector的题目 /* 因为根据用户选择,可能会出现括号 所以每道题必须以链表形式添加 */ //对于无括号则无需链表 //------出题-------- for(j=1;j<=2*gs;j++) { if(j==2*gs) tt+="="; else if(j%2!=0)//随机出数据 { jsj=ne.nextInt(fw+1); tt+=jsj+" ";//要加入各种类型的数据加入String 空格号是很重要的。 //list.insert(jsj); } else if(j%2==0&&j!=2*gs)//随机出符号 { char[] fh={'+','-'}; int ysfh=ne.nextInt(fh.length); char h=fh[ysfh]; tt+=h+" ";//只针对无括号,要改变,要顺便加入链表 //list.insert(h); } } //---------出完一题--------- /*for(int l=0;l<list.size;l++)//将出题加入vector数组以便打印 { tt+=list.head.next.data+" "; list.head=list.head.next; } */ if(kh==1)//有括号 { //要用链表了,链表元素是object类型,但是要怎么转换呢? } //---------查重操作--------- if(i == 0) va.add(tt); else if(i!=0){ for(int k = 0; k <i; k++) { if(va.get(k).equals(tt)) i--; else { va.add(tt); break; } }//for }//else //-----查重完毕----- }//出无括号N题完成 //---------打印选择方式-------- System.out.print("出题完成,请选择 1打印 0预览:"); int cho=sc.nextInt(); if (cho==1) { for(int pt=0; pt<va.size();pt++) { System.out.print(va.get(pt)+" "); if((pt+1)%5==0)System.out.println(" "); } }//打印 else if(cho==0) { System.out.println("默认地址 E://阿超//a.txt"); FileOutputStream fl=new FileOutputStream(new File("E://阿超//a.txt")); PrintStream p= new PrintStream(fl); for(int pt=0;pt<va.size();pt++) { p.print(va.get(pt)+" "); if((pt+1)%5==0) p.println(" "); } p.close(); }//预览 }//chA完成 }//class
只写了第一种情况,运行结果如下:
在以往的基础之上实现了多数运算,并整理了思路。