二柱子四则运算算法

要求随机生成指定数量的四则运算题目,同时可以控制操作数的个数、控制操作数的生成范围、控制是否生成乘除法、控制是否加入括号。

源代码如下:

package pers.yan.classTest;
import java.util.Random;
import java.util.Scanner;

public class ClassTest 
{
    public static void main(String[] args)
    {
        ClassTest A = new ClassTest();
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入生成四则运算题目的个数:");
        int iControl = sc.nextInt();            //iControl用于控制生成题目总数
        System.out.println("请输入操作数的个数:");
        int iControl2 = sc.nextInt();            //iControl2用于控制生成操作数的个数
        System.out.println("请输入操作数的生成范围:");
        int iField = sc.nextInt();                //iField用于控制操作数的生成范围
        System.out.println("请输入是否有乘除法(有:1;没有:0)");
        int iWay = sc.nextInt();                //iWay用于控制是否有乘除法
        System.out.println("请输入是否添加括号(添加:1;不添加:0)");
        int iChoose = sc.nextInt();                //iChoose用于判断是否添加括号
        if(iControl < 1 || iControl2 < 2 || iField < 0 || (iWay != 1 && iWay != 0) || (iChoose != 1 && iChoose != 0))
        {
            System.out.println("输入错误,请重新输入!");
            return;
        }
        else            
        {
            A.jisuan(iControl,iWay,iControl2,iField,iChoose);
        }
    }
    public void jisuan(int iControl,int iWay,int iControl2,int iField,int iChoose)
    {
        Random random = new Random();
        int[] str = new int[iControl+10000];
        int[] arrNum = new int[iControl2*2-1];
        int Flag = 0;
        for(int j = 0;j < iControl - Flag;j++)
        {
            boolean test = true;
            
            //int iNumc = random.nextInt(iControl2 - 1);    //控制前括号输出
            //int iNumd = random.nextInt(iControl2 - iNumc - 1) + iNumc + 1;    //控制后括号输出
            int iNumc = random.nextInt(iControl2 - 1);
            int iNumd = random.nextInt(iControl2 - iNumc) + iNumc + 1;
            
            for(int i = 0;i < iControl2*2-1 ;i++)
            {
                arrNum[i] = random.nextInt(iField);
            }
            for(int t = 0; t < iControl2;t++) 
            { 
                str[j] += arrNum[t*2]*t;
            }
             
            for(int k = 0; k < j ;k++)
            {
                if(str[k] == str[j])
                {
                    iControl++;
                    Flag++;
                    test = false;
                    break;
                }
            }
            if(test)
            {
                for(int t = 0;t < iControl2 * 2 - 1 ;t++)
                {
                    if(iChoose == 1)
                    {
                        if( 2*iNumc == t)
                            System.out.print("(");
                        if(t%2 == 0 && t!= iControl2*2-2)
                        {    
                            System.out.print(arrNum[t] + " ");
                            if( 2*iNumd - 2 == t)        //2*iNumd - 1 == t
                                System.out.print(")");
                        }
                        else if(t == iControl2*2-2)
                        {
                            System.out.print(arrNum[t]);
                            if( 2*iNumd - 2 == t)
                                System.out.print(")");
                            System.out.println(" =");
                        }
                        else if(t % 2 == 1)
                        {
                            if(iWay == 1)
                            {
                                if(arrNum[t]%4 == 1)
                                {
                                    System.out.print("+ ");
                                }
                                else if(arrNum[t]%4 == 2)
                                {
                                    System.out.print("- ");
                                }
                                else if(arrNum[t]%4 == 3)
                                {
                                    System.out.print("* ");
                                }    
                                else if(arrNum[t]%4 == 0)
                                {
                                    System.out.print("/ ");
                                }
                            }
                            else if(iWay == 0)
                            {
                                if(arrNum[t]%2 == 1)
                                {
                                    System.out.print("+ ");
                                }
                                else if(arrNum[t]%2 == 0)
                                {
                                    System.out.print("- ");
                                }
                            }
                        }
                    }
                    else
                    {
                        if(t%2 == 0 && t!= iControl2*2-2)
                        {    
                            System.out.print(arrNum[t] + " ");
                        }
                        else if(t == iControl2*2-2)
                        {
                            System.out.println(arrNum[t] + " =");
                            if( 2*iNumd - 1 == t)
                                System.out.print(")");
                        }
                        else if(t % 2 == 1)
                        {
                            if(iWay == 1)
                            {
                                if(arrNum[t]%4 == 1)
                                {
                                    System.out.print("+ ");
                                }
                                else if(arrNum[t]%4 == 2)
                                {
                                    System.out.print("- ");
                                }
                                else if(arrNum[t]%4 == 3)
                                {
                                    System.out.print("* ");
                                }    
                                else if(arrNum[t]%4 == 0)
                                {
                                    System.out.print("/ ");
                                }
                            }
                            else if(iWay == 0)
                            {
                                if(arrNum[t]%2 == 1)
                                {
                                    System.out.print("+ ");
                                }
                                else if(arrNum[t]%2 == 0)
                                {
                                    System.out.print("- ");
                                }
                            }
                        }
                    }
                }
            }    
        }
    }
}

目前存在的问题:

(1)代码可读性和复用性较差,当时写的时候一层层地写,就一层层地向里嵌套for循环,导致函数整体是在一个for循环内完成。虽然逻辑清晰,但是导致代码的可读性和复用性很差,在后续的代码编写过程中还要注意优化这方面的问题;

(2)关于是否输出括号那方面的问题,依然是有些不太明白,在同学的帮助下误打误撞地成功实现了输出,但是仍然没有完全理解,后续仍然需要深化加强。

posted @ 2021-09-19 20:32  闫闫不是那个严  阅读(80)  评论(0编辑  收藏  举报