2017-11-03 148 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。 –

相关问题