zoukankan      html  css  js  c++  java
  • 四则运算3

    1.设计思路

      1) 在原有的程序的基础上加上判断运算是否正确的函数;

        (1)因为输出的算式中涉及到分数的运算,所以要写一个分数运算的类,进行调用;

         (2)在判断的过程中首先先判断为哪种运算,然后判断结果;

        (3) 在判断的函数中要设置两个函数,一个为输出的算式,另一个为输入的结果;

         (4)在原有的基础上,在主程序中将算式设置为输出一个,然后输入结果判断完成后再输出另一个算式;

      2)分数计算的函数,

          (1)分数计算首先将分子分母从算式中截出来,进行分子分母的运算;

           (2)约分计算:取分子分母的最大公约数,除以最大公约数,得到的分子分母就是约分后的分子分母;

    2.程序代码:

    package 四则运算2;
    import java.util.Random;
    import java.util.Scanner;
    public class FourOperation {
        public static void main(String args[])
        {
            Yunsuan a=new Yunsuan();
            @SuppressWarnings("resource")
            Scanner scanner=new Scanner(System.in);
            String temp;
    /*.................................................................................................*/
            System.out.println("请选择计算数量:");
            int n=scanner.nextInt();                                           //输入输出算式的个数
    /*...................................................................................................*/        
                System.out.println("请选择以下条件:是否需要乘除法 ");
                System.out.println("请输入:y1/n1");
                String i1=scanner.next();                                        //输入是否需要乘法
                
    /*....................................................................................................*/            
                System.out.println("选择数值范围:1.  0-100,  2.  0-200");
                int i2=scanner.nextInt();
                if(i2==1)
                {
                    i2=100;
                }                                   /*选择数值范围,其中i2是为了后边isOrNotMultiplicationAndDivision(4,i2,i3,i4)
                                                                                          调用,进行取范围运算*/
                if(i2==2)                                                              
                {
                    i2=200;
                }
    /*.....................................................................................................*/            
                System.out.println("是否选择加减是有负数:y2/n2");
                String i3=scanner.next();                         //选择是否加减有负数
    /*.......................................................................................................*/            
                System.out.println("是否选择除法有余数:y3/n3");
                String i4=scanner.next();                         //选择除法是否有余数
                /*............................................................................................*/
                if(i1.equals("y1"))
                {
                    for(int i=0;i<n;i++)
                       {
                        temp=a.isOrNotMultiplicationAndDivision(4,i2,i3,i4);
                        if(temp=="")
                        {
                            n=n+1;
                        }
                        else
                        {
                            
                             System.out.println(temp);
                                String result=scanner.next();
                                a.check(temp, result);
                        }
                       }
                }
                if(i1.equals("n1"))
                {
                    for(int i=0;i<n;i++)
                    {
                        temp=a.isOrNotMultiplicationAndDivision(2,i2,i3,i4);
                        if(temp=="")
                        {
                            n=n+1;                                                     //求算式的运算
                        }
                        else
                        {
                            System.out.println(temp);
                            String result=scanner.next();
                            a.check(temp, result);
                        }
                    }
                }
             
            
        }
    }/*......................................................................................................*/
    
    class Yunsuan{
        private String firstNumber;
        private String secondNumber;
         private String number;
         char fuhao[]={'+','-','*','/'};
         private fenshu fen=new fenshu();
         public String randomNumber(int i)//求随机数的函数
         {
              Random random=new Random();
               int temp=Math.abs(random.nextInt()%2);
                if(temp==1)
                {
                     number="("+String.valueOf(Math.abs(random.nextInt()%i))+"/"+String.valueOf(Math.abs(random.nextInt()%i)+")");
                }
                else
                {
                    int f=random.nextInt();
                    number=String.valueOf(Math.abs(f%i));
                }
                return number;
         }
         public String addtion(int i,String s)//求加法的函数
         {
             firstNumber=randomNumber(i);
             secondNumber=randomNumber(i);
             double firstNumberToInteger = 0.0 ;
             double secondNumberToInteger = 0.0;
             if(firstNumber.contains("/"))//判断是否为分数,如果是要进行计算成小数便于后边判断是否为负数
             {
                String firstNumberToInteger1=firstNumber.substring(1, firstNumber.indexOf("/"));
                String firstNumberToInteger2=firstNumber.substring(firstNumber.indexOf("/")+1,firstNumber.length()-1);
                 firstNumberToInteger=(Double.parseDouble(firstNumberToInteger1))/(Double.parseDouble(firstNumberToInteger2));
                 firstNumber="("+fen.yuefen(firstNumber)+")";
             }
             else
             {
                 firstNumberToInteger=Double.parseDouble(firstNumber);
                 
             }
             if(secondNumber.contains("/"))//同上
             {
                String secondNumberToInteger1=secondNumber.substring(1, secondNumber.indexOf("/"));
                String secondNumberToInteger2=secondNumber.substring(secondNumber.indexOf("/")+1,secondNumber.length()-1);
                secondNumberToInteger=(Double.parseDouble(secondNumberToInteger1))/(Double.parseDouble(secondNumberToInteger2));
                secondNumber="("+fen.yuefen(secondNumber)+")";
             }
             else
             {
                 secondNumberToInteger=Double.parseDouble(secondNumber);
             }
             if(s.equals("y2"))
             {
                 return firstNumber+"+"+secondNumber+"=";
             }
             if(s.equals("n2"))
             {
                 double n=firstNumberToInteger+secondNumberToInteger;
                 if(n<0)
                 {
                     return "";
                 }
                 else
                 {
                     return firstNumber+"+"+secondNumber+"=";
                 }
             }
             return "";
         }
         public String subtraction(int i,String s)//求减法的函数
         {
             firstNumber=randomNumber(i);
             secondNumber=randomNumber(i);
             firstNumber=randomNumber(i);
             secondNumber=randomNumber(i);
             double firstNumberToInteger = 0.0 ;
             double secondNumberToInteger = 0.0;
             if(firstNumber.contains("/"))//同加法
             {
                String firstNumberToInteger1=firstNumber.substring(1, firstNumber.indexOf("/"));
                String firstNumberToInteger2=firstNumber.substring(firstNumber.indexOf("/")+1,firstNumber.length()-1);
                 firstNumberToInteger=(Double.parseDouble(firstNumberToInteger1))/(Double.parseDouble(firstNumberToInteger2));
                 firstNumber="("+fen.yuefen(firstNumber)+")";
             }
             else
             {
                 firstNumberToInteger=Double.parseDouble(firstNumber);
             }
             if(secondNumber.contains("/"))//同加法
             {
                String secondNumberToInteger1=secondNumber.substring(1, secondNumber.indexOf("/"));
                String secondNumberToInteger2=secondNumber.substring(secondNumber.indexOf("/")+1,secondNumber.length()-1);
                secondNumberToInteger=(Double.parseDouble(secondNumberToInteger1))/(Double.parseDouble(secondNumberToInteger2));
                secondNumber="("+fen.yuefen(secondNumber)+")";
             }
             else
             {
                 secondNumberToInteger=Double.parseDouble(secondNumber);
             }
             if(s.equals("y2"))
             {
                 return firstNumber+"-"+secondNumber+"=";
             }
             if(s.equals("n2"))
             {
                 double n=firstNumberToInteger-secondNumberToInteger;
                 if(n<0)
                 {
                     return "";
                 }
                 else
                 {
                     return firstNumber+"-"+secondNumber+"=";
                 }
             }
             return "";
         }
         public String multiplication(int i)//求乘法的函数
         {
             firstNumber=randomNumber(i);
             secondNumber=randomNumber(i);
             if(firstNumber.contains("/"))
             {
                 firstNumber="("+fen.yuefen(firstNumber)+")";
            }
             if(secondNumber.contains("/"))
             {
                 secondNumber="("+fen.yuefen(secondNumber)+")";
             }
             return firstNumber+"*"+secondNumber+"=";
         }
         public String division(int i,String s)//求除法的函数
         {
             firstNumber=randomNumber(i);
             secondNumber=randomNumber(i);
             if(firstNumber.contains("/"))
             {
                 firstNumber="("+fen.yuefen(firstNumber)+")";
            }
             if(secondNumber.contains("/"))
             {
                 secondNumber="("+fen.yuefen(secondNumber)+")";
             }
             if(s=="y3")
             {
                 return firstNumber+"/"+secondNumber+"=";
             }
             if(s=="n3")
             {
                 if(firstNumber.contains("/")||secondNumber.contains("/"))
                 {
                     return firstNumber+"/"+secondNumber+"=";
                 }
                 else
                 {
                     if((Integer.parseInt(firstNumber))%(Integer.parseInt(secondNumber))==0)
                     {
                         return firstNumber+"/"+secondNumber+"=";
                     }
                     else
                     {
                         return "";
                     }
                 }
             }
             return "";
         }
         public String isOrNotMultiplicationAndDivision(int i,int j,String s1,String s2)//进行运算的函数
         {
             Yunsuan b=new Yunsuan();
             String str = null;
             Random random=new Random();
             int k=random.nextInt();
             int demp=Math.abs(k%i);
             switch(fuhao[demp])
             {
               case '+':
              {
                  str=b.addtion(j,s1);
              }break;
              case '-':
              {
                 str=b.subtraction(j,s1);
              }break;
              case '*':
              {
                 str=b.multiplication(j);
              }break;
              case '/':
              {
                  str=b.division(j,s2);
              }
             }
             return str;
         }
    
        public void check(String s,String input)//判断正确的函数
         {
             fenshu fen=new fenshu();
             int time1=0,time2=0;
            char cha[]=s.toCharArray();
            for(int i=0;i<cha.length;i++)
            {
                if(cha[i]=='/')
                {
                    time1++;
                }
                if(cha[i]=='(')
                {
                    time2++;
                }
            }
             if(s.contains("+"))//判断加法计算是否正确
             {
                String oneNumber=s.substring(0, s.indexOf("+"));
                String twoNumber=s.substring(s.indexOf("+")+1,s.length()-1);
                if(oneNumber.contains("/"))
                {
                }
                else
                {
                    oneNumber="("+oneNumber+"/1)";
                }
                if(twoNumber.contains("/"))
                {}
                else
                {
                    twoNumber="("+twoNumber+"/1)";
                }
                if(fen.yuefen(fen.jiafa(oneNumber, twoNumber)).equals(input))
                {
                     System.out.println("结果正确!");
                }
                else
                {
                    System.out.println("结果错误!");
                }
             }
             if(s.contains("-"))//判断减法计算是否正确
             {
                    String oneNumber=s.substring(0, s.indexOf("-"));
                    String twoNumber=s.substring(s.indexOf("-")+1,s.length()-1);
                    if(oneNumber.contains("/"))
                    {
                    }
                    else
                    {
                        oneNumber="("+oneNumber+"/1)";
                    }
                    if(twoNumber.contains("/"))
                    {}
                    else
                    {
                        twoNumber="("+twoNumber+"/1)";
                    }
                    if(fen.yuefen(fen.jianfa(oneNumber, twoNumber)).equals(input ))
                    {
                         System.out.println("结果正确!");
                    }
                    else
                    {
                        System.out.println("结果错误!");
                    }
             }
             if(s.contains("*"))//判断乘法计算是否正确
             {
                    String oneNumber=s.substring(0, s.indexOf("*"));
                    String twoNumber=s.substring(s.indexOf("*")+1,s.length()-1);
                    
                    if(oneNumber.contains("/"))
                    {
                    }
                    else
                    {
                        oneNumber="("+oneNumber+"/1)";
                    }
                    if(twoNumber.contains("/"))
                    {}
                    else
                    {
                        twoNumber="("+twoNumber+"/1)";
                    }
                    if(fen.yuefen(fen.chengfa(oneNumber, twoNumber)).equals(input))
                    {
                         System.out.println("结果正确!");
                    }
                    else
                    {
                        System.out.println("结果错误!");
                    }
             }
            if(time1>time2)//判断除法计算是否正确
            {
                char ch[]=s.toCharArray();
                int time=0;
                for(int i=0;i<s.length();i++)
                {
                    if(ch[i]=='/')
                    {
                        time++;
                    }
                    if(time==2)
                    {
                          String oneNumber=s.substring(0, i);
                            String twoNumber=s.substring(i+1,s.length()-1);
                            if(oneNumber.contains("/"))
                            {
                            }
                            else
                            {
                                oneNumber="("+oneNumber+"/1)";
                            }
                            if(twoNumber.contains("/"))
                            {}
                            else
                            {
                                twoNumber="("+twoNumber+"/1)";
                            }
                            if(fen.yuefen(fen.chufa(oneNumber, twoNumber)).equals(input))
                            {
                                 System.out.println("结果正确!");
                            }
                            else
                            {
                                System.out.println("结果错误!");
                            }
                    }break;
                }        
            }
         }
    }
    class fenshu//分数计算的类
    {
        public String yuefen(String one)//分数的约分
        {
            int oneNumber1=stringtoInteger1(one);
            int oneNumber2=stringtoInteger2(one);
            int temp;
            if(oneNumber1>=oneNumber2)
            {
                temp=oneNumber2;
            }
            else
            {
                
                temp=oneNumber1;
            }
            for(int i=2;i<=temp;i++)
            {
                if(oneNumber1%i==0&&oneNumber2%i==0)
                {
                    oneNumber1=oneNumber1/i;
                    oneNumber2=oneNumber2/i;
                    temp=temp/i;
                    i=1;
                }
            }
            if(oneNumber2==1)
            {
                return String.valueOf(oneNumber1);
            }
            else
            {
               return (String.valueOf(oneNumber1)+"/"+String.valueOf(oneNumber2));
            }
        }
        public String jiafa(String one,String two)//分数加法计算
        {
            int fenzi,fenmu;
            int oneNumber1=stringtoInteger1(one);
            int oneNumber2=stringtoInteger2(one);
            int twoNumber1=stringtoInteger1(two);
            int twoNumber2=stringtoInteger2(two);
            if(oneNumber2==twoNumber2)
            {
                fenzi=oneNumber1+twoNumber1;
                fenmu=oneNumber2;
            }
            else
            {
                fenmu=oneNumber2*twoNumber2;
                fenzi=oneNumber1*twoNumber2+oneNumber2*twoNumber1;
            }
            return (String.valueOf(fenzi)+"/"+String.valueOf(fenmu));
        }
        public String jianfa(String one,String two)//分数减法计算
        {
            int fenzi,fenmu;
            int oneNumber1=stringtoInteger1(one);
            int oneNumber2=stringtoInteger2(one);
            int twoNumber1=stringtoInteger1(two);
            int twoNumber2=stringtoInteger2(two);
            if(oneNumber2==twoNumber2)
            {
                fenzi=oneNumber1-twoNumber1;
                fenmu=oneNumber2;
            }
            else
            {
                fenmu=oneNumber2*twoNumber2;
                fenzi=oneNumber1*twoNumber2-oneNumber2*twoNumber1;
            }
            return (String.valueOf(fenzi)+"/"+String.valueOf(fenmu));
        }
        public String chengfa(String one,String two)//分数的乘法计算
        {
            int fenzi,fenmu;
            int oneNumber1=stringtoInteger1(one);
            int oneNumber2=stringtoInteger2(one);
            int twoNumber1=stringtoInteger1(two);
            int twoNumber2=stringtoInteger2(two);
            fenzi=oneNumber1*twoNumber1;
            fenmu=oneNumber2*twoNumber2;
            return (String.valueOf(fenzi)+"/"+String.valueOf(fenmu));
        }
        public String chufa(String one,String two)//分数的除法计算
        {
            int fenzi,fenmu;
            int oneNumber1=stringtoInteger1(one);
            int oneNumber2=stringtoInteger2(one);
            int twoNumber1=stringtoInteger1(two);
            int twoNumber2=stringtoInteger2(two);
            fenzi=oneNumber1*twoNumber2;
            fenmu=oneNumber2*twoNumber1;
            return (String.valueOf(fenzi)+"/"+String.valueOf(fenmu));
        }
        public int stringtoInteger1(String s)//数与字符串转换
        {
            if(s.contains("("))
            {}
            else
            {
                s="("+s+")";
            }
            String oneNumberToInteger1=s.substring(1, s.indexOf("/"));
            int oneNumber1=Integer.parseInt(oneNumberToInteger1);
            return oneNumber1;
        }
        public int stringtoInteger2(String s)
        {
            if(s.contains("("))
            {}
            else
            {
                s="("+s+")";
            }
            String oneNumberToInteger2=s.substring(s.indexOf("/")+1,s.length()-1);
             int oneNumber2=Integer.parseInt(oneNumberToInteger2);
             return oneNumber2;
        }
    }

    3.运行结果截图

    4

    .

  • 相关阅读:
    H5页面开发的touchmove事件
    css奇技淫巧—border-radius
    css奇技淫巧—box-shadow与outline绘制多重边框效果
    移动前端自适应解决方案和比较
    rem字体在rem盒子里面不一样,或者不同的行解决
    rem 回家测试
    js中函数提升及var变量提示
    盒子模型的百分比是根据什么来的
    $(function(){})返回值$(document)
    开发过程中错误总结
  • 原文地址:https://www.cnblogs.com/wanggang-java/p/5322998.html
Copyright © 2011-2022 走看看