首页 > 代码库 > 软件工程个人作业02-2

软件工程个人作业02-2

老师对自动出题的系统又有了新的功能:

其中有一个要求是 是否有括号:最多可支持十个数参与计算

我只实现了这一部分的功能,还并未同其他的功能整合到一起,代码还需改进,但我的思路和实现的代码无太大问题,本周末我会将代码进行完善。

现在只提供实验思路和部分代码:

  实验思路:( 以1+(2+3*4)/5为例)

1.先实现正常的多项式运算,忽略括号的作用 1+2+3*4/5,按着运算符的优先级,先判断运算符是否为*或者/,先进行乘除运算,每次运算后重新储存运算式(例如第一次储存为:1+2+12/5),再判断运算符是否为+或者-,再进行加减运算,再储存运算式。

2.先记录括号的位置,在括号里进行运算的循环,按照正常的计算顺序,先计算乘除,再计算加减,计算为乘除后,重新储存运算式,储存为1+(2+12)/5,然后进行第三次运算,储存为1+(14)/5,当()在数字的左右时,跳出括号内的循环。跳出循环后重新进行普通的多项式运算。

 

过程概述为,算一次储存一次运算式:

1+(2+3*4)/5   —》 1+(2+12)/5   —》 1+14/5  —》 1+2 —》 3

 

下面是实现多项式加括号的计算实验代码:

package sum2;

import java.util.Scanner;

//由于先前的实验固定了数据的个数,然而根据第二次试验的要求需要重新进行修改
//所以决定重新建立一个新的项目
//时间:2017 3 8
//随风的叶子  
//加减乘除程序代码

public class sum2 {

    //记录运算符个数
    static int m;
    //建立动态数组
    static int[][]n;
    
    //结果设置成int型的
    static int[]S;
    //记录用算过程的数组
    static int[]s;
    
    //运算符的选择
    static String[]r1={"+","-","*","÷"};
    
    //运算符的存储
    static String[]R;
    
    //括号的存储
    static char[]r2={‘(‘,‘)‘};
    static char[]r3;
    
