封装作业1(含代码和运行效果)

一、程序代码:

package task_05;
/*
 * 封装作业1:分析以下需求,并用代码实现(每个小需求都要封装成一个方法):
	 (1)键盘录入两个数据,求两个数据之和(整数和小数)
	 (2)键盘录入两个数据,判断两个数据是否相等(整数和小数) 
	 (3)键盘录入三个数据,获取两个数中较大的值(整数和小数) 
	 (4)打印m行n列的星形矩形 
	 (5)打印nn乘法表
	 (6)计算长方形和圆形的面积
 */
import java.math.BigDecimal;
import java.util.Scanner;

public class EncapsulationTaskOneDemo
{
	// 公用方法:接收控制台输入的数据,将输入的数据以字符串形式返回,包含用户无效输入检查反馈
	static String consoleInput(Scanner sc) {
		// 用于存放用户数据的数据
		String inputData = null;
		while(true) {
			// 如果用户有输入数据
			if(sc.hasNextLine()) {
				// 如果用户输入的数据为整数或小数,直接返回输入的数据
				if(sc.hasNextInt()||sc.hasNextDouble()) {
					inputData = sc.nextLine(); // 控制台输入的数据是整数或小数
					return inputData;
				}
				else {
					inputData = sc.nextLine();
					// 如果用户输入的是e,则终止当前输入处理,返回结束当前功能模块有"e"字符串标识
					if(inputData.equals("e")) 
						return "e";
					else
						// 如果用户输入的不是整数或小数,也不是结束字符串标识"e",那在控制台提醒用户输入的数据无效!
						System.out.print("输入的"+inputData+"无效!请输入整数或小数:");
				}
			}
		}
	}
		
	/* 封装作业1_(1)_小需求 开始 */
	
	// 定义两个都为整数的数字相加方法
	static int add(int a,int b) {
		System.out.println("两个都为整数的数字相加方法被调用了!");
		return a+b;
	}
	// 定义两个不都为整数的数字相加的方法
	static double add(double a,double b) {
		System.out.println("两个不都为整数的数字相加的方法被调用了!");
		// 使用BigDecimal保证输入小数在计算中不丢失精度
		return new BigDecimal(String.valueOf(a)).doubleValue()+new BigDecimal(String.valueOf(b)).doubleValue();
	}
	
	// 判断数字字符串是否是整数,如果是整数返回true,不是整数返回false
	static boolean isInt(String num) {
		if(num.indexOf(".")==-1)
			return true;
		else
			return false;
	}
	
	// 实现“封装作业1_(1)_小需求”的方法:键盘录入两个数据,求两个数据之和(整数和小数)
	static void smallRequireOne() {
		String firstNum=null,secondNum = null;
		Scanner sc = new Scanner(System.in);
		while(true){
			System.out.print("请输入第一个数(退出请输入e):");
			// 调用consoleInput(Scanner sc)方法完成数据输入
			firstNum = consoleInput(sc);
			// 如果用户输入的是e,则终止当前执行的功能模块,进入下一功能模块的执行
			if(firstNum.equals("e"))
				break;
			
			System.out.print("请输入第二个数(退出请输入e):");
			// 调用consoleInput(Scanner sc)方法完成数据输入
			secondNum = consoleInput(sc);
			// 如果用户输入的是e,则终止当前执行的功能模块,进入下一功能模块的执行
			if(secondNum.equals("e"))
				break;
			
			//调用isInt(String num)方法判断用户输入的两个数是否是整数,如果是则执行add(int a,int b)方法
			if(isInt(firstNum)&isInt(secondNum)) {
				System.out.println("输入的两个数相加("+firstNum+"+"+secondNum+")之和为:"+
				add(Integer.parseInt(firstNum),Integer.parseInt(secondNum)));
			}
			//如果用户输入的两个数不全是整数,则执行add(double a,double b)方法
			else {
				System.out.println("输入的两个数相加("+firstNum+"+"+secondNum+")之和为:"+
						add(Double.parseDouble(firstNum),Double.parseDouble(secondNum)));
			}
			
			System.out.println("如想退出请输入e!如想继续按回车键!");
			// 如果用户输入的是e,则终止当前执行的功能模块,进入下一功能模块的执行
			if(sc.nextLine().equals("e")) {
				break;
			}
		}
			System.out.println("封装作业1_(1)_小需求已停止执行!");
	}
	
