我正在開發一個程序,其中創建了兩個列表,并且必須對它們進行比較以查找是否有兩個相同的 RECURS。我正在測試它是否有效(并且必須使用這些方法)但我一直遇到同樣的問題;找不到標志。public class Duplicate {public Duplicate(){}; static ArrayList<Recurs> findDuplicate(ArrayList<Recurs> l1, ArrayList<Recurs> l2){ ArrayList<Recurs> l3 = new ArrayList<>(); for(int i=0; i<l1.size(); i++){ for(int j=0; j<l2.size();j++){ if(l2.get(i).equals(l1.get(j))){ l3.add(l1.get(i)); } } } return l3; } }這段代碼應該可以工作。順便說一句,我編寫了一個名為 Recurs 的類,據說它也可以工作(我做了另一個測試,在我創建了一個 equals 方法的地方工作正常)?,F在問題來了。public class Test { public static void main (String[] args){ Recurs o = new Recurs(3, "a"); Recurs e = new Recurs(2, "b"); Recurs m = new Recurs(4, "a"); Recurs n = new Recurs(2, "b"); ArrayList<Recurs> l1= new ArrayList<>(); l1.add(o); l1.add(e); ArrayList<Recurs> l2= new ArrayList<>(); l2.add(m); l2.add(n); ArrayList<Recurs> l3 = new ArrayList<>(findDuplicate(l1, l2)) }}我創建了一個測試,它應該向我展示這部分正在工作,但我在最后一行代碼遇到了問題,因為它告訴我它找不到 findDuplicate。我是使用 Java 的新手,如果有人發現問題,他們能否指出它發生的原因?
2 回答

慕村9548890
TA貢獻1884條經驗 獲得超4個贊
靜態方法“屬于”它們所編寫的類。
這里:
findDuplicate(l1, l2)
嘗試在 Test 類中調用(靜態)方法!因為它是一個不合格的調用,所以編譯器會在發生調用的類(即Test)內部查找。findDuplicate()
但是Test類中沒有方法!
相反,它來自 Duplicate 類,因此您需要:
Duplicate.findDuplicate(l1, l2)
(或者,您可以對該方法進行靜態導入,但對于新手學習的東西,我建議避免這樣做)
當然,該方法也必須對您的 Test 類可見。因此,要么這兩個類應該在同一個包中,要么正如各種評論中提到的那樣,該方法需要public修飾符。

蝴蝶不菲
TA貢獻1810條經驗 獲得超4個贊
如果沒有任何修飾符,您的方法將只能被它自己的類、子類和包訪問。為了使您的測試可以訪問它,您可以將其公開,但習慣上測試類通過添加與他們測試的類共享相同的包
package reverse.domain.name.app;
在你的班級和你的測試班之上。
其次,您的方法是靜態的,這意味著它與類相關聯,而不是與它的實例相關聯。這意味著你應該通過它的類名來引用它:
Duplicate.findDuplicate()
添加回答
舉報
0/150
提交
取消