1

文字列配列で重複する単語を見つけようとしています。

比較のための私のコードは次のとおりです。

   for ( int j = 0 ; j < wordCount ; j++)
   {    
       for (int i = wordCount-1 ; i > j ; i--)
       {       
           if (stringArray[i].compareTo(stringArray[j]) == 0 && i!=j)
           {
               //duplicate
               duplicates++;
           }
       }
   }
   wordCount -= duplicates;
   System.out.print("\nNumber of words, not including duplicates: " + wordCount);

if ステートメントでは、 と表示されますNullPointerException。これは何を意味するのでしょうか?これを行うより良い方法はありますか?私は単純にやってみました

if (stringArray[i] == stringArray[j] && i!=j)

しかし、それは私に間違った答えを与え続けました。

4

5 に答える 5

1

パフォーマンスを向上させるために、次のようにすることができます。

public int getDuplicateCount(Integer[] arr){
     int count = 0;   
     Set<Integer> set = new HashSet<Integer>();
     for (int i = 0; i < arr.length; i++) {
         if (set.contains(arr[i]))
             count++;
         set.add(arr[i]);
      }
      return count;
 }
于 2012-10-18T04:53:40.003 に答える
0

NullPointerException は、配列メンバーの 1 つが設定されていない (つまり、null である) ことを意味します。

== を使用して文字列を比較しないでください。

あなたは正しい道を進んでいます -stringArray[]設定されていないメンバーが含まれている可能性があります。簡単な修正は、値を使用する前に null チェックを行うことです。

for ( int j = 0 ; j < wordCount ; j++)
   {    
       for (int i = wordCount-1 ; i > j ; i--)
       {       
           String wordi = stringArray[i];
           String wordj = strinArray[j];
           // If both are null it won't count as a duplicate.
           // (No real need to check wordj - I do it out of habit)
           if (wordi != null && wordj != null && wordi.compareTo(wordj) == 0 && i!=j)
           {
               //duplicate
               duplicates++;
           }
       }
   }
   wordCount -= duplicates;
   System.out.print("\nNumber of words, not including duplicates: " + wordCount);
于 2012-10-18T04:46:28.130 に答える
0

つまり、配列のどこかにエントリがありstringArray[i]ます。他の場所で論理エラーが発生し、配列の一部の要素が正しく設定されていない可能性があります。nullnull

配列に null が含まれている場合は、メソッドを呼び出す前に明示的に確認する必要がありますstringArray[i]

if (stringArray[i] == null){
    // Do whatever
} else if (stringArray[i].compareTo(stringArray[j]) == 0 && i!=j) {
    //duplicate
    duplicates++;
}
于 2012-10-18T04:48:42.657 に答える
0

ここで、特定の文字列の一意の要素数を見つけようとしていることがわかります。より良い解決策として、HashSet を使用することをお勧めします。

public int getUniqueElements(String str)
{
  HashSet<Character> hSet = new HashSet<>();

  // iterate given string, hSet only adds unique elements to hashset
  for(int i = 0; i < str.length() ; i++
    hSet.add(str.charAt(i));

  return hSet.size();
}
于 2016-10-15T03:12:01.630 に答える
0

Null ポインターは、配列に null 値があるためである可能性があります。

重複を見つける必要がある同じ配列を反復しているため、コードが機能していません

次のコードを使用して、配列内の重複する単語をカウントできます。

public class WordCount {


public static void main(String args[]){
    String stringArray[]={"a","b","c","a","d","b","e","f"};

    Set<String> mySet = new HashSet<String>(Arrays.asList(stringArray));

    System.out.println("Number of duplicate words: "+ (stringArray.length -mySet.size()));

    System.out.println("Number of words, not including duplicates: "+ mySet.size());
}

}
于 2013-01-02T14:53:10.327 に答える