	/* 结束 封装作业1_(1)_小需求 */
	
	/* 封装作业1_(2)_小需求 开始 */
	
	// 判断两个数是否相等,相等则返回true,不相等则返回false
	static boolean isEqual(double n1,double n2) {
		if(n1==n2)
			return true;
		else
			return false;
	}
		
	// 实现“封装作业1_(2)_小需求”的方法:键盘录入两个数据,判断两个数据是否相等(整数和小数) 
	static void smallRequireTwo() {
		String firstNum=null,secondNum = null;
		Scanner sc = new Scanner(System.in);
		while(true){
			System.out.print("请输入第一个数(退出请输入e):");
			// 调用consoleInput(Scanner sc)方法完成数据输入
			firstNum = consoleInput(sc);
			// 如果用户输入的是e,则终止当前执行的功能模块,进入下一功能模块的执行
			if(firstNum.equals("e"))
				break;
			
			System.out.print("请输入第二个数(退出请输入e):");
			// 调用consoleInput(Scanner sc)方法完成数据输入
			secondNum = consoleInput(sc);
			// 如果用户输入的是e,则终止当前执行的功能模块,进入下一功能模块的执行
			if(secondNum.equals("e"))
				break;
			
			// 调用isEqual(double n1,double n2)方法判断用户输入的两个数是否相等
			if(isEqual(Double.parseDouble(firstNum),Double.parseDouble(secondNum))) {
				System.out.println("输入的两个数:"+firstNum+"等于"+secondNum);
			}
			else {
				System.out.println("输入的两个数:"+firstNum+"不等于"+secondNum);
			}
			
			System.out.println("如想退出请输入e!如想继续按回车键!");
			// 如果用户输入的是e,则终止当前执行的功能模块,进入下一功能模块的执行
			if(sc.nextLine().equals("e")) {
				break;
			}
		}
			System.out.println("封装作业1_(2)_小需求已停止执行!");
			//sc.close();
	}
	
	/* 结束 封装作业1_(2)_小需求 */
	
	/* 封装作业1_(3)_小需求 开始 */
	
	// 获取两个数中的较大值
	static double getMaxNum(double n1,double n2) {
		if(n1>n2)
			return n1;
		else
			return n2;
		
	}
	// 实现“封装作业1_(3)_小需求”的方法:键盘录入两个数据,获取两个数中较大的值(整数和小数) 
	static void smallRequireThree() {
		String firstNum=null,secondNum = null;
		Scanner sc = new Scanner(System.in);
		while(true){
			System.out.print("请输入第一个数(退出请输入e):");
			// 调用consoleInput(Scanner sc)方法完成数据输入
			firstNum = consoleInput(sc);
			// 如果用户输入的是e,则终止当前执行的功能模块,进入下一功能模块的执行
			if(firstNum.equals("e"))
				break;
			
			System.out.print("请输入第二个数(退出请输入e):");
			// 调用consoleInput(Scanner sc)方法完成数据输入
			secondNum = consoleInput(sc);
			// 如果用户输入的是e,则终止当前执行的功能模块,进入下一功能模块的执行
			if(secondNum.equals("e"))
				break;
			// 调用getMaxNum(double n1,double n2)方法判断用户输入的两个数中的较大值
			System.out.println("输入的两个数("+firstNum+"和"+secondNum+")中的较大值为:"+getMaxNum(Double.parseDouble(firstNum),Double.parseDouble(secondNum)));
			System.out.println("如想退出请输入e!如想继续按回车键!");
			// 如果用户输入的是e,则终止当前执行的功能模块,进入下一功能模块的执行
			if(sc.nextLine().equals("e")) {
				break;
			}
		}
			System.out.println("封装作业1_(3)_小需求已停止执行!");
			// 最后一个输入功能模块执行完毕,关闭Scanner输入流
			sc.close();
	}
	
