先看下面的例题:
编写程序,计算将水从初始温度加热到最终温度所需的能量。程序应该提示用户输入水的重量(以千克为单位),以及水的初始温度和最终温度。计算能量的公示是:
Q= M × (最终温度 − 初始温度) × 4184
这里的M是以千克为单位的水的重量,温度以摄氏度为单位,而能量Q以焦耳为单元。
实现代码:
package com.smallfish;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//水的重量
double weight=getInputDouble(scanner,"水的重量(单位:kg)",0.0,null);
//水的最终温度
double finalTemperature=getInputDouble(scanner,"水的最终温度(单位:℃)",0.0,374.3);
//水的初始温度
double initialTemperature=getInputDouble(scanner,"水的初始温度(单位:℃)",-22.0,finalTemperature);
scanner.close();
//Q = 𝑀 × (最终温度 − 初始温度) × 4184
double energy=weight*(finalTemperature-initialTemperature)*4184;
//输出将水从初始温度加热到最终温度所需的能量
System.out.println(weight+"kg的水从"+initialTemperature+"℃加热到"+finalTemperature+"℃所需的能量是:"+energy+"(单位:J)。");
}
/**
* 获取输入的符合要求的double类型的数据
* @param scanner scanner
* @param tip 提示
* @param min 限制的最小值
* @param max 限制的最大值
* @return 符合要求的double类型的数据
*/
public static double getInputDouble(Scanner scanner,String tip,Double min,Double max){
//输入提示语
System.out.println("输入"+tip+":");
//输入的是否是double类型
boolean isDouble=scanner.hasNextDouble();
String inputValue=scanner.nextLine();
if(isDouble){
double value=Double.parseDouble(inputValue);
//isValid=false 为不符合条件,默认 isValid=true(符合)
boolean isValid=true;
if(min!=null&&!(isValid=(value>min))){
System.out.print(tip+"必须大于"+min+",");
}
if(isValid&&max!=null&&!(isValid=(value<=max))){
System.out.print(tip+"必须小于等于"+max+",");
}
if(isValid){
return value;
}
}else{
System.out.print(tip+"输入格式不正确,");
}
System.out.print("您输入的是:["+inputValue+"],请检查并重新");
return getInputDouble(scanner,tip,min,max);
}
}