2016-10-11 20 views
-1

特定のStringを検索するいくつかの単語を含むArrayListを検索するメソッドを作成しようとしています。 StringがArrayList内の任意の単語と等しくない場合、リストに単語が追加され、リストに単語がすでに存在する場合は、単語が何回出現したかを数えて1つを追加します。最後の文字列入力。 これは私が私のコードでは、これまで持っているものです:単語がArrayList内の特定の単語と等しいかどうかを調べる

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

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

    System.out.println(teller); 
} 

これは明らかにのみカウンター(窓口係)に1つのより多くの数を追加しますので、私は上に1を追加し、それを達成しようとしているものをリスト内のその特定のStringのすべての出現のうち、これが私が立ち往生している場所です。

編集: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

リストの例と特定のケースの結果は、達成したいことを理解するのに役立ちます。今のところ、2番目の '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を使用して、リスト内の文字列を追跡することができます

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); 
    } 
} 
関連する問題