Java循环之嵌套循环之淡水湖排名

目录

任务描述

相关知识

嵌套循环

使用 Java 解逻辑题

编程要求

代码展示


任务描述

本关任务:我国有 4 大淡水湖,分别是洞庭湖,洪泽湖,鄱阳湖和太湖。 A 说:洞庭湖最大,洪泽湖最小,鄱阳湖第三; B 说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三; C 说:洪泽湖最小,洞庭湖第三; D 说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。 请根据每人说的话求出 4 大湖的正确排名。

注意:4个湖不存在相等的情况,且每人只说对一句话。

相关知识

嵌套循环

嵌套循环就是一个循环中包含一个或者 n 个其他的循环,while、do…while 和 for 循环之间可以相互嵌套,比如 for 循环里面可以有 for 循环,for 循环里可以有 do…while 循环等。

嵌套循环使用案例:打印如下所示图形。

  1. *
  2. **
  3. ***

代码如下:

  1. public static void main(String[] args) {
  2. int i, j;
  3. for (i = 1; i <= 3; i++) { // 外层循环控制行数
  4. for (j = 1; j <= i; j++) { // 内层循环打印 *
  5. System.out.print("*"); // 注意不是 println
  6. }
  7. System.out.print("\n"); // 换行
  8. }
  9. }

从以上案例中可以得出,嵌套循环的外层循环迭代一次,即换行一次,内层循环执行一遍,即循环打印某行的所有*

使用 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,说明有三人说真话,一人说假话。

具体代码如下:

  1. public static void main(String[] args) {
  2. char t;
  3. int sum;
  4. // 从A开始循环,当sum等于3时,输出做了好事的人
  5. for (t='A'; t<='D'; t++) {
  6. sum = (t!='A'?1:0) + (t=='C'?1:0)+(t=='D'?1:0)+(t!='D'?1:0);
  7. if (sum==3)
  8. System.out.printf("做好事的人是"+t);
  9. }
  10. }

输出结果:

  1. 做好事的人是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 **********/

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值