zoukankan      html  css  js  c++  java
  • 结对编程总结:简单的四则运算生成程序

    1.题目描述:

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

    2.结对编程说明

             结对对象:尤建  博客地址:http://www.cnblogs.com/lovelyYakir/

             双方贡献:2:1

    3.本程序描述:

         a. 本程序在原有题目的基础上加以了部分改进:

             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();
    		}
    	}
    }
    

      

  • 相关阅读:
    boost-1.53源代码编译
    Hive分析窗体函数之NTILE,ROW_NUMBER,RANK和DENSE_RANK
    外接圆、内切圆半径公式及相应关系知识点总结
    最小生成树之Prim算法
    JavaScript实现简单图片滚动 --9张图告诉你,C罗欲哭无泪
    Scala入门到精通——第二十七节 Scala操纵XML
    第二十一篇:基​于​W​D​M​模​型​的​A​V​S​t​r​e​a​m​驱​动​架​构​研​究
    oracle表空间查询维护命令大全之中的一个(数据表空间)史上最全
    项目流程管理&amp;&amp;架构总结
    AIX常用命令略记
  • 原文地址:https://www.cnblogs.com/ysjwj320/p/5376554.html
Copyright © 2011-2022 走看看