Member 13430000 Ответов: 3

Уникальные числа в одном массиве


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

Что я уже пробовал:

Вот мой код:
package dan1;
 
import java.util.Scanner;
 
public class Nizovi7 {
    public static void main(String [] args){
        Scanner scanner = new Scanner(System.in);
        int counter = 0;
        int n = scanner.nextInt();
        int [] niz = new int [n];
        for(int i = 0;i < n;i++){
        	niz[i] = scanner.nextInt();
        }
        for(int i = 0;i<n;i++){
        	for(int j =0;j<n;j++){
        		if(niz[i]==niz[j]){
        			continue;
        		}
        		else{
        			counter++;
        		}
        	}
        }
        System.out.println(counter);
    }
}

Где же проблема?

3 Ответов

Рейтинг:
1

Graeme_Grant

Я не программист на Java, но если вы сначала сортируете массив в порядке возрастания или убывания, то тестирование и подсчет уникальных чисел очень просты.

Вот решение на языке C# :

int[] numbers = new int[] { 1, 5, 2, 9, 4, 7, 1, 5, 1, 9 };
Array.Sort(numbers);

int uniqueCount = 0, current = 0;
bool isRepeat = false;
foreach (var number in numbers)
{
    if (number != current)
    {
        if (current != 0 && !isRepeat)
            uniqueCount++;
        current = number;
        isRepeat = false;
    }
    else
    {
        isRepeat = true;
    }
}


Member 13430000

Ну, я думаю, что это хорошо, но мне нужно решение на java, потому что я не знаю c# и не знаю, как передать этот оператор if
если (число != ток)
{
if (current != 0 && !isRepeat)
uniqueCount++;
текущее количество;
isRepeat = ложь;
}

Graeme_Grant

Из того, что я могу прочитать, это работает так же: оператор if else в java[^]

Рейтинг:
1

OriginalGriff

Предположение: если вы сортируете массив, то одинаковые числа находятся рядом друг с другом, и их гораздо легче сосчитать...

А в Java есть встроенные массивы.Способ сортировки: Arrays.sort() в Java с примерами - GeeksforGeeks[^]


Graeme_Grant

дежавю? ;)

OriginalGriff

Я не видел вашего решения, пока печатал свое: кошка принесла мышь на полпути, а сама отказывается иметь с ними дело...

[no name]

Действительно Достойный Ответ Гриффа Сэр..

Рейтинг:
0

CPallini

Использовать в HashSet<Integer> класс: он обеспечивает автоматическую уникальность:

import java.util.HashSet;

public class Uniq
{
  public static void main(String [] args)
  {
    int ar[] = {1, 12, 53, 12, 24, 36, 17, 89, 12};

    HashSet<Integer> hs = new HashSet<Integer>();
    for (int i : ar)
    {
      hs.add(new Integer(i));
    }
    System.out.println(hs.size());
  }
}