一、程序代码:
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图片)