    public static void main(String[] args) {
        //随机生成数组
        
        
        int sum1=5; //式子的参数个数
        int sum2=10;//式子的个数
        
        n=new int[sum2][sum1];
        
        S=new int[sum2];
        s=new int[sum1];
        
        R=new String[sum1];
        
        r3=new char[sum1*2];
        
        for(int i=0;i<sum1*2;i++)
        {
            r3[i]=‘ ‘;
        }
        
        for(int i=0;i<sum2;i++)
        {
            for(int j=0;j<sum1;j++)
            {
                n[i][j]=(int)(1+Math.random()*100);            
            }
        }
        
        for(int i=0;i<sum2;i++)
        {
            int number=0;
            
            int num2=2 + 2*(int)(Math.random()*(sum2-6)/2);//2 4 6
            int num3=num2 +3 + 2*(int)(Math.random()*(sum2-2-num2)/2);//5 7 9
            
            r3[num2]=‘(‘;
            r3[num3]=‘)‘;
        
            int jishu=0;
            
            for(int j=0;j<sum1;j++)
            {
                int num=(int)(0 + Math.random()*4);
                
                R[j]=new String(r1[num]);
                
                
                System.out.print(r3[jishu]);
                jishu++;
                
                System.out.print(n[i][j]);
                
                System.out.print(r3[jishu]);
                jishu++;
                
                if(j<sum1-1)
                {
                     System.out.print(R[j]);
                }
                else
                System.out.print("=");    
            }
            
            
            
            //括号内的算法
            num2=num2/2;//左括号的位置
            num3=num3/2;//右括号的位置
            
            //num2=num3时 括号消掉
            while(num2<num3)
            {
                m=sum1-1;
                
                for(int k=num2;k<num3;k++)
                {
                    if(R[k].equals("*"))
                    {
                        number=n[i][k]*n[i][k+1];
                        n[i][k]=number;
                        
                        //System.out.print(number+"  ");
                        
                        for(int j1=k;j1<m-1;j1++)
                        {
                            R[j1]=R[j1+1];
                            n[i][j1+1]=n[i][j1+2];
                        }
                        
                        R[m-1]="+";
                        
                        m--;
                        
                        k--;
                        
                        num3--;
                        
                    }
                    
                    else if(R[k].equals("÷"))
                    {
                        number=n[i][k]/n[i][k+1];
                        
                        n[i][k]=number;
                        
                        //System.out.print(number+"  ");
                        
                        for(int j1=k;j1<m-1;j1++)
                        {
                            R[j1]=R[j1+1];
                            n[i][j1+1]=n[i][j1+2];
                        }
                        
                        R[m-1]="+";
                        
                        m--;
                        
                        k--;
                        
                        num3--;
                        
                    }
                }
                
                //括号的加减法
                for(int k=num2;k<num3;k++)
                {
                    if(R[k].equals("+"))
                    {
                        number=n[i][k]+n[i][k+1];
                        
                        n[i][k]=number;
                        
                        //System.out.print(number+"  ");
                        
                        for(int j1=k;j1<m-1;j1++)
                        {
                            R[j1]=R[j1+1];
                            n[i][j1+1]=n[i][j1+2];
                        }
                        
                        R[m-1]="+";
                        
                        m--;
                        
                        k--;
                        
                        num3--;
                        
                    }
                    else if(R[k].equals("-"))
                    {
                        number=n[i][k]-n[i][k+1];
                        n[i][k]=number;
                        
                        //System.out.print(number+"  ");
                        
                        for(int j1=k;j1<m-1;j1++)
                        {
                            R[j1]=R[j1+1];
                            n[i][j1+1]=n[i][j1+2];
                        }
                        
                        R[m-1]="+";
                        
                        m--;
                        
                        k--;
                        
                        num3--;
                        
                    }
                    //System.out.print(number+"  ");
                }
                
            }
            
            
            //乘除法的运算
            
            
            for(int k=0;k<sum1-1;k++)
            {
                //如果加入乘法
                //进行插入
                
                if(R[k].equals("*"))
                {
                    number=n[i][k]*n[i][k+1];
                    n[i][k]=number;
                    
                    //System.out.print(number+"  ");
                    
                    for(int j1=k;j1<m-1;j1++)
                    {
                        R[j1]=R[j1+1];
                        n[i][j1+1]=n[i][j1+2];
                    }
                    
                    R[m-1]="+";
                    
                    m--;
                    
                    k--;
                }
                
                else if(R[k].equals("÷"))
                {
                    number=n[i][k]/n[i][k+1];
                    n[i][k]=number;
                    
                    //System.out.print(number+"  ");
                    
                    for(int j1=k;j1<m-1;j1++)
                    {
                        R[j1]=R[j1+1];
                        n[i][j1+1]=n[i][j1+2];
                    }
                    
                    R[m-1]="+";
                    
                    m--;
                    
                    k--;
                }
                
            }
            
            //加减法
            for(int k=0;k<m;k++)
            {
                if(R[k].equals("+"))
                {
                    number=n[i][k]+n[i][k+1];
                    n[i][k+1]=number;
                }
                else if(R[k].equals("-"))
                {
                    number=n[i][k]-n[i][k+1];
                    n[i][k+1]=number;
                }
                //System.out.print(number+"  ");
            }
            System.out.print(number);
            
            System.out.println();
            
            //清空括号
            for(int i1=0;i1<sum1*2;i1++)
            {
                r3[i1]=‘ ‘;
            }
            //计算结果
        }

    }

}

实验结果截图:

技术分享

实验总结:

完成了多项式任意加减乘除加括号的试验任务,但是完成的过程中进行了长时间的思路的总结和结果测试,现在的程序结果代码还有各种瑕疵(bug),而且暂时没有加上总体的实验要求,只实现了部分的功能,还需要继续改进,唯一的作用是提供一个思路。还有另外一种栈的储存方式,认为这个思路不好的还可以考虑用栈的方式进行实验代码的构写。

 

软件工程个人作业02-2