Ну, во-первых, если полученное вами число уникально, вы вставляете его в массив. Если он не уникален, вы не вставляете его в массив, но все равно увеличиваете индекс массива. Таким образом, вы собираетесь оставить его со значением инициализации по умолчанию, равным нулю.
Есть две проблемы с этим.
Нет способа отличить «дублирующее значение» от «нуля». Если ноль не является допустимым значением, тогда все в порядке. Если ноль допустим, это не сработает.
Более фундаментально: когда вы перебираете массив на выходе, вы выходите, когда достигаете первого нуля. Поэтому, если пользователь ввел, скажем, 1,2,4,2,3,4, вы собираетесь заполнить ваш массив 1,2,4,0,3,0. Затем, когда вы отобразите вывод, вы собираетесь написать 1,2,4, увидеть ноль и выйти и объявить, что есть 3 уникальных значения. Вы никогда не достигнете 3.
Я не знаю, как много они уже научили вас о доступных структурах данных. Лучшим решением было бы использовать ArrayList, а не массив, а затем добавлять его в ArrayList только тогда, когда входящее значение уникально. Если вы еще не узнали об этом, другой идеей будет сохранить счетчик количества уникальных значений по мере продвижения. Не вставляйте в массив, когда вы получите повторяющееся значение, а также не увеличивайте счетчик. То есть, иметь один счетчик, это позиция в массиве, которая равна количеству уникальных значений. Имейте другой счетчик, который является числом прочитанных входных значений. Это будет больше, чем позиция массива, как только вы увидите первый дубликат.
Включено, на одной детали, не связанной напрямую с вашим вопросом: почему в вашей функции isUnique вы зацикливаетесь на жестко заданной десятке, а затем у вас есть отдельный оператор IF для проверки длины массива и разрыва, когда дойти до конца? Было бы намного проще и легче читать, если бы вы закодировали:
public static boolean isUnique(int [] arry, int a)
{
for (int i = 0; i < arry.length)
{
if (arry [i] == a)
{
return false; //not unique
}
}
return true; // we made it through without finding a dup, must be unique
}
Или, если, как я предлагаю выше, у вас есть отдельная переменная, чтобы сказать, какая часть массива фактически заполнена:
public static boolean isUnique(int [] arry, int filled, int a)
{
// filled should always be <=arry.length, but we can check both just to be safe
for (int i = 0; i < arry.length && i<filled)
{
if (arry [i] == a)
{
return false; //not unique
}
}
return true; // we made it through without finding a dup, must be unique
}