2014-12-07 3 views
-2

키를 String으로, 값을 String의 LinkedList로 HashMap으로 작성했습니다.HashMap에서 값 찾기 및 바꾸기?

문자열과 값인 키를 사용하는 메소드를 작성하고 싶습니다. 그런 다음 지정된 키와 일치하는 HashMap에서 키를 찾은 다음 지정된 String을 문자열 목록에 추가합니다.

** 다른 사람에게 감사하지만 다른 오류가 있습니다. 이 줄의 "Likes.put (s, Likes.get (s) .add (fav));." 그것은 말합니다 :

Error: no suitable method found for put(java.lang.String,boolean) 
    method java.util.HashMap.put(java.lang.String,java.util.LinkedList<java.lang.String>) is not applicable 
     (actual argument boolean cannot be converted to java.util.LinkedList<java.lang.String> by method invocation conversion) 
    method java.util.AbstractMap.put(java.lang.String,java.util.LinkedList<java.lang.String>) is not applicable 
     (actual argument boolean cannot be converted to java.util.LinkedList<java.lang.String> by method invocation conversion) 

"실제 인수는 부울입니다"라고 말할 수는 없습니다. 나는이 문에

class Recomnder { 

    Recomnder(){ 
    Likes.put("tom",new LinkedList()); 
    Recomnder.addLikes("tom","movie tovi"); 
    } 

    HashMap<String,LinkedList<String>> Likes = new HashMap<String,LinkedList<String>>(); 


void addLikes (String name, String fav){ 
    for (String s : Likes.keySet()) { 
     if (s.equals(name)) 
     Likes.put(s,Likes.get(s).add(fav)); 
     } 
    } 
    } 
+0

컴파일러 메시지는 매우 명확합니다. 직접 디버깅 할 수 있어야합니다. – Dici

+0

메소드 addLikes()에 대해 static void ...를 사용해야합니다. – MJSt

답변

0

정적으로 메소드를 변경하는 것 외에. 다음 명령문을 변경하십시오.

전에
Likes.put (s, Likes.get (s) .add (fav));

이후
Likes.get (s) .add (fav);

위의 코드에서 Likes.get (s) .add (fav)는 부울 값을 반환하고이 반환 값이 Map에 추가됩니다. 따라서 컴파일러는 오류를 제공합니다.

그냥 Likes.get (s)에 String을 추가하면 참조에서 Java가 작동하면서 트릭을 수행하게됩니다. 이것은 예상대로 작동합니다.

1

문제가없는 부울 LinkedList의를 삽입 할 :

Recomnder.addLikes("tom","movie tovi"); 

당신이 정적 방법으로 addLikes에 액세스 할 컴파일러를 말하고있다 그런 식으로. 그러나 정적 메서드로 정의되어 있지 않습니다. Recomnder의 인스턴스에서만 addLikes를 호출 할 수 있습니다. 따라서 다음과 같이 변경하면

addLikes("tom","movie tovi"); 

으로 변경해야합니다.
btw. Java 명명 규칙을 준수하십시오. 항상 작은 문자로 인스턴스 변수 이름을 시작하는 데 익숙해집니다 (예 : 좋아요 대신 좋아함). 그런 식으로 실수를 훨씬 쉽게 찾아 낼 수 있습니다.

1

인스턴스에서 인스턴스 메서드를 호출해야합니다. addLikes 메서드는 인스턴스 메서드입니다 (정적 메서드는 없습니다). 메소드를 호출하기 전에 클래스의 인스턴스를 만들어야합니다.