	/* 结束 封装作业1_(3)_小需求 */
	
	/* 封装作业1_(4)_小需求 开始 */
	
	// 打印m行n列的星形矩阵
	static void printMatrix(int m,int n){
		for(int i=0;i<m;i++) {
			for(int j=0;j<n;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
	
	/* 结束 封装作业1_(4)_小需求 */
	
	/* 封装作业1_(5)_小需求 开始 */
	
	//打印n×n乘法表
	static void printMulTable(int n){
		for(int i=1;i<=n;i++) {
			 for(int j=1;j<=i;j++) {
					System.out.print(i+"*"+j+"="+i*j+"\t");
			  }	
			 System.out.println();
		  }
	}
	
	/* 结束 封装作业1_(5)_小需求 */
	
	/* 封装作业1_(6)_小需求 开始 */
	
	// 计算长方形面积
	static double getRectArea(double width,double height) {
		//为了计算时不丢失精度,将width和height分别转换为BigDecimal
		BigDecimal bwidth = new BigDecimal(Double.toString(width));
		BigDecimal bheight = new BigDecimal(Double.toString(height));
		// 调用BigDecimal中的multiply()方法计算宽和高的乘值
		BigDecimal result = bwidth.multiply(bheight);
		return result.doubleValue();
	}
	// 计算圆形面积
	static double getCircleArea(double radius) {
		//为了计算时不丢失精度,将radius转换为BigDecimal
		BigDecimal bradius = new BigDecimal(Double.toString(radius));
		// 调用BigDecimal中的multiply()方法计算bradius×bradius的值
		BigDecimal bsradius = bradius.multiply(bradius);
		//为了计算时不丢失精度,将圆周率转换为BigDecimal
		BigDecimal bpi = new BigDecimal(Double.toString(Math.PI));
		//调用BigDecimal中的multiply()方法计算PI×bradius×bradius的值
		BigDecimal result = bsradius.multiply(bpi);
		//将计算结果四舍五入保留两位小数
		return result.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/* 结束 封装作业1_(6)_小需求 */
	
	public static void main(String[] args)
	{
		System.out.println("现在执行的是封装作业1_(1)_小需求的方法:键盘录入两个数据,求两个数据之和(整数和小数)");
		// 调用“封装作业1_(1)_小需求”的方法
		smallRequireOne();
		 
		System.out.println("\n现在执行的是封装作业1_(2)_小需求的方法:键盘录入两个数据,判断两个数据是否相等(整数和小数) ");
		// 调用“封装作业1_(2)_小需求”的方法
		smallRequireTwo();
		 
		System.out.println("\n现在执行的是封装作业1_(3)_小需求的方法:键盘录入两个数据,获取两个数中较大的值(整数和小数) ");
		// 调用“封装作业1_(3)_小需求”的方法
		smallRequireThree();
		
		System.out.println("\n现在执行的是封装作业1_(4)_小需求的方法:打印m行n列(5行10列)的星形矩形");
		// 调用“封装作业1_(4)_小需求”的方法
		printMatrix(5, 10);
		
		System.out.println("\n现在执行的是封装作业1_(5)_小需求的方法:打印n×n列(6×6)的乘法表");
		// 调用“封装作业1_(5)_小需求”的方法
		printMulTable(6);
		
		System.out.println("\n现在执行的是封装作业1_(6)_<1>小需求的方法:计算长方形面积");
		// 调用“封装作业1_(6)<1>小需求”的方法
		System.out.println("<1>宽2.3,高4.6的长方形的面积为:"+getRectArea(2.3, 4.6));
		System.out.println("\n<2>现在执行的是封装作业1_(6)_<2>小需求的方法:计算圆形面积)");
		// 调用“封装作业1_(6)<2>小需求”的方法
		System.out.println("半径为2.8的圆形的面积为:"+getCircleArea(2.8));
	}
}

二、程序运行结果(gif图片)

标题

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值