2013-04-12 2 views
0

기본적으로 문자열을 키 (단일 문자) 및 정수 변수 (문자 빈도)로 사용하여 맵을 구현하려고합니다.문자 빈도 계산을위한 맵 구현

프로그램 실행시 부정확 한 주파수가 나옵니다. 내가 잘못 가고있는 사람을 누구나 볼 수 있습니까?

Integer value = 0; 

    while(scan.hasNext()){ 

     letter = scan.next(); 

     if(wordMap.containsKey(letter)) wordMap.put(letter, value++); 

     else wordMap.put(letter, new Integer(value++)); 
    } 

이지도에 값을 넣어

while(scan.hasNext()){ 

     letter = scan.next(); 

     //get current count 
     int value; 
     if(wordMap.containsKey(letter)){ 
      value = wordMap.get(letter); 
     }else { 
      value = 0; 
     } 
     // increment count 
     value++; 
     wordMap.put(letter, value); 
    } 

해야 또는 아무것도 다른, 를 재설정하거나 마술에 속성을 재 동기화하지 않습니다

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Scanner; 


public class WordCount { 

    public static void main(String[] args) throws FileNotFoundException{ 
     File f1 = new File("article.txt"); 
     Scanner scan = new Scanner(f1).useDelimiter("|"); 

     Map<String, Integer> wordMap = new HashMap<String, Integer>(); 
     String letter; 
     Integer value = 0; 

     while(scan.hasNext()){ 

      letter = scan.next(); 

      if(wordMap.containsKey(letter)) wordMap.put(letter, value++); 

      else wordMap.put(letter, new Integer(value++)); 
     } 
     System.out.println(wordMap); 


    } 

} 

답변

3

은 여기에 있습니다 : 문은 다음과 같아야 경우

while(scan.hasNext()){ 
    letter = scan.next(); 

    if(wordMap.containsKey(letter)) wordMap.put(letter, value++); // problem 

    else wordMap.put(letter, new Integer(value++)); 
} 

이 : 조금 더 좋을

if (wordMap.containsKey(letter)) { 
    Integer prev = wordMap.get(letter); 
    wordMap.put(letter, prev++); 
} else { 
    wordMap.put(letter, 1); 
} 

비록, 당신은 단지 하나 개의 검색을 수행 할 것 지도에 다음과 같이 입력합니다.

Integer prev = wordMap.get(letter); 
if (prev == null) { 
    wordMap.put(letter, 1); 
} else { 
    wordMap.put(letter, prev++); 
} 
1

이 비트는 무엇이 잘못되었는지 우리 (적어도 자바에서는 그렇지 않다) 그래서 우리는 맵을 수정할 때마다 맵으로부터 값을 얻어야한다.

그렇지 않으면 우리가하는 모든 작업이지도에 임의의 값을 지정하는 것입니다. 당신의 버전에서 당신은 문자의 마지막 인스턴스가 만났을 때의 문자 카운트를 얻었을 것입니다. 그것은 문제처럼 보인다