题目
晚上小明在灯下做作业的时候,突然停电,小明去拉了两下开关。
妈妈回来后,到小明房间又拉了三下开关。
等来电后,小明房间的灯( ??)亮 / 不亮
分析
问题包含两个重要参数:
灯开关的状态(亮true; 不亮false);
开关灯的动作(用 int i 记录次数);
过程
灯下做作业:亮(初始 i=0)
停电
拉两下开关:不亮(i=1)–>亮(i=2)
拉三下开关:不亮(i=3)–>亮(i=4)–>不亮(i=5)
综上
灯初始为亮;
拨动5次开关;
结果不亮;
i 为奇数表示不亮,偶数表示亮
方法1 - 代码
public class Homework0416 {
public static void main(String[] args) {
//声明并初始化
int i = 0; //记录开关动作,此时为亮
int N = 5; //总开关次数
System.out.println("停电前,小明的灯:亮");
for(i = 1; i <= N; i++) {
//判断并输出,奇数灯不亮;偶数灯亮
System.out.println("第" + i + "次拉开关,灯:" + (i % 2 == 0 ? "亮" : "不亮"));
}
System.out.println("等来电后,小明房间的灯:" + ((i - 1) % 2 == 0 ? "亮" : "不亮"));
}
}
方法1 - 运行结果
停电前,小明的灯:亮
第1次拉开关,灯:不亮
第2次拉开关,灯:亮
第3次拉开关,灯:不亮
第4次拉开关,灯:亮
第5次拉开关,灯:不亮
等来电后,小明房间的灯:不亮
方法2 - 代码
加入了随机数,用来模拟每次开关动作时,灯泡烧坏的概率
//整个思路:灯寿命大于0---->进行开、关动作---->进行开关动作的时候,判断是否有烧坏的可能
import java.util.Random;
public class Light02 {
/*主方法入口*/
public static void main(String[] args) {
//声明并初始化
int i = 0; //记录开关动作,此时为亮
int N = 5; //总开关次数
System.out.println("停电前,小明的灯:亮");
light(i,N); //调用light方法
}
/*定义名为light的方法*/
public static void light(int i, int N) {
Random random = new Random(); //创建随机数对象
int life = random.nextInt(100); //声明定义灯泡的剩余寿命
System.out.println("灯泡剩余寿命为" + life + "h");
if( life > 0){ //灯泡寿命大于0
move(i , N); //调用move方法
}else{ //灯泡寿命小于0
System.out.println("灯泡已坏,请更换灯泡!");
System.out.println("等来电后,小明房间的灯:不亮。(灯泡寿终正寝)");
}
}
/*定义名为move的方法,表示开关动作*/
public static void move(int i , int N) {
Random random = new Random(); //创建随机数对象
for(i = 1; i <= N; i++) {
int p = random.nextInt(100); //定义每次进行开关动作时,灯泡烧坏的概率,p大于等于30,则表示没有烧坏
boolean b = probability( i, p);
if(b == true){
continue;
}else{
break;
}
}
if (i == N + 1) //若 i = 6,表示for循环执行完;若 i != 6,表示烧坏
{
System.out.println("等来电后,小明房间的灯:" + (( i - 1) % 2 == 0 ? "亮" : "不亮。(处于关灯状态)"));
}else{
System.out.println("等来电后,小明房间的灯:不亮。(灯泡烧坏)");
}
}
/*定义名为probability的方法,表示烧坏概率*/
public static boolean probability(int i , int p) {
if( p >= 30){ //判断,产生的随机数大于等于30,则表示没有烧坏
System.out.println("第" + i + "次拉开关,灯:" + ( i % 2 == 0 ? "亮" : "不亮") ); //判断并输出,奇数灯不亮;偶数灯亮
return true; //没有烧坏,返回true
}
else{ //判断,产生的随机数小于等于30,则表示烧坏
System.out.println("灯泡烧坏,请更换灯泡!");
return false; //烧坏,返回false
}
}
}
方法2 - 运行结果
------------------------------------------------------------------------------------------
停电前,小明的灯:亮
灯泡剩余寿命为32h
第1次拉开关,灯:不亮
第2次拉开关,灯:亮
灯泡烧坏,请更换灯泡!
等来电后,小明房间的灯:不亮。(灯泡烧坏)
------------------------------------------------------------------------------------------
停电前,小明的灯:亮
灯泡剩余寿命为80h
灯泡烧坏,请更换灯泡!
等来电后,小明房间的灯:不亮。(灯泡烧坏)
------------------------------------------------------------------------------------------
停电前,小明的灯:亮
灯泡剩余寿命为8h
第1次拉开关,灯:不亮
第2次拉开关,灯:亮
第3次拉开关,灯:不亮
第4次拉开关,灯:亮
第5次拉开关,灯:不亮
等来电后,小明房间的灯:不亮。(处于关灯状态)
------------------------------------------------------------------------------------------