目录
任务描述
本关任务:我国有 4 大淡水湖,分别是洞庭湖,洪泽湖,鄱阳湖和太湖。 A 说:洞庭湖最大,洪泽湖最小,鄱阳湖第三; B 说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三; C 说:洪泽湖最小,洞庭湖第三; D 说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。 请根据每人说的话求出 4 大湖的正确排名。
注意:4个湖不存在相等的情况,且每人只说对一句话。
相关知识
嵌套循环
嵌套循环就是一个循环中包含一个或者 n 个其他的循环,while、do…while 和 for 循环之间可以相互嵌套,比如 for 循环里面可以有 for 循环,for 循环里可以有 do…while 循环等。
嵌套循环使用案例:打印如下所示图形。
*
**
***
代码如下:
public static void main(String[] args) {
int i, j;
for (i = 1; i <= 3; i++) { // 外层循环控制行数
for (j = 1; j <= i; j++) { // 内层循环打印 *
System.out.print("*"); // 注意不是 println
}
System.out.print("\n"); // 换行
}
}
从以上案例中可以得出,嵌套循环的外层循环迭代一次,即换行一次,内层循环执行一遍,即循环打印某行的所有*
。
使用 Java 解逻辑题
一个班中有 4 位同学外出,其中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做的好事。 A 说:不是我; B 说:是 C; C 说:是 D; D 说:C 胡说。 已知有三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。
第一步:创建变量分别代表 A,B,C,D; 第二步:把每个人说的话转化为逻辑语句,比如 A 说的话可表示为!='A'
,B 说的话可表示为=='C'
,C 说的话可表示为=='D'
,D 说的话可表示为!='C'
; 第三步:使用三元运算符把说话的真假转化为具体数值,比如 1 代表说话为真, 0 代表说话为假; 第四步:把四个人说的话都转化成三元运算符(话为真赋值为 1,为假则赋值为 0),然后对所有三元运算符的值求和,如果等于 3,说明有三人说真话,一人说假话。
具体代码如下:
public static void main(String[] args) {
char t;
int sum;
// 从A开始循环,当sum等于3时,输出做了好事的人
for (t='A'; t<='D'; t++) {
sum = (t!='A'?1:0) + (t=='C'?1:0)+(t=='D'?1:0)+(t!='D'?1:0);
if (sum==3)
System.out.printf("做好事的人是"+t);
}
}
输出结果:
做好事的人是C
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
代码展示
public class LakeTest {
public static void main(String[] args) {
int a, b, c, d; // 定义4个人说的话
int dongting, hongze, poyang, tai; // 定义4个湖
// 请在Begin-End间编写代码
/********** Begin **********/
// 使用嵌套循环依次遍历各个湖的4种排名情况,用逻辑表达式表达每人说的话,输出具体排名
for(dongting=1;dongting<5;dongting++) {
for(hongze=1;hongze<5;hongze++) {
if(dongting==hongze)continue;
for(poyang=1;poyang<5;poyang++) {
if(poyang==dongting||poyang==hongze)continue;
tai = 10 - dongting - hongze - poyang; //因为1+2+3+4=10 哦!
a = (dongting==1?1:0)+(hongze==4?1:0)+(poyang==3?1:0);
b = (dongting==4?1:0)+(hongze==1?1:0)+(poyang==2?1:0)+(tai==3?1:0);
c = (dongting==3?1:0)+(hongze==4?1:0);
d = (dongting==3?1:0)+(hongze==2?1:0)+(poyang==1?1:0)+(tai==4?1:0);
if((a==1)&&(b==1)&&(c==1)&&(d==1)) {
System.out.println("洞庭湖排名:" + dongting);
System.out.println("洪泽湖排名:" + hongze);
System.out.println("鄱阳湖排名:" + poyang);
System.out.println("太湖排名:" + tai);
}
}
}
}
/********** End **********/
}
}