#java #arrays #printing
Вопрос:
Я пишу программу, которая отслеживает количество неуникальных элементов в массиве и печатает их вместе с их частотой. Проблема с моим текущим кодом заключается в том, что он будет печатать повторяющиеся числа более одного раза. Я просто хочу напечатать не уникальный номер и его частоту один раз, но я не могу понять, как это сделать. Вот моя текущая логика. Любая помощь будет очень признательна.
int numNonUnique = 0;
int N = A.length;
for (int i = 0; i < N; i )
{
int count=0;
for (int j = 0; j < N; j )
{
if (A[i] == A[j])
count ;
}
if(count>1)
{
numNonUnique = count;
int currentNum = A[i];
System.out.println(currentNum " -> " numNonUnique);
}
}
Комментарии:
1. Попробуйте добавить их в a
hashset()
и использоватьcontains()
и оператор «если», чтобы увидеть, есть ли это число: если его нет, распечатайте его, если есть, пропустите его(continue
). Полезная ссылка: использование contains() .2. Вам нужно отслеживать, был ли персонаж замечен ранее или нет
3. Есть ли другой способ сделать это, который не включает в себя hashset(). мы еще не научились этому в нашем классе, поэтому я не решаюсь его использовать. я чувствую, что есть более простой способ сделать это.
4. хорошо, вы не хотите использовать какое-либо хранилище?
5. я не знаю, что вы подразумеваете под хранением? моя идея состояла в том, чтобы, возможно, сохранить повторяющиеся значения в массиве после того, как они будут напечатаны один раз, но я не могу понять, как сравнить ранее напечатанные значения со значением, которое будет напечатано. имейте в виду, что я начал изучать java всего месяц назад.
Ответ №1:
//Initialize array
int[] A = {-1, 2, 3, 1, 2, 4, 7, 8, 7, -1};
int numNonUnique = 0;
//Array frequency will store frequencies of element
int [] frequency = new int [A.length];
int visited = -1;
for(int i = 0; i < A.length; i ){
int count = 1;
for(int j = i 1; j < A.length; j ){
if(A[i] == A[j]){
count ;
//To avoid counting same element again
frequency[j] = visited;
}
}
if(frequency[i] != visited) frequency[i] = count;
}
//Displays the frequency of each element present in array
for(int i = 0; i < frequency.length; i ){
if(frequency[i] != visited amp;amp; frequency[i]>1){
numNonUnique ;
System.out.println(A[i] " -> " frequency[i]);
}
}
System.out.println("Non unique count : " numNonUnique);
Комментарии:
1. хорошо, большое вам спасибо, есть ли способ сделать это, если -1 может быть числом в массиве? просто любопытно, потому что я хочу лучше понять концепцию.
2. Сначала посмотрите объяснение, а затем давайте разберемся
3. итак, теоретически я мог бы сделать -1 любым числом или, может быть, символом? это просто какой-то маркер для отслеживания мест, где цифры повторяются?
4. ДА. Но поскольку мы используем массив типа int
int[] A
, вы не можете добавить символ или строку, нам нужно добавить любое числовое число, которое может быть9999
или-99
5. хорошо, спасибо. надеюсь, когда я сдам задание, мой профессор не будет использовать массив со значением sentinel, которое я использую. но сделать это каким-то другим способом кажется слишком сложным.