2014-10-06 58 views
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; 
} 
+1

在'main'的第一行中,File()的含義是什麼?創建一個新的'File'對象? – 2014-10-06 01:05:13

+0

第50行,「Map 」'的目的是什麼? '''是多餘的,而且'Map'需要兩個類型參數。 – 2014-10-06 01:07:12

+0

可能應該有_Map > women選擇匹配()方法 – paisanco 2014-10-06 01:10:45

回答

1

此異常....

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
      at StableMarriage.main(StableMarriage.java:26)" 

...發生,因爲您在代碼中忽略了一些編譯錯誤,並着手想運行的程序。一些IDE(如Eclipse)允許您執行此操作。這是一個糟糕的想法。

返回到您的IDE並更改首選項以防止將來發生這種情況。 Eclipse首選項位於啓動器首選項中:在「運行/調試>啓動」首選項頁面中查找「如果項目包含錯誤,則繼續啓動」。

然後找到並修復編譯錯誤。

相關問題