面向对象程序设计实验(Java)-实验4.问题 A: 风扇模拟

题目描述

请定义一个名为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

而字符串是引用数据类型

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值