zoukankan      html  css  js  c++  java
  • 软工网络15--结对编程练习

    结对编程

    改进现有代码2

    团队成员:
    梁林 201521123119 码云地址:https://gitee.com/ll119
    龚厦彬 201521123115 码云地址:https://gitee.com/handsomecat/events

    clone项目,在开发环境中运行该应用程序,修改完毕最后上传至码云,并在博客中给出链接

    检查大部分主要类之间的关系,画出类图

    核心代码展示

    private static int GCD(int m, int n) {//最大公约数
    		// TODO Auto-generated method stub
    		while (true) {
    	        if ((m = m % n) == 0)
    	        return n;
    	        if ((n = n % m) == 0)
    	        return m;
    	        }
    	}
    	
    	public static int LCM(int m, int n) {  //求最小公倍数
    		return m*n/GCD(m,n);
            }
    	
    	public static int[] createFraction(){  //随机组成真分母
            int[] fraction=new int[2];
            int fraction1 = (int)(Math.random()*10+1);//避免分子出现零
            int fraction2 = (int)(Math.random()*10+1);//避免分母出现零
            if(fraction1!=fraction2){            //避免出现分子分母相同
                if(fraction1<fraction2){        //避免出现假分数
                	fraction[0]=fraction1;
                	fraction[1]=fraction2;  
                	return fraction;
                }else{
                	fraction[0]=fraction2; 
                	fraction[1]=fraction1;  
                	return fraction;
                }
            }else  
                createFraction(); 
            return fraction;
            
        }
    	
    	public main()//计算四则运算并输出
    	{
    		new Thread(myTimeRunable).start();
    		int n = 0;
    		MainFrame ma= new MainFrame();
            int m = (int)(Math.random()*n+1);//随机整数题目和分数题目的题量
            
    		try{
    			//调用初始化方法
    			jbInit();
    		}
    		catch(Exception exception){
    			exception.printStackTrace();
    		}
    	
    		try{
    			
    			n= Integer.parseInt(ma.number);
    			}catch(NumberFormatException e){
    				//利用消息对话框提示输入失败
    				JOptionPane.showMessageDialog(this,"输入错误!请重新输入");
    				}
    
            for(int j=0;j<(n-m);j++){//整数题目
               String ans;
         	   int op=(int)(Math.random()*5+1);//随机选择计算符
         	   int num1=(int)(Math.random()*10+1);//随机两个整数
         	   int num2=(int)(Math.random()*10+1);
         		   if(op==1){//加法
         			 Question.add(num1+"+"+num2+"="); 
         	         Answer.add(num1+num2+"");
         		  }
         		   if(op==2){//减法,防止出现负数
         			   if(num1>num2){
         				 Question.add(num1+"-"+num2+"="); 
         				 Answer.add(num1-num2+"");
         			  }
         		   else{
         			  Question.add(num2+"-"+num1+"="); 
      				 Answer.add(num2-num1+"");
         		   }
         		   }
         		   if(op==3){//乘法
         			 Question.add(num1+"*"+num2+"="); 
      				 Answer.add(num1*num2+"");
         	}
         		   if(op==4){//除法
        			 Question.add(num1+"÷"+num2+"=");
         			 if(num1%num2==0){ 
          				Answer.add(num1/num2+"");
        			
         			 }else{
         				 int num3=GCD(num1,num2);
         				 num1=num1/num3;
         				 num2=num2/num3;
         				 String a = num1+"/"+num2;
          				 Answer.add(a+"");
         			 }
         		   }
         		  if(op==5) {//乘方
      				 Question.add(num1+"^"+num2+"=");
      				 Answer.add(Math.pow(num1,num2)+"");
    
         		   
            }
            }
            
            for(int j=0;j<m;j++){//分数题目
        		   Scanner in = new Scanner(System.in);//真分数的计算
        		   int op=(int)(Math.random()*4+1);
        		   int[] f1 =createFraction();
        	       int[] f2 =createFraction();
        	       int j1=GCD(f1[0],f1[1]);
        	       f1[0]=f1[0]/j1;//化简分数
        	       f1[1]=f1[1]/j1;
        	       j1=GCD(f2[0],f2[1]);
        	       f2[0]=f2[0]/j1;
        	       f2[1]=f2[1]/j1;
        	       int gbs = LCM(f1[1],f2[1]);
        			  
            	 if(op==1){//加法
            		  Question.add("("+f1[0]+"/"+f1[1]+")+("+f2[0]+"/"+f2[1]+")="); 
        	          int num1=f1[0]*f2[1]+f2[0]*f1[1];
        	          int num2=f1[1]*f2[1];
        	          int num3=GCD(num1,num2);
        	          num1=num1/num3;
        	          num2=num2/num3;
        			  String a=new String();
        			  if(num1==num2)
        	            {
        	                a="1";
        	            }
        	            else
        	            {
        	            	a=num1+"/"+num2;
        	            }
        			  Answer.add(a+"");
        	           
        		  }
        		   if(op==2){//减法
        			   int num1=f1[0]*f2[1]-f2[0]*f1[1];
        			   if(num1>0){  //防止出现负数 
        				 Question.add("("+f1[0]+"/"+f1[1]+")-("+f2[0]+"/"+f2[1]+")="); 
        				 int num2=f1[1]*f2[1];
        				 String a=new String();
        				 if(num1==0)
        	                {
        	                    a="0";
        	                }
        	                else
        	                {
        	                int num3=Math.abs(GCD(num1,num2));
        		            num1=num1/num3;
        		            num2=num2/num3;
        	                if(num1==num2)
        	                {
        	                    a="1";
        	                }
        	                else
        	                {
        	                    a=num1+"/"+num2;
        	                }
        	                }
        				 Answer.add(a+"");
        		   }else{
        			   Question.add("("+f2[0]+"/"+f2[1]+")-("+f1[0]+"/"+f1[1]+")="); 
        			     int num11=f2[0]*f1[1]-f1[0]*f2[1];
        				 int num2=f1[1]*f2[1];
        				 String a=new String();
        				 if(num11==0)
        	                {
        	                    a="0";
        	                }
        	                else
        	                {
        	                int num3=Math.abs(GCD(num11,num2));
        		            num11=num11/num3;
        		            num2=num2/num3;
        	                if(num11==num2)
        	                {
        	                    a="1";
        	                }
        	                else
        	                {
        	                    a=num11+"/"+num2;
        	                }
        	                }
        				  Answer.add(a+"");
        		   }
        			  }
        		  if(op==3){//乘法
        			     Question.add("("+f1[0]+"/"+f1[1]+")*("+f2[0]+"/"+f2[1]+")="); 
        				 int num1= f1[0]*f2[0]; 
                         int num2 = f1[1]*f2[1];
        				 int num3=GCD(num1,num2);
        				 String a=new String();
        				 num1= num1/num3; 
                         num2 = num2/num3;
                      if(num1==num2)
        	                {
        	                    a="1";
        	                }
        	                else
        	                {
        	                    a=num1+"/"+num2;
        	                }
                         Answer.add(a+"");	
        			  }
        		  if(op==4){//除法
        			     Question.add("("+f1[0]+"/"+f1[1]+")÷("+f2[0]+"/"+f2[1]+")="); 
        				 int num1= f1[0]*f2[1]; 
        				 int num2 = f1[1]*f2[0];
        				 int num3=GCD(num1,num2);
        				 String a=new String();
        				 num1= num1/num3; 
                         num2 = num2/num3;
                         if(num1==num2)
        	                {
        	                    a="1";
        	                }
        	                else
        	                {
        	                    a=num1+"/"+num2;
        	                }
                         Answer.add(a+"");	
        		  }
            }
            
            //输出题目
            JTextArea0.setText("");
            for(String string : Question){
                num ++;
                JTextArea0.append("("+num+")、"+string+"
    ");
            }
    	}
    
    	//计时器
    	 private class MyRunable implements Runnable{
    	        private int hour = 0;
    	        private int min = 0;
    	        private int sec = 0;
    	        private NumberFormat format = NumberFormat.getInstance();
    	        private String nextSecond(){
    	            ++sec;
    	            if(sec == 60) {
    	                ++min;
    	                sec = 0;
    	            }
    	             
    	            if(min == 60) {
    	                ++hour;
    	                min = 0;
    	            }
    	            return currentTime();
    	        }
    	         
    	        private String currentTime(){
    	            return format.format(hour)+":"+format.format(min)+":"+format.format(sec);
    	        }
    	         
    	        @Override
    	        public void run() {
    	            format.setMinimumIntegerDigits(2);
    	            format.setGroupingUsed(false);
    	            while(true) {
    					if(rootPaneCheckingEnabled) {
    	                    if(isRun) {
    	                        nextSecond();
    	                        jLabel4.setText(currentTime());
    	                    }
    	                }
    	                try {
    	                    Thread.sleep(1000);
    	                }catch (InterruptedException e) {
    	                }
    	            }
    	        }
    	         
    	    }
    	@Override
    	//菜单项事件对应的处理方法
    	public void actionPerformed(ActionEvent e) {
    				 // TODO Auto-generated method stub
    		        //点击“系统”菜单下的“退出”菜单项
    				if(e.getSource()==jButton0)
    				{
    					int num1=0;
    					JTextArea2.setText("");
    			        for(String string : Answer){//输出正确答案
    			            num1 ++;
    			            JTextArea2.append("("+num1+")、"+string+"
    ");
    			        }
    			        
    			        //获取答案并对比得正确率
    			             String[] ans =  JTextArea1.getText().split("
    ");
    			          		for(int i = 0;i < ans.length;i++){
    			          			answer.add(ans[i]+"");
    			          		}
    			                 for(String str:answer)  
    			                 {  
    			                     if(Answer.contains(str))  
    			                     {  
    			                        right++;
    			                     }  
    			                 }
    			      		
    			        int sum;
    		     		sum=right*100/num1;
    		     		JTextArea3.append(sum+"%");
    					isRun = false;
    				}
    				//计时开始
    				if(e.getSource()==jButton2)
    				{
    					 isRun = true;
    				}
    				//继续做题
    				if(e.getSource()==jButton1)
    				{
    					MainFrame MF=new MainFrame();
    					//移除主框架上原有的内容
    					this.remove(this.getRootPane());
    					this.dispose();
    				    MF.setVisible(true);
    				}
    	}
    

    代码规范

    代码风格的原则是:简明,易读,无二义性。
    缩进用四个空格
    行宽100字符
    在复杂的条件表达式中,用括号清楚地表示逻辑优先级。
    断行时每个“{”和“}”都独占一行。
    分行不把多行语句放在一行上。
    命名采用“匈牙利命名法”。
    下划线用来分隔变量名字中的作用域标注和变量的语义。
    所有的类型/类/函数名都用Pascal形式,所有的变量都用Camel形式。
    复杂的注释应该放在函数头,注释(包括所有源代码)只用ASCII字符,不用中文或其他特殊字符。

    团队讨论照片

    浏览所有代码考虑代码质量和测试覆盖率

    运行测试




    PSP表格

    小结

    初次结对编程,感觉很是不习惯,没有1+1>2的感觉,可能是默契度不够,磨合一段时间应该就好了。

  • 相关阅读:
    R语言:提取路径中的文件名字符串(basename函数)
    课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)—— 0、学习目标
    numpy.squeeze()的用法
    课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 4、Logistic Regression with a Neural Network mindset
    Python numpy 中 keepdims 的含义
    课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 3、Python Basics with numpy (optional)
    课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 2、编程作业常见问题与答案(Programming Assignment FAQ)
    课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 0、学习目标
    课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)—— 0、学习目标
    windows系统numpy的下载与安装教程
  • 原文地址:https://www.cnblogs.com/ll321/p/8646942.html
Copyright © 2011-2022 走看看