Java: распечатать каждое число в массиве, не печатая его повторы?

Я пытаюсь распечатать массив, но распечатываю только отдельные числа в этом массиве. Например: если в массиве есть {5,5,3,6,3,5,2,1} тогда он напечатает {5,3,6,2,1}

каждый раз, когда я это делаю, я либо печатаю только неповторяющиеся числа, в этом примере {6,2,1}, либо печатаю их все. Тогда я сделал это не так, как предполагалось в задании

задание требует, чтобы я проверил массив, прежде чем помещать в него значение, чтобы увидеть, есть ли оно в первую очередь. Если нет, то добавьте его, а если нет, не делайте этого.

теперь я просто продолжаю выходить за пределы ошибки, или он просто печатает все.

любые идеи о том, что мне делать

import java.util.Scanner;

public class DistinctNums {

    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        int value;              
        int count = 0;  
        int[] distinct = new int[6];

        System.out.println("Enter Six Random Numbers: ");
        for (int i = 0; i < 6; i++) 
        {
            value = input.nextInt(); //places users input into a variable 
        for (int j = 0; i < distinct.length; j++) {
            if (value != distinct[j]) //check to see if its in the array by making sure its not equal to anything in the array
            {
                distinct[count] = value; // if its not equal then place it in array
                count++; // increase counter for the array
            }
        }
        }

        // Displays the number of distinct numbers and the  
        // distinct numbers separated by exactly one space
        System.out.println("The number of distinct numbers is " + count);
        System.out.print("The distinct numbers are");
        for (int i = 0; i < distinct.length; i++)
        {
            System.out.println(distinct[i] + " ");

        }
        System.out.println("\n");
    }
}

Разрешено ли вам использовать коллекции Java, например HashSet?

markspace 16.09.2018 01:16

@markspace, я не уверен. В этой главе мы сосредоточимся на одномерных массивах. они использовали list здесь и там, но я не видел никакого hashSet, но на данный момент я попробую что-нибудь

justin 16.09.2018 01:19

Если вы еще не научились этому, вероятно, вам не стоит его пробовать. (Ваш инструктор уже читал вам лекцию о мошенничестве?) Вы должны составить свой собственный набор: подумайте о том, чтобы разбить проблему на меньшую идею: как отследить, входит ли число в набор чисел (или в вашем случае , как узнать, напечатан ли номер еще).

markspace 16.09.2018 01:19

@markspace: да, но он побуждает нас обращаться за помощью в формы, если это необходимо. Обычно он не очень быстро отвечает на электронные письма, иначе я бы попросил его о помощи.

justin 16.09.2018 01:21

Я не хочу лишать вас образования: найдите набор чисел, который не работает, затем попробуйте выполнить код вручную и попытайтесь найти ошибку таким образом. Один из ваших чеков выглядит немного ненадежным. (Погуглите "ручное исполнение", чтобы узнать об этом.) Вы можете уменьшить количество вводов до трех, чтобы сделать этот процесс короче.

markspace 16.09.2018 01:25

Хороший способ подумать о реализации ан - сделать это вручную, а затем в основном воспроизвести эти шаги на компьютере. Это приводит к алгоритму, который обычно справляется с этой задачей. Конечно, никаких гарантий по эффективности. :П

ifly6 16.09.2018 02:00

Просто чтобы указать вам в правильном направлении ... if (value != distinct[j]) будет активировать count каждый раз, когда элемент на Array не равен value. Это не то, что вам нужно. Я бы сделал переменную boolean, чтобы определить, является ли элемент уникальным или нет, и в конце второго цикла for, если он уникален, добавьте его в Array.

GBlodgett 16.09.2018 02:05

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

justin 16.09.2018 05:10

Просто намек, а не полный ответ. Вы использовали i вместо j во внутреннем цикле. Проанализируйте то, что могло быть источником некорректной ошибки.

kumar shivang 16.09.2018 02:07
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
9
81
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете сделать это с помощью массива справки длиной 10, если порядок не важен.

    int [] intputArray = {5,5,3,6,3,5,2,1};
    int [] helpArray = new int[10];

    for(int i = 0; i < intputArray.length ; i++){
        helpArray[intputArray[i]]++;
    }

    for(int i = 0; i < helpArray.length ; i++){
        if (helpArray[i] > 0){
            System.out.print(i + " ");
        }
    }
Ответ принят как подходящий

Всегда помните - если вам нужна единственная копия элементов, вам нужно использовать установленный. Набор - это набор отдельных объектов.

В Java у вас есть что-то под названием HashSet. И если вы хотите, чтобы порядок сохранялся, используйте LinkedHashSet.

int [] intputArray = {5,5,3,6,3,5,2,1};
LinkedHashSet<Integer> set = new LinkedHashSet<Integer>();

//add all the elements into set
for(int number:intputArray) {
    set.add(number);    
}
for(int element:set) {
    System.out.print(element+" ");
}

Другие вопросы по теме