题目描述
请定义一个名为Fan的类模拟风扇,其属性包括打开状态、速度、风扇半径、风扇颜色。要求为每个属性提供访问器和修改器(getter和setter),定义print方法输出风扇对象的相关属性值。风扇有四种种固定的速度,分别是静止(quiet,0)慢速(slow,1-3)、中速(middle,4-7)、快速(quick,8-9);定义测试类,输入速度、半径、颜色、打开状态等数据,按格式输出相关信息。
相关属性值约束:
(1)打开状态:ON或者OFF,表示打开、关闭;
(2)速度(整数):速度小于0时赋值0,速度不可以大于9(大于9时赋值9);
(3)风扇半径在[5,10]内合法,大于10的赋值10,小于5的赋值5;
(4)风扇颜色只有黑色(black)、灰色(gray)、白色(white)三种,其他输入均默认为黑色(black);
(5)打开状态为OFF时,速度无效(即无论输入什么,都应赋值0);打开状态为ON时,速度也可以是0;
(6)私有属性、公有方法
注意:本题重点考查程序是否符合面向对象编程规范,包括变量命名、属性定义、getter和setter方法、成员方法定义、方法调用、代码对齐方式,等等。本题会在实验报告中重点检查。
提示:
(1)测试类(主类)结构参考“实验一设计型实验(1)分数计算”;
(2)不需要定义对象数组,按以下方式处理n组数据问题:
Fan fan=new Fan();
for(i=0;i<n;i++)
{
fan.setStatus(reader.next());
fan.setSpeed(reader.nextInt());
……
fan.print();
}
(3)变量、方法定义见名知意,getter和setter方法由eclipse自动生成后,再进行修改。
输入
风扇的打开状态、速度、风扇半径、风扇颜色等相关属性值,需要验证输入数据的合法性(已知数据类型正确,只需验证数值是否合法);每次输入n组数据。
输出
n组风扇的各属性信息
样例输入 Copy
4 ON 1 8 black OFF 3 11 red ON 10 5 gray OFF 0 3 white
样例输出 Copy
Status:ON;Speed:slow;FanRadius:8;FanColor:black Status:OFF;Speed:quiet;FanRadius:10;FanColor:black Status:ON;Speed:quick;FanRadius:5;FanColor:gray Status:OFF;Speed:quiet;FanRadius:5;FanColor:white
提示
程序框架参考:
import java.util.Scanner;
public class FanTest {
public static void main(String[] args) {
int i,n;
Scanner reader=new Scanner(System.in);
n=reader.nextInt();
Fan fan;
for(i=0;i<n;i++) {
fan=new Fan();
fan.setStatus(reader.next());
fan.setSpeed(reader.nextInt());
fan.setRadius(reader.nextInt());
fan.setColor(reader.next());
fan.print();
}
}
}
class Fan{
//成员变量定义
public String getStatus() {
}
public void setStatus(String status) {
}
public int getSpeed() {
}
public void setSpeed(int speed) {
}
public int getRadius() {
}
public void setRadius(int radius) {
}
public String getColor() {
return color;
}
public void setColor(String color) {
}
public String getSpeedType() {
//根据速度,判断速度类型
return speedType;
}
public void print() {
//按格式要求输出相关信息
}
}
正确代码
package project4;
import java.util.Scanner;
public class FanTest {
public static void main(String[] args) {
int i,n;
Scanner reader=new Scanner(System.in);
n=reader.nextInt();
Fan fan;
for(i=0;i<n;i++) {
fan=new Fan();
fan.setStatus(reader.next());
fan.setSpeed(reader.nextInt());
fan.setRadius(reader.nextInt());
fan.setColor(reader.next());
fan.print();
}
}
}
class Fan{
//成员变量定义
private String Status,Color,speedType;
private int Speed,Radius;
public void print() {
//按格式要求输出相关信息
System.out.println("Status:"+Status+";"+
"Speed:"+getSpeedType()+";"+
"FanRadius:"+Radius+";"+
"FanColor:"+Color);
}
//打开状态
public String getStatus() {
return Status;
}
public void setStatus(String status) {
if(status.equals("ON")||status.equals("OFF")) {
Status = status;
}
}
//速度
public int getSpeed() {
return Speed;
}
public void setSpeed(int speed) {
if(Status.equals("ON")) {
if(speed>=0&&speed<=9) {
Speed = speed;
}
else if(speed<0) {
Speed=0;
}
else if(speed>9) {
Speed=9;
}
}
else Speed=0;
}
//风扇半径
public int getRadius() {
return Radius;
}
public void setRadius(int radius) {
if(radius>10) {
Radius=10;
}
else if(radius<5) {
Radius=5;
}
else {
Radius = radius;
}
}
//风扇颜色
public String getColor() {
return Color;
}
public void setColor(String color) {
if(color.equals("black")||color.equals("gray")||color.equals("white"))
{
Color = color;
}
else {
Color="black";
}
}
public String getSpeedType() {
//根据速度,判断速度类型
if( getSpeed()==0) {
speedType="quiet";
}
else if(getSpeed()>=1&&getSpeed()<=3){
speedType="slow";
}
else if(getSpeed()>=4&&getSpeed()<=7){
speedType="middle";
}
else if(getSpeed()>=8&&getSpeed()<=9){
speedType="quick";
}
return speedType;
}
}
错误和知识点
问题:
我的getter和setter是eclipse自动生成的,原来不用this也行啊,毕竟本质都是一样的,都是改变成员变量的值而不冲突,还有这道题的大多数getter都是可以不要的,因为没有用到嘛。
这道题没有遇到什么大麻烦,都能自己解决
知识点:
equals和“==”的比较,但是我没搞明白,有时间再补上
但是大概可能//基本数据类型用“==”, 引用数据类型用equals
而字符串是引用数据类型