作業5.2 5.3

29663 ワード

パートナーのブログアドレス:http://www.cnblogs.com/fitfit/
今回の作業では設定演算子の個数を追加して加減乗除計算を行う機能とプログラム中のいくつかの異常を処理しました
1.コード:
次の計算機能のクラスを変更します.
package fiv;

public class calc {

    int na[]=new int[5];

    String nc[]=new String[5];

    int ncn=0,nm;

    int re=0;

    calc(){

        

    }

    calc(int[][] a,String[][] c,int m,int cn){

        for(int i=0;i<cn+1;i++)

            na[i]=a[m][i];

        for(int i=0;i<cn;i++)

            nc[i]=c[m][i];

        ncn=cn;

        nm=m;

    }

void setting(){

        int rn=0,r=0;

        int[] b=new int[5];

        String[] cc=new String[5];

        re=0;

        for(int i=0;i<ncn;i++){

            if(rn==0){

                if(nc[i]=="*"||nc[i]=="/"){

                    if(nc[i]=="*"){

                        b[r]=na[i]*na[i+1];

                        rn=1;

                    }

                    if(nc[i]=="/"){

                        b[r]=na[i]/na[i+1];

                        rn=1;

                    }

                }

                else{

                    if(nc[i]=="+"){

                        b[r]=na[i];

                        cc[r]="+";

                        if(ncn==i+1)

                            b[r+1]=na[i+1];

                        r++;

                        }

                    if(nc[i]=="-"){

                        b[r]=na[i];

                        cc[r]="-";

                        if(ncn==i+1)

                            b[r+1]=na[i+1];

                        r++;

                    }

                }

            }

            else{

                if(nc[i]=="*"||nc[i]=="/"){

                    if(nc[i]=="*"){

                        b[r]=b[r]*na[i+1];

                    }

                    if(nc[i]=="/"){

                        b[r]=b[r]/na[i+1];

                    }

                }

                else{

                    if(nc[i]=="+"){

                        cc[r]="+";

                        r++;

                        b[r]=na[i+1];

                        rn=0;

                        }

                    if(nc[i]=="-"){

                        cc[r]="-";

                        r++;

                        b[r]=na[i+1];

                        rn=0;

                    }

                }

                }

        }

        if(cc[0]=="+"){

            re=b[0]+b[1];

        }

        if(cc[0]=="-"){

            re=b[0]-b[1];

        }

                for(int i=1;i<r;i++){

            if(cc[i]=="+"){

                re=re+b[i+1];

                            }

            if(cc[i]=="-"){

                re=re-b[i+1];

                            }

        }

     }

}

プライマリコード:
package fiv;

import java.awt.*; 

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.io.IOException;



import javax.swing.*; 

public  class rrr extends JFrame implements ActionListener{

    JLabel L1=new JLabel("  :");

    JLabel L2=new JLabel("      :"); 

    JLabel L3=new JLabel("    ");

    public JLabel L4=new JLabel("        "); 

    JLabel L5=new JLabel("        ");

    JLabel L6=new JLabel("     :");

    JTextField T1=new JTextField(6);

    JTextField T2=new JTextField("1");

    JTextField T3=new JTextField("1");

    JButton B1=new JButton("  ");

    JButton B2=new JButton("    ");

    JButton B3=new JButton("   ");

    JButton B4=new JButton("  ");

    JPanel p1=new JPanel();

    int n=0,ri,m=0,p,cn=1;

    int a[][]=new int[100][5];

    int b[]=new int[100];

    int d[]=new int[100];

    int e[]=new int[100];

    int f[]=new int[100];

    String s;

    String c[][]=new String[100][4];

    String ch[]={"+","-","*","/"};

    public static void main(String[] args) {

        new rrr();

        

        // TODO Auto-generated method stub

    }

    rrr()

