定义一个类Thermometer表示温度计,Thermometer类的要求如下:
- 一个私有的char类型的成员变量unit表示当前温度计的温度单位,该变量有2个值,F表示华氏度,C表示摄氏度;
- 一个私有的double类型变量temperature表示温度计当前温度数值;
- 一个无参数的构造器,默认温度值为0.0,默认的温度单位为摄氏度;
- 一个带参数的构造器,构造对象时指定温度值和温度单位;
- 定义一个公有方法,switchUnit(),该方法将改变温度计的温度单位,并将温度值也换算为新单位下的值,比如当前单位为摄氏度,switchUnit()将变为华氏度,并将温度值temperature也换算为华氏度的值;
- 为两个成员变量定义getter方法;
华氏度=(摄氏度×9.0/5)+32 **
** 摄氏度=(华氏度-32)×5/9
定义Thermometer类:
class Thermometer{
}
Main类代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Thermometer t1 = new Thermometer();
t1.switchUnit(); //t1改变温度单位
Scanner scanner = new Scanner(System.in);
//输入温度单位和温度值
char unit = scanner.next().charAt(0);
double temperature = scanner.nextDouble();
System.out.printf("Thermometer t1's temperature is %.2f"+t1.getUnit()+"%n",t1.getTemperature());
Thermometer t2 = new Thermometer(temperature,unit);
System.out.printf("Thermometer t2's temperature is %.2f"+t2.getUnit()+"%n",t2.getTemperature());
t2.switchUnit(); //t2改变温度单位
System.out.printf("Thermometer t2's temperature is %.2f"+t2.getUnit()+"%n",t2.getTemperature());
}
}
输入样例:
输入温度的单位和温度值,比如 F 59.5 表示59.5华氏度
F 59.5
输出样例:
输出温度计当前的温度值(包含单位),
Thermometer t1's temperature is 32.00F
Thermometer t2's temperature is 59.50F
Thermometer t2's temperature is 15.28C
闲话少叙,咱们直接走流程:定义一个又一个
定义属性:
一个成员变量有多个值
这时候,我们的成员变量unit需要两个值。怎么办,还要依情况而定改变unit的值
你是否想到了什么?没错,就是我们学习的数组。
java里的数组
java里面也有数组,不过我们今天不详细展开,提到的点仅供这道题用就足够。
java里面的数组格式:
int[] a = {1,2,3,4,5}//创建数组,并初始化
与c不同的是,【】可以写在类型前面,挺好理解:a是一个变量名,类型是int[ ],int[ ],表示是一个元素为int型的数组。
这儿,我们在定义类时,在创建一个数组,然后根据情况把数组里的值赋给unit
代码如下:
private char unit;
char[] AT = {'C','F'};//单个字符用单引号
继续定义其他成员变量:
private double temperature;
定义构造器:
无参构造器中,默认单位unit是摄氏度即把数组的第一个元素赋值给unit
public Thermometer()//构造器也是方法,少不了函数调用操作符()
{
temperature = 0.0;
unit = AT[0];
}//构造器是特殊方法,无返回类型
有参数的构造器,注意传参个数和顺序:
public Thermometer(double temperature1,char unit1)//指定温度和单位,意味着new在操作时传了值,有参构造器肯定接收
{
temperature = temperature1;
unit = unit1;
}
定义方法:
改变温度和相应单位
如果是摄氏温度就变成华氏温度,反之亦然。------明显的判断语句
对应的temperature也发生转换,如果是摄氏温度就变成华氏温度。
大概思路有了,咱们看看细节:
public void switchUnit()//无返回记得写void
{
if(unit == AT[0])//摄氏温度->华氏温度
{
unit = AT[1];
temperature = (temperature * 9.0 / 5) + 32;
}
else if(unit == AT[1])//华氏温度->摄氏温度
{
unit = AT[0];
temperature = (temperature - 32) * 5 / 9;
}
}
为两个成员变量定义getter方法
getter方法一个句话:return无参
public double getTemperature()
{
return temperature;
}
public char getUnit()
{
return unit;
}
完整代码参考:
class Thermometer{
private double temperature;
private char unit;
char[] AT = {'C','F'};
public Thermometer()
{
temperature = 0.0;
unit = AT[0];
}
public Thermometer(double temperature1,char unit1)
{
temperature = temperature1;
unit = unit1;
}
public void switchUnit()
{
if(unit == AT[0])
{
unit = AT[1];
temperature = (temperature * 9.0 / 5) + 32;
}
else if(unit == AT[1])
{
unit = AT[0];
temperature = (temperature - 32) * 5 / 9;
}
}
public double getTemperature()
{
return temperature;
}
public char getUnit()
{
return unit;
}
}
题外话:定义类的概要知识入口
定义类的题目与知识就到这儿,多定义几道,其中规则自会熟稔于心。