2017-05-09 16 views
0

私はN文字列とQクエリも文字列であるプログラムを作成しました。目的はN文字列に各クエリが何回出現するかをと決定することです。ArrayList内のJavaカウント文字列の出現

このは私のコードである:

import java.util.Scanner; 
import java.util.ArrayList; 

public class SparseArrays{ 


// count the number of occurances of a string in an array 
int countStringOccurance(ArrayList<String> arr, String str){ 
    int count = 0; 
    for (int i=0; i<arr.size(); i++) { 
     if (str==arr.get(i)) { 
      count += 1; 
     } 
    } 
    return count; 
} 


void start(){ 
    // scanner object 
    Scanner input = new Scanner(System.in); 

    // ask for user to input num strings 
    System.out.println("How many string would you like to enter?"); 
    // store the number of strings 
    int numStrings = input.nextInt(); 
    // to get rid of extra space 
    input.nextLine(); 

    // ask user to enter strings 
    System.out.println("Enter the "+numStrings+" strings."); 
    ArrayList<String> stringInputArray = new ArrayList<String>(); 
    for (int i=0; i<numStrings; i++) { 
     stringInputArray.add(input.nextLine()); 
    } // all strings are in the stringInputArray 

    // ask user to input num queries 
    System.out.println("Enter number of queries."); 
    int numQueries = input.nextInt(); 
    // to get rid of extra space 
    input.nextLine(); 

    // ask user to enter string queries 
    System.out.println("Enter the "+numQueries+" queries."); 
    ArrayList<String> stringQueriesArray = new ArrayList<String>(); 
    for (int i=0; i<numQueries; i++) { 
     stringQueriesArray.add(input.nextLine()); 
    } // all string queries are in the stringQueriesArray 

    for (int i=0; i<stringQueriesArray.size(); i++) { 
     int result = 
     countStringOccurance(stringInputArray,stringQueriesArray.get(i)); 
     System.out.println(result); 
    } 
} 

void printArr(ArrayList<String> arr){ 
    for (int i=0; i<arr.size(); i++) { 
     System.out.println(arr.get(i)); 
    } 
    System.out.println(" "); 
} 

public static void main(String[] args) { 
    SparseArrays obj = new SparseArrays(); 
    obj.start(); 
} 
} 

私は私のコードを実行し、例えば4つの文字列を入力すると、{ABC、ABC、ABC、DEF}ならびに{ABC、DEF、GHI} Iとして3つのクエリ3つの "abc"、1 "def"と0 "ghi"があるので、私の出力に3,1、0を得ることを期待しています。ただし、すべてのクエリで出力はゼロです。

私はこの問題は私に文字列が文字列のArrayListの中で繰り返される回数を与えることになっている方法 int型countStringOccurance(のArrayList編曲、文字列str)からであるかなり確信しています。

ここに何か不足していますか?

+1

は、このような文字列を比較_don't_ - > '(STR == arr.get(I))であれば、'、する必要があります - > 'if(str.equals(arr.get(i)))' –

+0

@Aominéありがとう!それが問題を解決しました。 – Amir

答えて

5

==ではなく、String.equals()を使用して文字列を比較してください。代わりに:

if (str1==str2) // WRONG!!! 

書き込み

if (str1.equals(str2)) // Correct 
+0

比較に大文字小文字を区別する必要がない場合は、 '.equalsIgnoreCase()'もあります。 – dat3450

2
// count the number of occurances of a string in an array 
int countStringOccurance(ArrayList<String> arr, String str){ 
    int count = 0; 
    for (int i=0; i<arr.size(); i++) { 
     if (str.equals(arr.get(i))) { //<-- change your condition to this 
      count += 1; 
     } 
    } 
    return count; 
} 

もっと読む What is the difference between == vs equals() in Java?

0

の使用.equals()二つのオブジェクトではなく、==間。そして、エラーが発生した場合は、例えば、単純なSystem.out.println()というように、重要な部分にログトレースを入れて、各オブジェクトと変数が十分に満たされているかどうかを確認してください。あなたはこの種の問題を解決するのに役立つことができます!

0

これを扱う組み込み方法、Collections#frequencyすでにあります:

int occurrences = Collections.frequency(list, "String here"); 
関連する問題