Intereting Posts
Как я могу использовать Ant taskdef, который зависит от lib, импортированного плющом Как захватить событие System.exit? Java: введите матрицу, используя GridLayout Зачем нам нужен конструктор копирования и когда мы должны использовать конструктор копирования в java Как получить моментальный снимок карты с мероприятия по созданию места? Остановить сканер от чтения пользовательского ввода java? как проверить правильность ввода данных пользователя (class Java Scanner) Дублированные варианты исполнения Java: какой порядок предпочтений? Почему (javax.servlet.) SingleThreadModel устарел? Библиотека STUN, TURN, ICE для Java проверка наличия файла в определенном каталоге Почему Java 7 Files.walkFileTree бросает исключение при столкновении с файлом tar на удаленном диске Развертывание файлов classов Java без перезапуска JBoss Как вызвать внешнюю dll-функцию из java-кода Преобразование одиночного символа в Строке в нижний регистр

как сравнивать элементы в массиве строк в java?

Я пытаюсь найти повторяющиеся слова в массиве строк.

Вот мой код для сравнения:

for ( int j = 0 ; j  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) 

но это все время давало мне неправильные ответы.

Вы можете сделать это так:

 public int getDuplicateCount(Integer[] arr){ int count = 0; Set set = new HashSet(); for (int i = 0; i < arr.length; i++) { if (set.contains(arr[i])) count++; set.add(arr[i]); } return count; } 

NullPointerException означает, что один из ваших членов массива не установлен (т.е. он равен нулю)

Не используйте == для сравнения строк.

Вы на правильном пути – возможно, что stringArray[] содержит некоторые элементы, которые не установлены. Eacy fix – это нулевая проверка перед использованием значений.

 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); 

Это означает, что stringArray[i] имеет значение null , т. stringArray[i] Ваш массив имеет null запись в нем где-то. Возможно, что у вас есть логическая ошибка в другом месте, и некоторые элементы массива неправильно настроены.

Если ваш массив законно содержит нули, вы должны явно проверить это, прежде чем пытаться вызвать методы на stringArray[i] :

 if (stringArray[i] == null){ // Do whatever } else if (stringArray[i].compareTo(stringArray[j]) == 0 && i!=j) { //duplicate duplicates++; } 

Нулевой указатель может быть вызван тем, что у вас есть нулевое значение в вашем массиве.

Ваш код не работает, потому что вы используете тот же массив, на котором вам нужно найти дубликаты

вы можете использовать следующий код для подсчета повторяющихся слов в массиве.

 public class WordCount { public static void main(String args[]){ String stringArray[]={"a","b","c","a","d","b","e","f"}; Set mySet = new HashSet(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()); } } 

Здесь я вижу, что вы пытаетесь найти количество уникальных элементов для данной строки. Я бы предложил использовать HashSet для лучшего решения.

 public int getUniqueElements(String str) { HashSet 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(); }