四则运算程序扩展:将程序改为java语言,并允许用户输入,对输入结果进行验证

题目

每个同学选一个方向,把程序扩展一下:
1、让程序能接受用户输入答案,并判定对错。最后给出总共对/错 的数量。
2、把程序变成一个网页程序,用户通过设定参数,就可以得到各种题目。
3、把程序变成一个Windows 图形界面的程序。
4、把程序变成一个智能手机程序 (你正在用什么手机, 就写那个手机的程序)。(可以延期3周后)
5、选一个你从来没有学过的编程语言,试一试实现基本功能。

设计思想

本次程序采用数组记录答案,包含输入数组和正确结果保存数组,进行比较

源代码

package minirisoft;

import java.util.Random;
import java.util.Scanner;

public class SizeYunsuan {
	public static Random rand=new Random();
	public static class Qst
	{
		static int Operand(int Range)//产生操作数
		{
			int Opd=rand.nextInt(Range*2+1)-Range;
			return Opd;
		}
		public static char OperatorKind(char Operator,boolean IfSuppMD)//生成运算符
		{
			int OperatorPossible=rand.nextInt(4);
			if(!IfSuppMD)
			{
				OperatorPossible/=2;
			}
			switch(OperatorPossible)
            {
	            case 0:
	            	Operator=‘+‘;
	                break;
	            case 1:
	            	Operator=‘-‘;
	                break;
	            case 2:
	            	Operator=‘*‘;
	                break;
	            case 3:
	            	Operator=‘/‘;
	                break;
	            default:
	            	System.out.print("Error!");
            }
			return Operator;
		}
		public static boolean IfRepeated(String str[],int Location)//判断是否重复
		{
			for(int i=0;i<Location;i++)
			{
				if(str[i].equals(str[Location]))
					return true;
			}
			return false;
		}
		public static int Ans(int ans,int Operand1,int Operand2,char Operator)//生成答案
		{
			switch(Operator)
            {
	            case ‘+‘:
	            	ans=Operand1+Operand2;
	                break;
	            case ‘-‘:
	            	ans=Operand1-Operand2;
	                break;
	            case ‘*‘:
	            	ans=Operand1*Operand2;
	                break;
	            case ‘/‘:
	            		ans=Operand1/Operand2;
	                break;
	            default:
	            	System.out.print("Error!");
            }
			return ans;
		}
		//生成一道运算题
		public static void CreateStr(int Range,char Operator,String str[],int i,int QstNum,int ans[],boolean IfSuppMD)
		{	    int answer = 0;
				Qst.OperatorKind(Operator,IfSuppMD);
				int Operand1=Qst.Operand(Range);
				int Operand2=Qst.Operand(Range);
				str[i]=Integer.toString(Operand1);
				str[i]+=Operator;
				str[i]+=Integer.toString(Operand2);
				str[i]+="=";
				while(IfRepeated(str,i))//判断是否重复
				{
					Operand1=Qst.Operand(Range);
					Operand2=Qst.Operand(Range);
					str[i]=Integer.toString(Operand1);
					str[i]+=Operator;
					str[i]+=Integer.toString(Operand2);
					str[i]+="=";
				}
					ans[i]=Qst.Ans(answer,Operand1,Operand2,Operator);
		}
		public static void Display(String str[],int Col)//输出生成的运算题
		{

			for(int j=0;j<str.length;j++)
			{
				System.out.print(str[j]);
				if(j%Col==Col-1)
				{
					System.out.println();
				}
				else
				{
					System.out.print(‘\t‘);
				}
			}
		}
		public static void Input(int Input[],int QstNum)//输入问题答案
		{
			Scanner sca=new Scanner(System.in);
			for(int j=0;j<QstNum;j++)
			{
				Input[j]=sca.nextInt();
			}
		}
		public static void OutAns(int ans[],int QstNum,int Col)//输出答案
		{
			for(int j=0;j<QstNum;j++)
			{
				System.out.print(ans[j]);
				if(j%Col==Col-1)
				{
					System.out.println();
				}
				else
				{
					System.out.print(‘\t‘);
				}
			}
		}
		public static void ConfirmAns(int ans[],int Input[],int QstNum,int count)
		{
			count=0;
			for(int i=0;i<QstNum;i++)
			{
				if(ans[i]==Input[i])
					count++;
			}
			System.out.println("答题正确个数:");
			System.out.print(count);
		}

	}

