Java 上机作业1

package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
/*string类比较的时候,使用==比较的是地址是否相同,是否属于同一类对象
使用类的成员函数,equals()
*/
/*目前进度:
 * 
 * 未实现:
 * 1.标准化输出 输出随机数生成的题目和打印最后所有的题目以及结果
 * 2.标准化输出 需要的存放题目和答案的数组
 * 10组题目一个数组+20组正确答案(对于除法运算一道题两个答案)一个数组+20组输入答案一个数组
 */


public class ArithmeticTest1 {
	static ques[] Ques=new ques[11];//存放10道随机生成的题目,声明为静态变量,方便多函数调用,并且static 的main只能调用静态变量
	static ansdivi[] Ans=new ansdivi[11];//存放输入答案
	static ansdivi[] Ans0=new ansdivi[11];//存放正确答案
	public static void main(String args[])
	{
		
		//实例化键盘输入对象
		BufferedReader keyboardIn = new BufferedReader(new InputStreamReader(System.in));
		int sum=0;//统计分数,最后这两个变量尝试是否可以修改为全局
		String fu[]= {"+","-","X","/"};//配套输入r时进行的随机选择运算方;
		//命令行输入,确定10道题目的类型
		//将第一个命令行参数(类型为字符串)转换为整数,确定位数
		int numberOfDigit=Integer.parseInt(args[3]);
	    //System.out.println(args[3]);
			//System.out.println(number1);
			//确定运算类型
			if(args[2].equals("+"))
			{
				//int questionAnswer[][]=new int[10][1];
				/*//标准化输出
				String formatString="%1$"+numberOfDigit+"d"+0+"%2$"+numberOfDigit+"d = %3$"+(numberOfDigit+2)+"d %4$"+(numberOfDigit+2)+"d\n";
			    System.out.printf(formatString);*/
				for(int i=1;i<=10;i++)
				{
					sum=my_add(numberOfDigit,sum,i);
				}
				if(sum==100)
				System.out.println("Success");	
			}
			else if(args[2].equals("-"))
			{
				//int questionAnswer[][]=new int[10][1];
				/*//标准化输出
				String formatString="%1$"+numberOfDigit+"d"+0+"%2$"+numberOfDigit+"d = %3$"+(numberOfDigit+2)+"d %4$"+(numberOfDigit+2)+"d\n";
			    System.out.printf(formatString);*/
				for(int i=1;i<=10;i++)
				{
					sum=my_sub(numberOfDigit,sum,i);
				}
				if(sum==100)
				System.out.println("Success");	
			}
			else if(args[2].equals("X"))
			{
				//int questionAnswer[][]=new int[10][1];
				/*//标准化输出
				String formatString="%1$"+numberOfDigit+"d"+0+"%2$"+numberOfDigit+"d = %3$"+(numberOfDigit+2)+"d %4$"+(numberOfDigit+2)+"d\n";
			    System.out.printf(formatString);*/
				for(int i=1;i<=10;i++)
				{
					sum=my_plus(numberOfDigit,sum,i);
				}
				if(sum==100)
				System.out.println("Success");	
			}			
			else if(args[2].equals("/"))
			{
				//int questionAnswer[][]=new int[10][1];
				/*//标准化输出
				String formatString="%1$"+numberOfDigit+"d"+0+"%2$"+numberOfDigit+"d = %3$"+(numberOfDigit+2)+"d %4$"+(numberOfDigit+2)+"d\n";
			    System.out.printf(formatString);*/
				for(int i=1;i<=10;i++)
				{
					sum=my_divi(numberOfDigit,sum,i);
				}
				if(sum==100)
				System.out.println("Success");	
			}
			else if(args[2].equals("r"))
			{		
				//int questionAnswer[][]=new int[10][1];
				/*//标准化输出
				String formatString="%1$"+numberOfDigit+"d"+0+"%2$"+numberOfDigit+"d = %3$"+(numberOfDigit+2)+"d %4$"+(numberOfDigit+2)+"d\n";
			    System.out.printf(formatString);*/
				for(int i=1;i<=10;i++)
				{
					int xuanze;
					while(true)
					{
						//实例化随机数发生器
						Random numberGenerator=new Random();
						//产生一个指定位数以内的随机整数
						xuanze=numberGenerator.nextInt((int)Math.pow(10,1));
						if(xuanze>=0&&xuanze<=3)
							break;
					}
					//System.out.println(xuanze);
					if(fu[xuanze].equals("/"))
						sum=my_divi(numberOfDigit,sum,i);
					else if(fu[xuanze].equals("+"))
						sum=my_add(numberOfDigit,sum,i);
					else if(fu[xuanze].equals("-"))
						sum=my_sub(numberOfDigit,sum,i);
					else if(fu[xuanze].equals("X"))
						sum=my_plus(numberOfDigit,sum,i);
				}
				if(sum==100)
				System.out.println("Success");	
			}
				
			//输出语句块
			allPrint(sum);
	}
		/*switch(args[2])
		{
		case "+":myadd();break;
		//case "-":mysub();break;
		//case "X":myplus();break;
		//case "/":mydivi();break;
		}如果使用强制类型转换成int类型是否可以使用switch语句
		*/
	static void allPrint(int sum)
	{
		for(int i=1;i<=10;i++)
		{		
			System.out.println("Random question no."+i+":");
			Ques[i].printString();
			System.out.println("输入答案:");
			Ans[i].printAns();
			System.out.println("正确答案:");
			Ans0[i].printAns();
			
		}
		System.out.println("总得分:"+sum);
	}
	static int myadd(int n,int i)//n位数,第i道题目
	{
		//实例化随机数发生器
		Random numberGenerator=new Random();
		//产生一个指定位数以内的随机整数
		int number1=numberGenerator.nextInt((int)Math.pow(10,n));
		//System.out.println(number1);
		int number2=numberGenerator.nextInt((int)Math.pow(10,n));
		Ques[i]=new ques();
		Ques[i].changeQue(number1, "+", number2);
		Ques[i].printString();
		 //System.out.println(number1+"+"+number2+"=");
		return number1+number2;
	}
	static int mysub(int n,int i)//n位数
	{
		int number1,number2;
		st:
			while(true)
		{
			//实例化随机数发生器
			Random numberGenerator=new Random();
			//产生一个指定位数以内的随机整数
			number1=numberGenerator.nextInt((int)Math.pow(10,n));
			//System.out.println(number1);
			number2=numberGenerator.nextInt((int)Math.pow(10,n));
			if(number1<number2)
				continue st;
			else
				break st;
		}
		Ques[i]=new ques();
		Ques[i].changeQue(number1, "-", number2);
		Ques[i].printString();
		return number1-number2;
	}
	static int myplus(int n,int i)//n位数
	{
		int number1,number2;
		
			//实例化随机数发生器
			Random numberGenerator=new Random();
			//产生一个指定位数以内的随机整数
			number1=numberGenerator.nextInt((int)Math.pow(10,n));
			//System.out.println(number1);
			number2=numberGenerator.nextInt((int)Math.pow(10,n));
			
		
			Ques[i]=new ques();
			Ques[i].changeQue(number1, "X", number2);
			Ques[i].printString();
		return number1*number2;
	}
	static void mydivi(int n,ansdivi aans,int i)//n位数
	{
		int number1,number2;
		st:
			while(true)
		{
			//实例化随机数发生器
			Random numberGenerator=new Random();
			//产生一个指定位数以内的随机整数
			number1=numberGenerator.nextInt((int)Math.pow(10,n));
			//System.out.println(number1);
			number2=numberGenerator.nextInt((int)Math.pow(10,n));
			if(number2<=0)//除数要大于0
				continue st;
			else
				break st;
		}
		Ques[i]=new ques();
		Ques[i].changeQue(number1, "/", number2);
		Ques[i].printString();
		 aans.ansyu=number1%number2;//余数
		aans.ans= number1/number2;//整除
	}
	static int my_add(int numberOfDigit,int sum,int i)
	{
		//实例化键盘输入对象
		BufferedReader keyboardIn = new BufferedReader(new InputStreamReader(System.in));
		//从键盘输入整数保存在变量answer中
		int ans;//输入数据需要放在try块中?编辑器要求
		try {
			int r_ans=myadd(numberOfDigit,i);
			System.out.println("输入答案:");
			ans = Integer.parseInt(keyboardIn.readLine());
			Ans[i]=new ansdivi();//存放输入答案
			Ans[i].setans(ans);
			Ans0[i]=new ansdivi();//存放正确答案
			Ans0[i].setans(r_ans);
			if(ans==r_ans)
			sum+=10;
		} catch (NumberFormatException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sum;
	}
	/*static boolean myequal(int a,int b)
	{
		if()
	}*/
	static int my_sub(int numberOfDigit,int sum,int i)
	{
		//实例化键盘输入对象
		BufferedReader keyboardIn = new BufferedReader(new InputStreamReader(System.in));
		//从键盘输入整数保存在变量answer中
		int ans;//输入数据需要放在try块中?编辑器要求
		try {
			int r_ans=mysub(numberOfDigit,i);
			System.out.println("输入答案:");
			ans = Integer.parseInt(keyboardIn.readLine());
			Ans[i]=new ansdivi();//存放输入答案
			Ans[i].setans(ans);
			Ans0[i]=new ansdivi();//存放正确答案
			Ans0[i].setans(r_ans);
			if(ans==r_ans)
			sum+=10;
		} catch (NumberFormatException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return sum;
	}
	static int my_plus(int numberOfDigit,int sum,int i)
	{
		//实例化键盘输入对象
		BufferedReader keyboardIn = new BufferedReader(new InputStreamReader(System.in));
		//从键盘输入整数保存在变量answer中
		int ans;//输入数据需要放在try块中?编辑器要求
		try {
			int r_ans=myplus(numberOfDigit,i);
			System.out.println("输入答案:");
			ans = Integer.parseInt(keyboardIn.readLine());
			Ans[i]=new ansdivi();//存放输入答案
			Ans[i].setans(ans);
			Ans0[i]=new ansdivi();//存放正确答案
			Ans0[i].setans(r_ans);
			if(ans==r_ans)
			sum+=10;
		} catch (NumberFormatException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sum;
	}
	static int my_divi(int numberOfDigit,int sum,int i)
	{
		//实例化键盘输入对象
		BufferedReader keyboardIn = new BufferedReader(new InputStreamReader(System.in));
		int ans,ansyu;
		//从键盘输入整数保存在变量answer中
		ansdivi aans=new ansdivi();//输入数据需要放在try块中?编辑器要求
		try {
			mydivi(numberOfDigit,aans,i);
			System.out.println("输入答案:");
			ans = Integer.parseInt(keyboardIn.readLine());
			ansyu=Integer.parseInt(keyboardIn.readLine());
			Ans[i]=new ansdivi();//存放输入答案
			Ans[i].setans(ans);
			Ans[i].setansyu(ansyu);
			Ans0[i]=new ansdivi();//存放正确答案
			Ans0[i].setans(aans.ans);
			Ans0[i].setansyu(aans.ansyu);
			if(ans==aans.ans&&ansyu==aans.ansyu)
			sum+=10;
		} catch (NumberFormatException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sum;
	}
	
}

class ansdivi
{
	int ans,ansyu;
	public ansdivi()
	{
		ans=0;ansyu=100000;
	}
	public void setans(int n)
	{
		ans=n;
	}
	public void setansyu(int n)
	{
		ansyu=n;
	}
	public void printAns()
	{
		String aa="0";
		if(ansyu==100000)
			{
			aa="%1$d\n";
			System.out.printf(aa, ans);
			}
		else
			{
			aa="%1$d "+"%2$d\n";
			System.out.printf(aa, ans,ansyu);
			}
		
	}
}
//存放10道随机生成的题目
class ques
{
	int aa,cc;
	String bb;
	public ques()
	{
		aa=0;cc=0;
		bb="+";
	}
	public void changeQue(int a,String b,int c)
	{
		aa=a;bb=b;cc=c;
	}
	public void printString()
	{
		String outString="%1$d"+bb+"%2$d\n";
		System.out.printf(outString,aa,cc);
	}
	public String getString()
	{
		return bb;
	}
	public int getaa()
	{
		return aa;
	}
	public int getcc()
	{
		return cc;
	}
}

测试样例
输入
java s r 2
+输入答案后
输出结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值