0
我已經編寫了此代碼來顯示給定人羣和他們的偏好之間的穩定婚姻。我相信我的代碼是完整的,但是我收到的錯誤「未解決的編譯問題」異常錯誤
「異常在線程‘主要’java.lang.Error的:未解決的問題,編譯:在StableMarriage.main(StableMarriage.java:26)」
錯誤在主要方法開始的第20行列出,我認爲這個錯誤是由於讀取數組的問題,但我不知道如何解決它。
public class StableMarriage {
static List<String> men = Arrays.asList(
new String[] {"John", "Robert", "Brian", "Stephen", "George"});
static List<String> women = Arrays.asList(
new String[]{"Nancy", "Joyce", "Patricia", "Anne", "Susan"});
static Map<String, List<String>> menChoose = new HashMap<String, List<String>>(){{
put("John", Arrays.asList("Susan", "Joyce", "Nancy", "Patricia", "Anne"));
put("Robert", Arrays.asList("Nancy", "Anne", "Joyce", "Susan", "Patricia"));
put("Brian", Arrays.asList("Patricia", "Susan", "Joyce", "Anne", "Nancy"));
put("Stephen", Arrays.asList("Joyce", "Anne", "Susan", "Nancy", "Patricia"));
put("George", Arrays.asList("Nancy", "Joyce", "Patricia", "Susan", "Anne"));
}};
static Map<String, List<String>> womenChoose = new HashMap<String, List<String>>(){{
put("Nancy", Arrays.asList("John", "Brian", "Stephen", "Robert", "George"));
put("Joyce", Arrays.asList("George", "John", "Stephen", "Robert", "Brian"));
put("Patricia", Arrays.asList("George", "Brian", "Robert", "Stephen", "John"));
put("Anne", Arrays.asList("George", "Stephen", "John", "Brian", "Robert"));
put("Susan", Arrays.asList("Brian", "George", "Stephen", "John", "Robert"));
}};
public static void main(String[] args) throws Exception {
File();
Map<String, String> matches = match(men, menChoose, womenChoose);
for(Map.Entry<String, String> couple:matches.entrySet())
System.out.println(couple.getKey() + " engaged to " + couple.getValue());
if(checkMatches(men, women, matches, menChoose, womenChoose)) {
System.out.println("Stable Matches");
} else {
System.out.println("Unstable");
}
String tmp = matches.get(women.get(0));
matches.put(women.get(0), matches.get(women.get(1)));
matches.put(women.get(1), tmp);
System.out.println(women.get(0) + " and " + women.get(1) + " have switched partners");
if(checkMatches(men, women, matches, menChoose, womenChoose)) {
System.out.println("Stable");
} else {
System.out.println("Unstable");
}
}
private static Map<String, String> match(List<String> men2,
Map<String, List<String>> menChoose2,
Map<String, List<String>> womenChoose2) {
return null;
}
public static Map<String, String> match(List<String> men, Map<String, List<String>> menChoose, Map<String>> womenChoose) {
Map<String, String> engagedTo = new TreeMap<String, String>();
List<String> freeMen = new LinkedList<String>();
freeMen.addAll(men);
while(!freeMen.isEmpty()){
String currentMan = freeMen.remove(0);
List<String> manPrefers = menChoose.get(currentMan);
for(String woman:manPrefers){
if(engagedTo.get(woman) == null) {
engagedTo.put(woman, currentMan);
break;
} else {
String otherMan = engagedTo.get(woman);
List<String> womanPrefers = womenChoose.get(woman);
if(womanPrefers.indexOf(currentMan) < womanPrefers.indexOf(otherMan)) {
engagedTo.put(woman, currentMan);
freeMen.add(otherMan);
break;
}
}
}
}
return engagedTo;
}
private static boolean checkMatches(List<String> men, List<String> women, Map<String, String> matches,
Map<String, List<String>> menChoose, Map<String, List<String>> womenChoose) {
if(!matches.keySet().containsAll(women))
return false;
if(!matches.values().containsAll(men))
return false;
Map<String, String> invertedMatches = new TreeMap<String, String>();
for(Map.Entry<String, String> couple:matches.entrySet())
invertedMatches.put(couple.getValue(), couple.getKey());
for(Map.Entry<String, String> couple:matches.entrySet()) {
List<String> shePrefers = womenChoose.get(couple.getKey());
List<String> sheLikes = new LinkedList<String>();
sheLikes.addAll(shePrefers.subList(0, shePrefers.indexOf(couple.getKey())));
List<String> hePrefers = menChoose.get(couple.getValue());
List<String> heLikes = new LinkedList<String>();
heLikes.addAll(hePrefers.subList(0, hePrefers.indexOf(couple.getKey())));
for(String man:sheLikes) {
String manWife = invertedMatches.get(man);
List<String> manPrefers = menChoose.get(man);
if(manPrefers.indexOf(manWife) > manPrefers.indexOf(couple.getKey())) {
System.out.printf("%s likes %s better than %s and %s likes %s better than their current partner \n",
couple.getKey(), man, couple.getValue(), man, couple.getKey());
return false;
}
}
for(String woman:heLikes) {
String sheHusband = matches.get(woman);
List<String> womanPrefers = womenChoose.get(woman);
if(womanPrefers.indexOf(sheHusband) > womanPrefers.indexOf(couple.getValue())) {
System.out.printf("%s likes %s better than %s and %s like %s better than their current partner \n",
couple.getValue(), woman, couple.getKey(), woman, couple.getValue());
return false;
}
}
}
return true;
}
在'main'的第一行中,File()的含義是什麼?創建一個新的'File'對象? – 2014-10-06 01:05:13
第50行,「Map」'的目的是什麼? '''是多餘的,而且'Map'需要兩個類型參數。 –
2014-10-06 01:07:12
可能應該有_Map> women選擇匹配()方法 –
paisanco
2014-10-06 01:10:45