    {

        

            this.setTitle("    ");

            this.setSize(400,400);

            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

            this.add(p1); 

            p1.setLayout(null);

            L2.setBounds(50, 20, 90, 20);

            p1.add(L2);

            T2.setBounds(150, 20, 90, 30);

            p1.add(T2);

           L1.setBounds(50, 70, 90, 30);

            p1.add(L1);

            L4.setBounds(150, 70, 170, 30);

            p1.add(L4);

            L3.setBounds(50,120, 90, 30);

            p1.add(L3);

            T1.setBounds(150, 120, 90, 30);

            p1.add(T1);

            L6.setBounds(50,170, 90, 30);

            p1.add(L6);

            T3.setBounds(150, 170, 90, 30);

            p1.add(T3);

            B1.setBounds(50, 220, 90, 30);

            p1.add(B1);

            B1.addActionListener(this);

            B2.setBounds(150, 220, 90, 30);

            p1.add(B2);

            B2.setEnabled(false);

            B2.addActionListener(this);

            B3.setBounds(50,270,90,30);

            p1.add(B3);

            B3.setEnabled(false);

            B3.addActionListener(this);

            B4.setBounds(150, 270,90,30);

            p1.add(B4);

            B4.setEnabled(false);

            B4.addActionListener(this);

            L5.setBounds(50, 320, 220, 30);

            p1.add(L5);

            this.setVisible(true);

            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//           

            B1.addActionListener(this);

    }

    public void actionPerformed(ActionEvent ee){

        if(ee.getSource()==B1){

            String s1=new String("         5    1");

            String s2=new String("        4    1");

            m=0;

            ri=0;

            try{n=(int) Double.parseDouble(T2.getText());

            cn=(int) Double.parseDouble(T3.getText());

            }

            catch(NumberFormatException e){

                JOptionPane.showMessageDialog(null,"    ","  ",JOptionPane.INFORMATION_MESSAGE);

           }

            if(cn>4||cn<1||n>5||n<1){

           if((n>5&&cn>4)||(n>5&&cn<1)||(n<1&&cn<1)||((n<1&&cn>4))){

                    JOptionPane.showMessageDialog(null,s1+" "+s2,"  ",JOptionPane.INFORMATION_MESSAGE);

                }

            else if(cn>4||cn<1)

                {

                    JOptionPane.showMessageDialog(null,s2,"  ",JOptionPane.INFORMATION_MESSAGE);

                }

            else JOptionPane.showMessageDialog(null,s1,"  ",JOptionPane.INFORMATION_MESSAGE);

            }

            else {begin();

            B1.setEnabled(false);

            B2.setEnabled(true);

            B3.setEnabled(true);

            B4.setEnabled(true);

            T2.setEditable(false);;

            T3.setEditable(false);

            L5.setText(" ");

           }    

        }

        if(ee.getSource()==B2){

            B1.setEnabled(true);

            B2.setEnabled(false);

            B3.setEnabled(false);

            B4.setEnabled(false);

            T2.setEditable(true);

            T3.setEditable(true);

            T1.setText("");

            T2.setText("1");

            T3.setText("1");

        }

        if(ee.getSource()==B3){

                begin();

                T1.setText("");

                B4.setEnabled(true);

                L5.setText(" ");

        }

        if(ee.getSource()==B4){

           answer();

            B4.setEnabled(false);

            if(m==n){

                B2.setEnabled(true);

                B3.setEnabled(false);

                B4.setEnabled(false);

                JOptionPane.showMessageDialog(null,"   "+ri+" ,   "+(n-ri)+" ","  ",JOptionPane.INFORMATION_MESSAGE);

            }

        }

  }

