软件工程个人作业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

 

 

 

 

只写了第一种情况,运行结果如下:

在以往的基础之上实现了多数运算,并整理了思路。

posted @ 2017-03-10 19:04  陶雨洁  阅读(182)  评论(1编辑  收藏  举报