尝试在java中使用包含方法时出错[复制](Error when trying to use contains method in java [duplicate])

这个问题在这里已经有了答案:

“找不到符号”编译错误是什么意思? 7个答案

尝试使用java中的contains方法编译类时出现此错误。 该错误说,它找不到符号,考虑到我以前多次使用contains方法而没有任何问题,我发现它有点奇怪。

我收到的错误如下所示:

这是我的代码:

import java.util.*; public class DVDAdministrasjon { private Map personerOversikt; public void nyPerson(String navn){ for(int t = 0; t < personerOversikt; t++){ if(!personerOversikt.get(t).equals(navn)){ Person newPerson = new Person(navn); personerOversikt.put(navn, newPerson); } else { System.out.println("Personen er allerede registrert!"); } } } public void kjop(Map kjoptDVD, Map eier){ int teller = 0; Scanner tastatur = new Scanner(System.in); System.out.println("Hvem har kjopt DVD-en?"); String navn = tastatur.nextLine(); System.out.println("Hva er tittelen paa DVD-en?"); String filmNavn = tastatur.nextLine(); if(personerOversikt.contains(navn)){ kjoptDVD.put(navn, filmNavn); eier.put(navn, filmNavn); } else { System.out.println("Personen er ikke registrert enda!"); } } public void laan (Map utlaantDVD, Map eier, Map laantDVD){ Scanner tastatur = new Scanner (System.in); System.out.println("Hvem vil laane DVD-en?"); String navn = tastatur.nextLine(); System.out.println("Hvem skal DVD-en laanes fra?"); String navn2 = tastatur.nextLine(); System.out.println("Hva er tittelen paa DVD-en?"); String filmNavn = tastatur.nextLine(); if(eier.contains(filmNavn)){ if(personerOversikt.contains(navn2)){ laantDVD.put(navn, filmNavn); utlaantDVD.put(navn2, filmNavn); } else{ System.out.println(navn2 + " er ikke registrert"); } } else{ System.out.println(navn2 + " eier ikke filmen"); } } }

这是被引用的类:

import java.util.*; public class Person { private String navn; private Map kjoptDVD; private Map utlaantDVD; private Map laantDVD; private Map dvdOversikt; public Person (String navn){ this.navn = navn; } }

This question already has an answer here:

What does a “Cannot find symbol” compilation error mean? 12 answers

I'm getting this error when trying to compile a class using the contains method in java. The error says that it cannot find the symbol, which I find a bit weird considering I've used the contains method several times before without any issues.

The error I'm getting looks like this:

Here's my code:

import java.util.*; public class DVDAdministrasjon { private Map personerOversikt; public void nyPerson(String navn){ for(int t = 0; t < personerOversikt; t++){ if(!personerOversikt.get(t).equals(navn)){ Person newPerson = new Person(navn); personerOversikt.put(navn, newPerson); } else { System.out.println("Personen er allerede registrert!"); } } } public void kjop(Map kjoptDVD, Map eier){ int teller = 0; Scanner tastatur = new Scanner(System.in); System.out.println("Hvem har kjopt DVD-en?"); String navn = tastatur.nextLine(); System.out.println("Hva er tittelen paa DVD-en?"); String filmNavn = tastatur.nextLine(); if(personerOversikt.contains(navn)){ kjoptDVD.put(navn, filmNavn); eier.put(navn, filmNavn); } else { System.out.println("Personen er ikke registrert enda!"); } } public void laan (Map utlaantDVD, Map eier, Map laantDVD){ Scanner tastatur = new Scanner (System.in); System.out.println("Hvem vil laane DVD-en?"); String navn = tastatur.nextLine(); System.out.println("Hvem skal DVD-en laanes fra?"); String navn2 = tastatur.nextLine(); System.out.println("Hva er tittelen paa DVD-en?"); String filmNavn = tastatur.nextLine(); if(eier.contains(filmNavn)){ if(personerOversikt.contains(navn2)){ laantDVD.put(navn, filmNavn); utlaantDVD.put(navn2, filmNavn); } else{ System.out.println(navn2 + " er ikke registrert"); } } else{ System.out.println(navn2 + " eier ikke filmen"); } } }

Here's the referenced class:

import java.util.*; public class Person { private String navn; private Map kjoptDVD; private Map utlaantDVD; private Map laantDVD; private Map dvdOversikt; public Person (String navn){ this.navn = navn; } }

最满意答案

错误的原因很简单:Map接口没有名为contains的方法

你需要使用Map.containsKey或Map.containsValue,但它包含的是没有定义,并且不会工作。

此外,Map是一个接口,所以也许你正在实现的类是一个HAshMap ..所以containsKeyContainsValue是使用内部等于hascode的方法,以防万一你有一个像PErson类或类似的自定义类。

并且不要使用原始类型与集合...

片段containsValue在HashMap类中...

public boolean containsValue(Object value) { Node<K,V>[] tab; V v; if ((tab = table) != null && size > 0) { for (int i = 0; i < tab.length; ++i) { for (Node<K,V> e = tab[i]; e != null; e = e.next) { if ((v = e.value) == value || (value != null && value.equals(v))) return true; } } } return false; }

The reason of the error is quite easy: Map interface doesn't have a method named contains

you need to use either Map.containsKey or Map.containsValue but contains as it is is not defined and is not going to work..

Additionally, Map is an interface so maybe the class you are implementing is a HAshMap.. so containsKey and ContainsValue are methods using internally equals and hascode just in case you have a custom class in there like PErson class or similar..

and don't use raw types with the Collection...

snippet containsValue in the HashMap class...

public boolean containsValue(Object value) { Node<K,V>[] tab; V v; if ((tab = table) != null && size > 0) { for (int i = 0; i < tab.length; ++i) { for (Node<K,V> e = tab[i]; e != null; e = e.next) { if ((v = e.value) == value || (value != null && value.equals(v))) return true; } } } return false; }

更多推荐