zoukankan      html  css  js  c++  java
  • 结对编程《四则运算》

    1.结对编程题目是:面向小学生,随机生成30个100以内的四则运算,并且用户可以录入结果,检查用户录入的结果是否是正确的。

    2.结对编程对象:晏蜀杰,博客地址:http://www.cnblogs.com/ysjwj320/

    3双方贡献度: 1:2

    4.结对编程照片:

    5.源程序代码:

    MyExpression.java

    package com.yanshujie.calculator;
    
    import java.util.Map;
    
    public interface MyExpression {
    	
    	public void setCount(int count);
    	
    	public Map<String,Number> getExpressions();
    }
    

      

    ObtainExpression.java

    package com.yanshujie.calculator;
    
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    
    import org.eclipse.jdt.annotation.NonNull;
    
    public class ObtainExpression implements MyExpression{
    	
    	private int count = 100;
    	private Number start;
    	private Number end;
    	private boolean isDecimal = true;
    	private static final List<String> operators = Arrays.asList(new String[]{"+","-","*","/"});
    	
    	public ObtainExpression(@NonNull Number start, @NonNull Number end) throws IllegalArgumentException{
    		setNumbers(start,end);
    	}
    	
    	public ObtainExpression(@NonNull Number start, @NonNull Number end, int count) throws IllegalArgumentException{
    		this(start,end);
    		setCount(count);
    	}
    	
    	@Override
    	public void setCount(int count){
    		if( !isDecimal ){
    			int range = end.intValue() - start.intValue() + 1;
    			if( this.count > range*(range-1)){
    				throw new IllegalArgumentException("the count of expressions is bigger than the count of all expressions.");
    			}
    		}
    		this.count = count;
    	}
    	
    	@Override
    	public Map<String,@NonNull Number> getExpressions(){
    		Map<String,Number> map = new HashMap<String,Number>();
    		if( !isDecimal ){
    			int start = this.start.intValue();
    			int end = this.end.intValue();
    			Random random = new Random(System.currentTimeMillis());
    			while(map.size() < this.count ){
    				int leftNumber = random.nextInt(end-start+1)+start;
    				int rightNumber = random.nextInt(end-start+1)+start;
    				int oper = random.nextInt(operators.size());
    				if( rightNumber == 0 && operators.get(oper).equals("/") ){
    					continue;
    				}
    				StringBuilder builder = new StringBuilder();
    				builder.append(leftNumber).append(operators.get(oper)).append(rightNumber).append("=");
    				if( map.containsKey(builder.toString()) ){
    					continue;
    				}
    				Number result = compute(leftNumber,rightNumber,operators.get(oper));
    				map.put(builder.toString(), result);		
    			}
    		}else{
    			// TODO to handle double numbers
    		}
    		
    		return map;
    	}
    	
    	private Number compute(int leftNumber, int rightNumber, String operator){
    		Number result = null;
    		switch(operator){
    		case "+":
    			result = leftNumber + rightNumber;
    			break;
    		case "-":
    			result = leftNumber - rightNumber;
    			break;
    		case "*":
    			result = leftNumber * rightNumber;
    			break;
    		case "/":
    			result = (leftNumber*1.0) / rightNumber;
    			break;
    		default:
    			break;
    		}
    		return result;
    	}
    	
    	private void setNumbers(@NonNull Number start, @NonNull Number end){
    		if( start instanceof Integer && end instanceof Integer){
    			this.isDecimal = false;
    		}
    		if( start.doubleValue() > end.doubleValue() ){
    			throw new IllegalArgumentException("the start number must be bigger than the end number");
    		}
    		this.start = start;
    		this.end = end;
    	}
    }
    

      

    Calculator.java

    package com.yanshujie.calculator;
    
    import java.util.Map;
    import java.util.Scanner;
    import java.util.Set;
    
    public class Calculator {
    	private static final Scanner input = new Scanner(System.in);
    	
    	public static void main(String[] args) {
    		System.out.print("please input the start number:");
    		int start = getInt();
    		System.out.print("please input the end number:");
    		int end = getInt();
    		System.out.print("please input the count of expressions:");
    		int count = getUnsignedInt();
    		MyExpression myexp = new ObtainExpression(start, end);
    		myexp.setCount(count);
    		Map<String,Number> result = myexp.getExpressions();
    		Set<String> keys = result.keySet();
    		System.out.print("to output the result,yes(y) or no(n)?:");
    		String chosen = getChosen();
    		System.out.println("the expressions are: ");
    		for( String key : keys ){
    			if( chosen.equals("y") || chosen.matches("Y")){
    				System.out.println(key + result.get(key));
    			}else{
    				System.out.println(key);
    			}
    		}
    		realse();
    	}
    	
    	public static String getChosen(){
    		String chosen = null;
    		if( input.hasNext() ){
    			chosen = input.next();
    		}
    		while(!chosen.matches("^[yYnN]$")){
    			System.out.print("please input 'y' or 'n':");
    			if( input.hasNext()){
    				chosen = input.next();
    			}
    		}
    		return chosen;
    	}
    	
    	public static int getUnsignedInt(){
    		int unsignedNum = getInt();
    		while(unsignedNum <= 0){
    			System.out.print("input error,please input an unsigned number:");
    			unsignedNum = getInt();
    		}
    		return unsignedNum;
    	}
    	
    	public static int getInt(){
    		do{
    			if( input.hasNextInt() ){
    				return input.nextInt();
    			}else{
    				System.out.print("input error,please input the number:");
    			}
    		}while(true);
    	}
    	
    	public static void realse(){
    		if( input != null ){
    			input.close();
    		}
    	}
    }
    

      

  • 相关阅读:
    Python开发入门与实战16-APACHE部署
    Python开发入门与实战15-IIS部署
    Python开发入门与实战14-基于Extjs的界面
    团队作业4:第三篇Scrum冲刺博客(歪瑞古德小队)
    团队作业4:第二篇Scrum冲刺博客(歪瑞古德小队)
    团队作业4:第一篇Scrum冲刺博客(歪瑞古德小队)
    团队作业4:项目冲刺集合贴(歪瑞古德小队)
    团队作业3:需求改进&系统设计(歪瑞古德小队)
    团队作业2:需求规格说明书(歪瑞古德小队)
    使用docker安装codimd,搭建你自己的在线协作markdown编辑器
  • 原文地址:https://www.cnblogs.com/lovelyYakir/p/5376577.html
Copyright © 2011-2022 走看看