软件构造作业——100道算术题

基本构想

我的想法是用map来哈希字符串,这样对每一个已经用过的算式进行散列标记,来达到去重的效果

要求

要求是低内聚高耦合,所以要写好几个类来进行封装,达到作用端口的多元化

co.java

package newp;

import java.util.Scanner;

public class co
{
	public static void main(String [] args) 
	{
		make_st mm = new make_st();
		System.out.println("Please enter how many conut you want to practice:");
		Scanner cin = new Scanner(System.in);
		mm.n = cin.nextInt();
		System.out.println("Please enter what mode you want to try:");
		cin = new Scanner(System.in);
		mm.mode = cin.nextInt();
		mm.use();
	}
}

make_st.java

package newp;
import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;
public class make_st
{
	int num=0;   //记录对的题数目
	int n;    //要出的题的数量
	int mode;  //对应每个类的出题模式
	int cnt=0;   //记录已经出题个数
	Map<String,Integer> map = new HashMap<String,Integer>();  // 建立哈希表
	panchong xx = new panchong();
	void use()
	{
		String s="";  //准备哈希字符串
		try (Scanner cin = new Scanner(System.in))  //异常尝试
		{
			while(cnt<n)
			{
			    int ran1 = (int) (Math.random()*100);  //操作数1
			    int ran2 = (int) (Math.random()*100);  //操作数2
			    int ran3 = (int) (Math.random()*3);   //随即加减
			    if(ran3==2&&ran1<ran2)    //如果是减法而且第一个数小于第二个数
			    	continue;
			    if(ran3==1&&ran1+ran2>100)  //如果是加法而且第一个数+小于第二个数>100
			    	continue;
			    if(ran3==1&&(mode == 0||mode == 2))
			    {
			    	s=Integer.toString(ran1)+"+"+Integer.toString(ran2)+"=";
			    	if(xx.judge(s,map))  //如果算式不存在
				    {
			    		System.out.println(s);
				    	int ans = cin.nextInt();
				    	if(ans == ran1+ran2)
				    		num++;   //自加对题数目
				    	cnt++;    //出题数自加
				    }
			    }
			    if(ran3==2&&(mode == 1||mode == 2))
			    {
			    	s=Integer.toString(ran1)+"-"+Integer.toString(ran2)+"=";
			    	if(xx.judge(s,map))
				    {
			    		System.out.println(s);
				    	int ans = cin.nextInt();
				    	if(ans == ran1-ran2)
				    		num++;	
				    	cnt++;
				    }
			    }
			}
		}
		System.out.print((double)(num*1.0/n)*100);  //输出正确率
		System.out.println('%');
	}
}

panchong.java

package newp;
import java.util.Map;
class panchong 
{
	boolean judge(String s,Map<String,Integer> map)
	{
		if(map.get(s)==null&&s!="")
		{
			map.put(s,1);  //建立映射
			return true;
		}
		return false;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值