	public static void main(String args[])
	{
		int Range,QstNum=0,Col=0,count=0;
		boolean IfSuppMD=true;
		char Operator = ‘+‘;
		Scanner sca=new Scanner(System.in);
		System.out.println("请输入生成题目的数量:");
		QstNum=sca.nextInt();
		System.out.println("请输入算数范围:");
		Range=sca.nextInt();
		System.out.println("请输入划分列数:");
		Col=sca.nextInt();
		System.out.println("是否支持乘除法:(true/false)");
		IfSuppMD=sca.nextBoolean();
		String str[] = new String[QstNum];
		int ans[]=new int[QstNum];
		int Input[]=new int[QstNum];
		for( int i=0;i<QstNum;i++)
		{
			try
			{
				Qst.CreateStr(Range,Qst.OperatorKind(Operator,IfSuppMD),str,i,QstNum,ans,IfSuppMD);
			}
			catch(Exception e)
			{
				i--;
			};
		}
		Qst.Display(str,Col);
		Qst.Input(Input, QstNum);
		System.out.println("输入答案:");
		System.out.println();
		Qst.OutAns(Input,QstNum,Col);
		System.out.println("正确答案:");
		System.out.println();
		Qst.OutAns(ans,QstNum,Col);
		Qst.ConfirmAns(ans,Input,QstNum,count);
	}

}

  程序截图

实验总结

本次实验对前面解决该问题的思路进行了梳理,不再意气用事,采用java语言重新做了一遍,体验到了java和C++的区别与相似之处,也对模块化算法的精简有了一定的提高,程序本身的问题进行了初步的解决,我会再接再厉!

时间: 2024-10-25 06:04:07

四则运算程序扩展:将程序改为java语言,并允许用户输入,对输入结果进行验证的相关文章

用java语言怎么写hdu题目之输入规则

java的输入用Scanner类 1)单个输入: 例如: import java.util.Scanner; public class AA { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt();// 输入1 System.out.println(a);// 输出1 } } 2)无限输入: 例如: import java.util.Scanner;

java语言程序

第一章 Jave语言基础 1.1 Java语言的特点 领会Java语言的特点.关键字 1010-11.Java语言采用多种机制来保证可移植性,其中最主要的是______.虚拟机 1110-11.Java语言是一种 ____强类型语言___ 语言,它约束程序员必须遵守规定编写程序,能让编译器检测出程序中尽可能多的错误. 1.2 Java应用程序和小应用程序 识记      Java应用程序与小应用程序的特点和区别 11.一个应用程序必须在某个类中定义的方法是______.main() 1201-

Java语言特点及分析

Java语言特点及分析 Java是一门面向对象编程语言. (Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程.) Java具有简单性.面向对象.分布性.健壮性.安全性.平台独立与可移植性.多线程.动态性等特点 .Java可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等. Java语言的这些特点体现了java的如下特性: 能够快速入门 编写的程序代码较少 编写较好的程序代码 更快速的开发程序 利用百分之百纯Java

Java语言的主要特点

Java语言的主要特点: 1. 跨平台性 所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行.这是软件发展的趋势和编程人员追求的目标.之所以这样说,是因为计算机硬件的种类繁多,操作系统也各不相同,不同的用户和公司有自己不同的计算机环境偏好,而软件为了能在这些不同的环境里正常运行,就需要独立于这些平台. 而在Java语言中, Java自带的虚拟机很好地实现了跨平台性. Java源程序代码经过编译后生成二进制的字节码是与平台无关的,但是可被Java虚拟机识别的一种

Java语言与C语言之间的应用比较

http://book.51cto.com/art/200906/131809.htm C语言能干的Java也能干的如下: 网络应用层协议服务程序开发:如WebServer.FTPServer.MailServer.DNSServer等都可以用纯Java语言来开发: 嵌入式开发:基于Linux的嵌入式程序开发用Java都可以做,因为Java虚拟机可以很方便的移植,包括专属设备的图形化接口也可以开发独立的GUI: 不愿意用类似"java 类名"这样方法启动Java程序,想跟C语言一样,编

Java语言Socket接口用法详解

Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Server,并通过accept()方法随时监听客户端的连接请求. 扩展: ServerSocket中常用的构造函数及方法 构造函数:ServerSocket(int port) 这是一个构造方法,用于在当前的服务器默认的IP地址上监听一个指定的端口,即在指定的IP和端口创建一个ServerSocket对象

Java Swing界面编程(17)---单行文本输入组件:JTextField

package com.beyole.util; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class test15 { public static void main(String[] args) { JFrame frame = new JFrame("Crystal");// 实例化窗

Java Swing界面编程(18)---单行文本输入组件:JTextField

以下的程序与上一例有一点区别,仔细对比不难发现其中的不同之处. package com.beyole.util; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class test17 { public static void main(String[] args) { JFrame frame = new JFrame("Crystal"); JT

Java语言程序设计基础篇 数组(六)

Java语法之数组 数组的定义 数组是对象. 如:int [ ]  x = new int[100];或 :int x [ ]  = new int[100];(这种方式主要是为了适应C/C++程序员) 声明一个数组变量:int [ ] x;并不会在内存中给数组分配任何空间,仅创建一个引用数组的存储地址. 数组创建后,其元素赋予默认值,数值型基本数据类型默认值为0,char类型为'\u0000',boolean类型为false. 数组的静态初始化 如:int [ ] x = new int [