Java 简单家居开关系统

1.需求:

面向对象编程实现智能家居控制系统(简单的开关)

2.实现思路

1.定义设备类:创建设备对象代表家里的设备

JD类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor//家电类
public class JD {private String name;private boolean status;//状态}

Air类:

// 空调
public class Air extends JD {public Air(String name, boolean b) {super(name, b);}
}

 TV类:

// 电视
public class TV extends JD {public TV(String name, boolean b) {super(name, b);}
}

Light类:

// 灯
public class Light extends JD {public Light(String name, boolean b) {super(name, b);}
}

赋值:

        JD[] jds = new JD[3];jds[0] = new TV ("小米电视", true);jds[1] = new Air ("小米空调", false);jds[2] = new Light ("小米台灯", false);

 

 

2.创建开关接口 press() ,并在 JD 类中实现

开关接口:

// 接口
public interface Switch {void press();// 开关抽象方法
}

实现:

    @Override//实现按钮public void press() {status = !status;}

3.创建智能控制类和对象,进行开关操作(操作具体实现类)

Smart类:打印状态和进行开关操作

public class Smart {public void control(JD jd) {//控制开关System.out.println(jd.getName() + " 当前的状态: "+(jd.isStatus()?"开":"关"));System.out.println("按下开关");jd.press();//调用接口System.out.println(jd.getName() + " 当前的状态: "+(jd.isStatus()?"开":"关"));}public void print(JD[] jds) {//打印所有开关的状态for (int i = 0; i < jds.length; i++) {System.out.println((i+1) + jds[i].getName() + " 当前的状态: "+(jds[i].isStatus()?"开":"关"));}System.out.println("=======================");}
}

4.提示用户操作:使用循环,让用户输入设备编号,然后根据编号找到设备对象,调用开关方法

