一道逻辑题(关于张村李村说谎的)java实现

来源:互联网 发布:linux mkdir创建目录 编辑:程序博客网 时间:2024/05/01 08:28

import java.util.ArrayList;
import java.util.List;

/*
 * 有两个村,张村和李村
 * 张村的人星期一三五说谎
 * 李村的人星期二四六说谎
 * 一人问,今天周几?结果两个存的人都会打"前天是我说谎的日子".
 */
public class Test10 {
 public static void main(String[] args) {
  // 张村说谎日子
  List<Integer> zhang = new ArrayList<Integer>();
  zhang.add(1);
  zhang.add(3);
  zhang.add(5);
  // 李村说谎的日子
  List<Integer> li = new ArrayList<Integer>();
  li.add(2);
  li.add(4);
  li.add(6);

  // 张村今天是否是说谎的日子
  boolean lieTodayZhang = false;
  // 李村今天是否是说谎的日子
  boolean lieTodayLi = false;
  // 张村前天是否是说谎的日子
  boolean lieAnteayerZhang = false;
  // 李村前天是否是说谎的日子
  boolean lieAnteayerLi = false;

  // 定义一周的for循环
  for (int today = 1; today < 8; today++) {
   // 前天
   int anteayer = getAnteayer(today);
   // 下面做张村李村今天和昨天能否说谎
   lieTodayZhang = zhang.contains(today);
   lieTodayLi = li.contains(today);

   lieAnteayerZhang = zhang.contains(anteayer);
   lieAnteayerLi = li.contains(anteayer);
            //这里我感觉写的也不好
   //lie必须保证在两个村子按照以下判断都成立时才能为true
   //如果张村或者李村今天是不能说谎的日子,不用判断就能成立
   //这里我是根据记录出来的规律,推倒的先判断张村今天如果不是说谎日,就要保证他前天不能说谎
   //判断成立后在判断李村,和上面两行描述一样
   boolean lie = false;

   if (lieTodayZhang == false) {
    if (lieAnteayerZhang == true) {
     lie = true;
    } else {
     lie = false;
    }
   }
   if (lieTodayLi == false) {
    if (lieAnteayerLi == true) {
     lie = true;
    } else {
     lie = false;
    }
   }

   if (lie) {
    System.out.println(today);
   }
  }

 }

 // 获得对于今天来讲的前天
 private static int getAnteayer(int today) {
  // 这里需要一个循环数组
  // 先用一种烂方法代替

  if (today == 1) {
   return 6;
  } else if (today == 2) {
   return 7;
  } else if (2 < today && today < 8) {
   return today - 2;
  } else {
   System.out.println("程序有问题才会跑这里来");
   return -1;
  }
 }
}

 

 

第一次发有点逻辑上判断的小问题 重新发下

原创粉丝点击