    void begin(){

        for(int i=0;i<cn+1;i++)

            a[m][i]=(int)(Math.random()*200-100);

        for(int i=0;i<cn;i++)

            c[m][i]=ch[(int)(Math.random()*3)];

        for(int i=1;i<cn;i++){

        while(a[m][i]==0&&c[m][i-1]==ch[3]){

            a[m][i]=(int)(Math.random()*200-100);

        }

       }

        s=Double.toString(a[m][0]);

        for(int j=1;j<cn+1;j++)

        {

        if(a[m][j]<0){

            s=s+c[m][j-1]+"("+Double.toString(a[m][j])+")";

            }

        else {

            s=s+c[m][j-1]+Double.toString(a[m][j]);

        }

        }

        s=s+"=";

        L4.setText(s);

    }

    void answer(){

        calc re=new calc(a,c,m,cn);

        double an = 0;

       try{  an=Double.parseDouble(T1.getText());

       }

       catch(NumberFormatException e){

           JOptionPane.showMessageDialog(null,"    ","  ",JOptionPane.INFORMATION_MESSAGE);

       }

       re.setting();

       if((re.re)==an){

            L5.setText("    !");

            ri++;

        }

        else{

            L5.setText("    !     "+re.re);

        }

        m++;

    }

}

2.テスト結果:
計算機能のテスト:
 

package fiv;



import static org.junit.Assert.*;



import org.junit.Test;



public class calcTest {

    public int[][] test={{7,40,30,20},{5,8,4},{50,75,35,46,53},{80,60,25,35,45},{25,50,5,3},{40,8,5,6,2}};

    public String[][] tc={{"+","-","*"},{"*","+"},{"*","-","+","*"},{"+","*","*","-"},{"*","/","+"},{"/","+","*","/"}};

    calc te=new calc(test,tc,0,3);

    @Test

    public void testSetting1() {

        calc te=new calc(test,tc,0,3);

        te.setting();

        assertEquals(-553,te.re);

    }

    @Test

    public void testSetting2() {

        calc te=new calc(test,tc,1,2);

        te.setting();

        assertEquals(44,te.re);

    }

    @Test

    public void testSetting3() {

        calc te=new calc(test,tc,2,4);

        te.setting();

        assertEquals(6153,te.re);

    }

    @Test

    public void testSetting4() {

        calc te=new calc(test,tc,3,4);

        te.setting();

        assertEquals(52535,te.re);

    }

    @Test

    public void testSetting5() {

        calc te=new calc(test,tc,4,3);

        te.setting();

        assertEquals(253,te.re);

    }

    @Test

    public void testSetting6() {

        calc te=new calc(test,tc,5,4);

        te.setting();

        assertEquals(20,te.re);

    }

}

View Code
1、7+40-30*202、5*8+4
3、50*75-35+46*53
4、80+60*25*35-45
5、25*50/5+3
6、40/8+5*/2
作业5.2 5.3
例外処理:
問題の個数と演算子の個数に対する例外処理:
try{n=(int) Double.parseDouble(T2.getText());

            cn=(int) Double.parseDouble(T3.getText());

            }

            catch(NumberFormatException e){

                JOptionPane.showMessageDialog(null,"    ","  ",JOptionPane.INFORMATION_MESSAGE);

           }

入力した回答ボックスの例外処理:
try{  an=Double.parseDouble(T1.getText());

       }

       catch(NumberFormatException e){

           JOptionPane.showMessageDialog(null,"    ","  ",JOptionPane.INFORMATION_MESSAGE);

       }

 
入力ボックスは数値ではありません:
作业5.2 5.3
作业5.2 5.3
答えは数字ではありません.
作业5.2 5.3
3.質問
ユニットテスト時にassertEquals()はInt型しか使えないため、変数はint型のみで、除算に余剰がある場合は表示結果を正確に計算できません
4.心得:
今回のプログラミングでは、演算子の個数を修正する機能が追加されています.これまでは個数が固定された演算のコードだったので、複数の演算子の演算は書き直す必要があります.最初は私と友达はすべてどのように考えていないで、友达といくつかの讨论と思考を経て、多种の方法を试みた后で、ついに演算子の个数を修正して加減乗除のコードを直して、结対のプログラミングの役に立つところも理解しました.