2016-10-11 4 views
-1

특정 문자열을 검색하는 여러 단어가 포함 된 ArrayList를 검색하는 메서드를 만들려고합니다. String가 ArrayList의 단어와 같지 않으면 목록에 단어를 추가하고 단어가 목록에 이미 있으면 단어가 몇 번이나 나오는지 계산 한 다음 하나를 더 추가합니다. 마지막 String 입력. 이것은 내가 지금까지 내 코드에있어 무엇 : 전용 카운터 (창구)에 또 하나 개의 번호를 추가합니다 분명히이단어가 ArrayList의 특정 단어와 같은지 확인합니다.

public void leggTilOrd(String ord) { 
    if (Ord.contains(ord)) { 
     teller++; 
    } 

    if (!Ord.contains(ord)) { 
     Ord.add(ord); 
    } 

    System.out.println(teller); 
} 

, 그래서 제가 그것을 달성하기 위해 노력하고있어 상단에 1을 추가 목록에있는 특정 문자열의 모든 항목을 표시합니다. 여기가 내가 붙어있는 곳입니다.

편집 : 또한 Ord는 앞서 코드에서 작성한 ArrayList임을 언급해야합니다.

import java.util.Scanner; 
import java.io.File; 
import java.util.ArrayList; 

public class Ordliste { 

private ArrayList<String> Ord = new ArrayList<String>(); 
private int teller = 0; 


public void lesBok (String filnavn) throws Exception{ 
Scanner fil = new Scanner(new File(filnavn)); 
while(fil.hasNextLine()){ 
    Ord.add(fil.next()); 
} fil.close(); 
} 

public void leggTilOrd(String ord){ 
if(Ord.contains(ord)){ 
    teller++; 
    } if (!Ord.contains(ord)){ 
    Ord.add(ord); 
    } System.out.println(teller); 
    } 
    } 
+1

'특정 문자열의 모든 항목 상단에 1을 더하십시오.'라는 의미를 설명 할 수 있습니까? 목록에 단어를 추가 하시거나 증분 카운터를 원하십니까? – talex

+0

조금 혼란 스럽네요. 질문을 수정/명확하게 설명해 주시겠습니까? –

+0

목록의 예와 특정 사례의 결과는 달성하려는 것을 이해하는 데 도움이됩니다. 현재로서는 두 번째'if '를 제거하고'Ord.add (ord);;를 무조건 수행하기를 원할 것입니다. – Pshemo

답변

3

는 당신이 ArrayList를 사용하여 연결되어 있습니다 : 여기에 전체 코드는? 내가 대신 Map<String, Integer>를 사용하는 것이 좋습니다 맵에 값으로 특정 문자열의 발생 횟수를 저장하는 것 :

if (map.get(ord) != null) { 
    map.put(ord, map.get(ord) + 1); 
} 
else { 
    map.put(ord, 1); 
} 
3

대신이 일을, 당신은 설정

를 사용하여 목록에있는 문자열을 추적 할 수 있습니다
Set<String> set = new HashSet<String>(); 

public void leggTilOrd(String ord) { 
    if (set.contains(ord) != null) { 
     teller++; 
    } else { 
     Ord.add(ord); 
     set.add(ord); 
    } 

    System.out.println(teller); 
} 
+0

지도를 사용하는 것의 이점은 무엇입니까? 당신이 그것을 사용하고있는 것은지도가 이미 열쇠를 포함하고 있는지 확인하는 것입니다. OP가 자신의 목록을 사용하는 것과 정확히 같은 방식으로지도를 사용하고있는 것 같습니다. – nbrooks

+0

지도의 액세스 시간은 일정합니다 –

+1

그런 다음 ['Set'] (https : // docs. oracle.com/javase/8/docs/api/java/util/Set.html) 대신에? 그것은'Collection' (Map이 아닌)이라는 부가적인 이점과 함께 일정한 검색 시간도 갖는다. – nbrooks

0

정확하게 달성 할 수 있는지 확실하지 않은 경우 다른 단어를 추가 할 때마다 teller을 증가 시킵니까?

이것은 내가 시도하고 있다고 믿는 것을 수행하는 간단한 방법이며, 올바른 방향으로 가야합니다.

import java.util.Arrays; 
import java.util.List; 

public class test 
{ 
    static int teller = 0; 

    static List<String> words = Arrays.asList("dog", "cat", "dog"); 

    public static void main(String[] args) 
    { 
    System.out.println(teller); 
    addAndCount("dog"); 
    System.out.println(teller); 
    teller = 0; 
    addAndCount("cat"); 
    System.out.println(teller); 
    teller = 0; 
    addAndCount("fish"); 
    System.out.println(teller); 
    } 

    public static void addAndCount(String newWord) 
    { 
    teller += 1 + Math.toIntExact(
     words.stream().filter(string -> newWord.equals(string)).count()); 
    words.add(newWord); 
    } 
} 
관련 문제