        Smart s = new Smart();while (true){//打印所有设备信息s.print(jds);System.out.println("请输入序号选择要控制的设备(exit 退出系统)");Scanner sc = new Scanner(System.in);String n = sc.next();switch (n) {case "1":s.control(jds[0]);break;case "2":s.control(jds[1]);break;case "3":s.control(jds[2]);break;case "exit":System.out.println("退出系统");return;default:System.out.println("输入有误,请重新输入");}}

 3.结果输出

 4.完整代码

Test类:

import java.util.Scanner;public class Test {public static void main(String[] args) {JD[] jds = new JD[3];jds[0] = new TV ("小米电视", true);jds[1] = new Air ("小米空调", false);jds[2] = new Light ("小米台灯", false);Smart s = new Smart();while (true){//打印所有设备信息s.print(jds);System.out.println("请输入序号选择要控制的设备(exit 退出系统)");Scanner sc = new Scanner(System.in);String n = sc.next();switch (n) {case "1":s.control(jds[0]);break;case "2":s.control(jds[1]);break;case "3":s.control(jds[2]);break;case "exit":System.out.println("退出系统");return;default:System.out.println("输入有误,请重新输入");}}}
}

JD类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor//家电类
public class JD implements Switch {private String name;private boolean status;//状态@Override//实现按钮public void press() {status = !status;}
}

 Air类:

// 空调
public class Air extends JD {public Air(String name, boolean b) {super(name, b);}
}

Light类:

// 灯
public class Light extends JD {public Light(String name, boolean b) {super(name, b);}
}

TV类:

// 电视
public class TV extends JD {public TV(String name, boolean b) {super(name, b);}
}

Switch接口:

// 接口
public interface Switch {void press();// 开关抽象方法
}

Smart类:

public class Smart {public void control(JD jd) {//控制开关System.out.println(jd.getName() + " 当前的状态: "+(jd.isStatus()?"开":"关"));System.out.println("按下开关");jd.press();//调用接口System.out.println(jd.getName() + " 当前的状态: "+(jd.isStatus()?"开":"关"));}public void print(JD[] jds) {//打印所有开关的状态for (int i = 0; i < jds.length; i++) {System.out.println((i+1) + jds[i].getName() + " 当前的状态: "+(jds[i].isStatus()?"开":"关"));}System.out.println("=======================");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/17564.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Github客户端工具github-desktop使用教程

文章目录 1.客户端工具的介绍2.客户端工具使用感受3.仓库的创建4.初步尝试5.本地文件和仓库路径5.1原理说明5.2修改文件5.3版本号的说明5.4结合码云解释5.5版本号的查找 6.分支管理6.1分支的引入6.2分支合并6.3创建测试仓库6.4创建测试分支6.5合并分支6.6合并效果查看6.7分支冲…

3D Gaussian Splatting的全面理解

1.概述 高斯展开是一种表示 3D 场景和渲染新视图的方法,在“用于实时辐射场渲染的 3D 高斯展开” 中介绍。它可以被认为是类似 NeRF 的模型的替代品,就像过去的 NeRF 一样,高斯飞溅导致了许多新的研究工作,他们选择将其用作各种用例的 3D 世界的底层表示。那么它有什么特别…

Arcgis地图实战三:自定义导航功能的实现

文章目录 1.最终效果预览2.计算两点之间的距离3.将点线画到地图上4.动态展示点线的变化5.动态画线6.动态画点 1.最终效果预览 2.计算两点之间的距离 let dis this.utilsTools.returnDisByCoorTrans(qdXYData, zdXYData, "4549")当距离小于我们在配置文件中预设置的…

【Mysql】Mysql的多表查询---多表联合查询(中)

1、外连接查询 外连接 查询分为左外连接&#xff08;left outer join&#xff09;, 右外连接查询&#xff08;right outer join&#xff09; &#xff0c;满外连接查询&#xff08;full outer join&#xff09;. 注意&#xff1a;oracle 里面有full join &#xf…

Linux:进程状态

文章目录 前言一、初识fork1.1 fork函数的介绍1.2 fork出的子进程存在形式1.3 写时拷贝 二、进程的状态2.1 Linux内核源代码2.2 理解内核链表(重要)2.3 运行状态2.4 阻塞状态2.5 挂起状态 三、Z&#xff08;zombie&#xff09;状态 &#xff0c;僵尸进程四、 孤儿进程总结 前言…

qml显示加载嵌入QWidget窗口

本篇博客介绍如何在qml界面里显示QWidget窗口,开发环境Qt6.5.3 qml. 视频讲解:https://edu.csdn.net/learn/40003/654001?spm=3001.4143 qml和QWidget是两套独立的开发方式,二者的窗口可以相互嵌套显示,本篇博客介绍把QWidget窗口封装为动态库,然后在QML的窗口里显示出来…

【MySQL】多表查询

5. 多表查询 5.1 多表关系 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上分为三种&#…

2024-11-16 串的存储结构

一、顺序存储。 1.首先定一个静态数组&#xff0c;然后定义i记录串的实际长度。&#xff08;缺点&#xff1a;长度不可变&#xff09; 2.使用malloc申请动态空间&#xff0c;定义指针指向串的地址。&#xff08;需手动ferr&#xff09; 方案一&#xff1a; 数组末尾记录长度 …

nodejs21: 快速构建自定义设计样式Tailwind CSS

Tailwind CSS 是一个功能强大的低级 CSS 框架&#xff0c;只需书写 HTML 代码&#xff0c;无需书写 CSS&#xff0c;即可快速构建美观的网站。 1. 安装 Tailwind CSS React 项目中安装 Tailwind CSS&#xff1a; 1.1 安装 Tailwind CSS 和相关依赖 安装 Tailwind CSS: npm…

Windows 安装Docker For Desktop概要

Windows 安装docker 下载部分的工作需要使用科学技术。如果没有可以联系博主发送已下载好的文件。 本文档不涉及技术的讲解&#xff0c;仅有安装的步骤。 准备工作 包含下载与环境准备&#xff0c;下载的文件仅下载&#xff0c;在后续步骤进行安装。 微软关于wsl的文档&…

对称加密算法DES的实现

一、实验目的 1、了解对称密码体制基本原理 2、掌握编程语言实现对称加密、解密 二、实验原理 DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位&#xff0c;产生最大 64 位的分组大小。这是一个迭代的分组密码&#xff0c;使用称为 Feistel 的技术&#xff0c;其中将加密…

三十八、Python(pytest框架-上)

一、介绍 框架&#xff08;framework&#xff09;&#xff1a;框架是为解决一类事情的功能集合。 pytest框架&#xff1a;pytest框架是单元测试框架&#xff0c;这是第三方框架想要使用必须要安装&#xff0c;可以使用pytest来作为自动化测试执行框架&#xff0c;用来管理测试…

《Django 5 By Example》阅读笔记:p165-p210

《Django 5 By Example》学习第6天&#xff0c;p165-p210总结&#xff0c;总计46页。 一、技术总结 1.bookmarks项目 (1)登录认证 作者这里使用的是Django自带的auth。 (2)上传头像 图片处理&#xff0c;使用Pillow。 (3)扩展user 扩展user模型与自带的user使用外键进行…

shell基础(3)

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团…

JVM面试题总结

1.介绍一下JVM的内存结构 JDK1.8及以后&#xff0c;JVM主要分为元空间、堆、虚拟机栈、本地方法栈、程序计数器五个部分&#xff0c;另外还有一个直接内存部分&#xff0c;是直接属于操作系统的。 其中元空间、堆是线程共享的&#xff0c;虚拟机栈、本地方法栈、程序计数器是线…

小新Pro 14 AHP9 2024款(83D3)原装oem预装系统Win11恢复安装包下载

适用品牌机型 &#xff1a;LENOVO联想【83D3】 链接&#xff1a;https://pan.baidu.com/s/10RAxNdvYPWJ21b_4--Y7Xw?pwdo5ju 提取码&#xff1a;o5ju 联想原装出厂Windows11系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office365办公软…

【论文笔记】Towards Privacy-Aware Sign Language Translation at Scale

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Towards Privacy-Aware Si…

Spring:bean的配置

对于bean的配置中&#xff0c;主要会讲解bean基础配置,bean的别名配置,bean的作用范围配置(重点),这三部分内容&#xff1a; bean基础配置 id与class配置 bean的name属性 bean的别名配置 bean作用范围scope配置 scope使用后续思考 介绍完scope属性以后&#xff0c;我们…

贴代码框架PasteForm特性介绍之markdown和richtext

简介 PasteForm是贴代码推出的 “新一代CRUD” &#xff0c;基于ABPvNext&#xff0c;目的是通过对Dto的特性的标注&#xff0c;从而实现管理端的统一UI&#xff0c;借助于配套的PasteBuilder代码生成器&#xff0c;你可以快速的为自己的项目构建后台管理端&#xff01;目前管…

【RK3588 Linux 5.x 内核编程】-内核中的链表(Linked List)及使用

内核中的链表(Linked List)及使用 文章目录 内核中的链表(Linked List)及使用1、Linked List介绍2、Linux内核中的链表3、链表的操作3.1链表初始化3.2 创建节点3.3 添加节点3.4 删除节点3.5 替换节点3.6 移动节点3.7 链表旋转3.8 链表检测3.9 链表分割与合并3.10 链表遍历4、驱…