四则运算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

.

 

posted @ 2016-03-26 15:12  天中之云  阅读(153)  评论(0编辑  收藏  举报