一个逻辑编程问题解决不了,大家帮帮忙
我国有四大淡水湖。A说:洞庭湖最大,洪泽湖最小,潘阳湖第三。
B说:洪泽湖最大,洞庭湖最小,潘阳湖第二,太湖第三。
C说:洪泽湖最小,洞庭湖第三。
D说:潘阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
4个人每个人仅答对了一个,请编程给出4个湖从大到小的顺序。
程序代码:
public class FourLargestFreshwaterLake {
public static void main(String[] args) {
for (int d = 1; d <= 4; d++) { // "洞庭湖"
for (int h = 1; h <= 4; h++) { // "洪泽湖"
for (int b = 1; b <= 4; b++) { // "潘阳湖"
for (int t = 1; t <= 4; t++) { // "太湖"
if (meetAllConditions(d, h, b, t)) {
String[] fourLake = new String[5];
fourLake[d] = "洞庭湖";
fourLake[h] = "洪泽湖";
fourLake[b] = "潘阳湖";
fourLake[t] = "太湖";
for (String lake : fourLake) {
if (lake != null && lake.length() > 0) {
System.out.println(lake);
}
}
}
}
}
}
}
}
private static boolean meetAllConditions(int d, int h, int b, int t) {
if (d == h || d == b || d == t
|| h == b || h == t || b == t) {
return false;
}
if (!meetACondition(d, h, b, t, 0)) { return false; }
if (!meetBCondition(d, h, b, t, 0)) { return false; }
if (!meetCCondition(d, h, b, t, 0)) { return false; }
if (!meetDCondition(d, h, b, t, 0)) { return false; }
return true;
}
private static boolean meetACondition(int d, int h, int b, int t, int meetTimes) {
if (d == 1) { meetTimes++; } // 洞庭湖最大
if (h == 4) { meetTimes++; } // 洪泽湖最小
if (b == 3) { meetTimes++; } // 潘阳湖第三
return (meetTimes == 1); // 每个人仅答对了一个
}
private static boolean meetBCondition(int d, int h, int b, int t, int meetTimes) {
if (h == 1) { meetTimes++; } // 洪泽湖最大
if (d == 4) { meetTimes++; } // 洞庭湖最小
if (b == 2) { meetTimes++; } // 潘阳湖第二
if (t == 3) { meetTimes++; } // 太湖第三
return (meetTimes == 1); // 每个人仅答对了一个
}
private static boolean meetCCondition(int d, int h, int b, int t, int meetTimes) {
if (d == 3) { meetTimes++; } // 洪泽湖最小
if (h == 4) { meetTimes++; } // 洞庭湖第三
return (meetTimes == 1); // 每个人仅答对了一个
}
private static boolean meetDCondition(int d, int h, int b, int t, int meetTimes) {
if (b == 1) { meetTimes++; } // 潘阳湖最大
if (t == 4) { meetTimes++; } // 太湖最小
if (h == 2) { meetTimes++; } // 洪泽湖第二
if (d == 3) { meetTimes++; } // 洞庭湖第三
return (meetTimes == 1); // 每个人仅答对了一个
}
}