2017-11-03 149 views
0

我正在嘗試執行Java教程「Building Java Programs」第4版中提到的Java問題。問題是第11章中的編號11,頁面751:如何在單獨的主類中調用HashSet方法

編寫一個名爲symmetricSetDifference的方法,該方法接受兩個集作爲參數並返回一個包含它們的對稱差的新集(也就是包含在兩個例如:集合[1,4,7,9]和[2,4,5,6,7]之間的差異是[1,2,5,6,9]。

的symmetricSetDifference方法:

public static Set<Integer>symmetricSetDifference(Set<Integer>list1, Set<Integer>list2) { 
     Set<Integer>set1 = new HashSet<>(); 
     set1.add(1); 
     set1.add(4); 
     set1.add(7); 
     set1.add(9); 

     Set<Integer>set2 = new HashSet<>(); 
     set2.add(2); 
     set2.add(4); 
     set2.add(5); 
     set2.add(6); 
     set2.add(7); 

     Set<Integer>diff = new HashSet<>(set1); 
     diff.addAll(set2); 
     Set<Integer>curr = new HashSet<>(set1); 
     curr.retainAll(set2); 
     diff.removeAll(curr); 

     System.out.println(diff); 
     return diff; 

    } 

這是主要的類。這是在一個單獨的文件:

public class TestPointClass { 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 

     newSet = MyUtils.symmetricSetDifference(List1, List2); 
} 

的問題是,我得到一個「非法表達式」的錯誤了一系列「找不到標識錯誤一起我想知道如果任何人有什麼我可以做任何指針。 ?(我檢查過是否有任何重複的問題,並且找不到任何類似的東西,因此如果有問題,請事先道歉)

+0

https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html。顯然,你不明白什麼方法論點。閱讀我鏈接到的教程。 –

+1

確保你確實傳入'Set'而不是'List'。另外,發佈堆棧跟蹤在尋求幫助時很有用。 – linuxNoob

+0

檢查。我已經將方法行更改爲public static Set symmetricSetDifference(Set set1,Set set2)並刪除了兩個hashSet調用,但我仍然無法調用主類中的方法。 –

回答

0

在方法外部設置兩個Sets(set1,set2)並將它們添加爲參數:

Set<Integer>set1 = new HashSet<>(); 
    set1.add(1); 
    ... 

    Set<Integer>set2 = new HashSet<>(); 
    set2.add(2); 
    ... 

    MyUtils.symmetricSetDifference(set1 , set2); 

如果你想使用你必須返回的類型這樣做:

Set<Integer> result = MyUtils.symmetricSetDifference(set1 , set2); 
+0

JB Nizet和IEE1394 linuxNoob謝謝你們(或者如果你們中的一個是加侖的話)。你是對的。我正在做的方法,而不是主要的集。一旦我這樣做了,再次檢查方法調用和方法論證本身,它就起作用了。再次感謝您處理像我這樣的Newbie scrum。 –

相關問題