zoukankan      html  css  js  c++  java
  • 软件工程个人作业03

    设计思想:之前的算法是只进行算式的输出,不用进行运算,所以我把所有的算式和符号转化成了string类型,但是如果要进行判断打分,就要在int阶段进行计算。进行讨论之后,我们找到一个方法去解决长算式如何计算,首先要算乘除法,找到随机出来的运算符,如果是乘除,则优先运算,运算后把数存进新数组,然后进行加减计算。 

    import java.util.Random;
    import java.io.*;
    
    public class Yunsuan01 {//判断出题是否重复
        int chongfu(int numtishu,String result[],int i)
        {
            for(int j=0;j<i;j++)
            {
                    if(result[i] == result[i-j-1]);
                    i = i-1;
            }
            return i;
        }
        
        int weishu(int judgeweishu)//随机位数
        {
            int numsuiji = 0;
            Random ran = new Random();//初始化随机数
            if(judgeweishu == 0)
            {
                numsuiji = ran.nextInt(10);
            }
            else if(judgeweishu == 1)
            {
                numsuiji = ran.nextInt(100);
            }
            else if(judgeweishu == 2)
            {
                numsuiji = ran.nextInt(1000);
            }
            else if(judgeweishu == 3)
            {
                numsuiji = ran.nextInt(10000);
            }
            return numsuiji;
        }
        char fuhao(int judgechengchu)
        {
            char fuhao = ' ';
            Random ran = new Random();//初始化随机数
            int suijijiajian = ran.nextInt(2);
            int suijichengchu = ran.nextInt(4);
            if(judgechengchu == 0)
            {
                if(suijijiajian == 0)
                    fuhao = '+';
                if(suijijiajian == 1)
                    fuhao = '-';
            }
            if(judgechengchu == 1)
            {
                if(suijichengchu == 0)
                    fuhao = '+';
                if(suijichengchu == 1)
                    fuhao = '-';
                if(suijichengchu == 2)
                    fuhao = '*';
                if(suijichengchu == 3)
                    fuhao = '/';
            }
            return fuhao ;
        }
        void dayinfangshi(int judgefangshi,String last) throws FileNotFoundException
        {
            if(judgefangshi == 1)
            {
             FileOutputStream  fs = new FileOutputStream(new File("D:\四则运算.txt"));
             PrintStream p = new PrintStream(fs);
             p.println(last);
            }
             if(judgefangshi == 0)
                 System.out.println(last);
        }
        int getresult(int num[],char chars[],int numchangdu)
        {
            int result = num[0];
            /*int mark=0;
            for(int i=0 ;i< numchangdu-1;i++)//记录有多少个乘除
            {
                if(chars[i] == '*'||chars[i] == '/')
                {
                    mark += 1;
                }
            }
            for(int m=0;m<mark;m++)//有多少个乘除就进行多少次运算
            {
                for(int i=0 ;i< numchangdu-1;i++)//找到第一个乘或除(按符号个数循环)
                {
                    if(chars[i] == '*')
                    {
                        num[i] *= num[i+1]; 
                        for(int j=i;j<numchangdu-1-m;j++)//乘运算之后向前移动后面的数
                        {
                            num[j+1-m] = num[j+2-m];
                        }
                        for(int j=i;j<numchangdu-1-m;j++)
                        {
                            chars[j-m] = chars[j+1-m];
                        }
                        break;
                    }
                    if(chars[i] == '/')
                    {
                        num[i] /= num[i+1]; 
                        for(int j=i;j<numchangdu-1-m;j++)//除运算之后向前移动后面的数
                        {
                            num[j+1-m] = num[j+2-m];
                        }
                        for(int j=i;j<numchangdu-1-m;j++)
                        {
                            chars[j] = chars[j+1];
                        }
                        break;
                    }
                }
            }
            result = num[0];
            for(int m=0;m<numchangdu-mark;m++)
            {
                if(chars[m] == '+')
                    result += num[m+1];
                if(chars[m] == '-')
                    result -= num[m+1];
            }*/
            for(int i=0 ;i< numchangdu-1;i++)
            {
                if(chars[i] == '+')
                    result += num[i+1];
                if(chars[i] == '-')
                    result -= num[i+1];
            }
            return result;
        }
    }
    View Code
    import java.io.FileNotFoundException;
    import java.util.*;//引用util包
    import java.util.Random;
    public class Yunsuan {
    
        public static void main(String[] args) throws FileNotFoundException  {
            // TODO Auto-generated method stub
        
            int numtishu;
            int numchangdu;
            int judgezhengfen;
            int judgechengchu;
            int judgekuohao;
            int judgeyushu = 0;
            int judgeweishu = 0;
            int judgefangshi = 0;
            String last = new String();
            
            Scanner sca = new Scanner(System.in);
            Random ran = new Random();//初始化随机数
            Yunsuan01 y = new Yunsuan01(); 
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~判断类型~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~            
            while(true){
                System.out.println("真分数运算(1),整数运算(0):");
                judgezhengfen = sca.nextInt();
                if(judgezhengfen!=1 && judgezhengfen!=0)
                {
                    System.out.println("输入有误,请重新输入");
                }
                if(judgezhengfen == 0)
                {
                    while(true)
                    {
                        System.out.println("位数:四位数(3),三位数(2),两位数(1),一位数(0):");
                        judgeweishu = sca.nextInt();
                        if(judgeweishu!=1 && judgeweishu!=0 && judgeweishu!=2&&judgeweishu!=3)
                        {
                            System.out.println("输入有误,请重新输入");
                        }
                        else break;
                    }
                    break;
                }
                else break;
            }
            
            while(true){
                System.out.println("有乘除法(1),无乘除法(0)");
                judgechengchu = sca.nextInt();    
                if(judgechengchu!=1 && judgechengchu!=0)
                {
                    System.out.println("输入有误,请重新输入");
                }
                if(judgechengchu == 1)
                {
                    while(true)
                    {
                        System.out.println("除法有余数(1),无余数(0)");
                        judgeyushu = sca.nextInt();
                        if(judgeyushu!=1 && judgeyushu!=0)
                        {
                            System.out.println("输入有误,请重新输入");
                        }
                        else break;
                    }
                    break;
                } 
                else break;
            }
            
            while(true){
                System.out.println("有括号(1),无括号(0)");
                judgekuohao = sca.nextInt();    
                if(judgekuohao!=1 && judgekuohao!=0)
                {
                    System.out.println("输入有误,请重新输入");
                }
                else break;
            }            
                
                while(true)
                {
                    System.out.println("输入有几个数参与运算(2~10):");
                    numchangdu = sca.nextInt();//输入题的长度
                    if(numchangdu<2 || numchangdu>10)
                    {
                        System.out.println("输入有误,请重新");
                    }
                    else break;
                }
                
                System.out.println("输入题目的数量:");
                numtishu = sca.nextInt();//输入题数
                String result[] = new String[numtishu];    
                
                for(int i=0; i<numtishu;i++)
                {
                    result[i]="";
                }
                while(true){
                    System.out.println("打印方式:txt格式(1),控制台(0):");
                    judgefangshi = sca.nextInt();    
                    if(judgekuohao!=1 && judgekuohao!=0)
                    {
                        System.out.println("输入有误,请重新输入");
                    }
                    else break;
                }    
                
                
                
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~给出算式~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                if(judgezhengfen == 0  &&  judgekuohao == 0){
                //整数,无括号                            
                    for(int i=0; i<numtishu; i++)
                    {
                        int k = i+1;
                        int num[] = new int[numchangdu];
                        char chars[] = new char[numchangdu-1];
                        result[i] = result[i]+"["+k+"]";
    
                        for(int j=0;j<numchangdu;j++)
                        {
                            num[j] = y.weishu(judgeweishu);//按位数出随机数
                        }
                        for(int j=0;j<numchangdu-1;j++)
                        {
                            chars[j] = y.fuhao(judgechengchu);//按是否乘除出符号
                        }
                        for(int j=0;j<numchangdu-1;j++)
                        {
                            if(chars[j] == '-')//减法不出现负数
                            {
                                //System.out.println("~~~~~~~~~~
    "); //测试是否执行
                                if(num[j]<num[j+1])
                                {
                                    int temp = num[j];
                                    num[j] = num[j+1];
                                    num[j+1] = temp;                                 
                                }
                            }
                        }
                        if(judgekuohao == 1)
                        {
                            System.out.println("~~~~");//测验是否随机出数
                            int rankuohao;
                            for(int j=0;j<numchangdu-1;j++)
                            {
                                rankuohao = ran.nextInt(2);
                                System.out.println(rankuohao);//测验是否随机出数
                                if(rankuohao == 1){
                                    result[i] = result[i]+"("+num[j]+chars[j];
                                }
                                if(rankuohao == 0)
                                result[i] = result[i]+num[j]+chars[j];
                            }
                            result[i] += num[numchangdu-1];
                            
                            result[i] += "=";
                        }
                        if(judgekuohao == 0){
                            for(int j=0;j<numchangdu-1;j++)
                            {
                                result[i] = result[i]+num[j]+chars[j];
                            }
                            result[i] += num[numchangdu-1];
                            
                            result[i] += "= ";
                        }
                        System.out.println(result[i]);
                        int answer = sca.nextInt();
                        if(answer == y.getresult(num, chars, numchangdu))
                        {
                            System.out.println("√");
                        }
                        if(answer != y.getresult(num, chars, numchangdu))
                        {
                            System.out.println("×");
                        }
                    }
                    
                    /*for(int j = 0; j<numtishu;j++)
                    {
                        last = last + result[j];
                    }
                    y.dayinfangshi(judgefangshi, last);//最终输出*/ 
                    
                    
                    
                    
                }
                
                else if(judgezhengfen == 1) {
                    //整数,有乘除法,无括号,有余数
                    
                    }
                }
            
        }
    main

    结果:

    表格

    照片:

  • 相关阅读:
    删除字符串组中相同元素,并删除值为空的元素 (转载,笔记)
    获取操作系统语言
    .net 传递中文参数解决办法
    古怪问题:vs2003程序 在繁体平台下控件位置发生变化
    Godaddy邮箱C#发送邮件设置
    无法显示隐藏文件的解决方法
    虚拟机文件
    sql 2000 修复问题
    看QQ是否在线
    sql 知识摘录
  • 原文地址:https://www.cnblogs.com/xiaosongbiog/p/5323731.html
Copyright © 2011-2022 走看看