Я пытаюсь распечатать массив, но распечатываю только отдельные числа в этом массиве. Например: если в массиве есть {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");
}
}
@markspace, я не уверен. В этой главе мы сосредоточимся на одномерных массивах. они использовали list здесь и там, но я не видел никакого hashSet, но на данный момент я попробую что-нибудь
Если вы еще не научились этому, вероятно, вам не стоит его пробовать. (Ваш инструктор уже читал вам лекцию о мошенничестве?) Вы должны составить свой собственный набор: подумайте о том, чтобы разбить проблему на меньшую идею: как отследить, входит ли число в набор чисел (или в вашем случае , как узнать, напечатан ли номер еще).
@markspace: да, но он побуждает нас обращаться за помощью в формы, если это необходимо. Обычно он не очень быстро отвечает на электронные письма, иначе я бы попросил его о помощи.
Я не хочу лишать вас образования: найдите набор чисел, который не работает, затем попробуйте выполнить код вручную и попытайтесь найти ошибку таким образом. Один из ваших чеков выглядит немного ненадежным. (Погуглите "ручное исполнение", чтобы узнать об этом.) Вы можете уменьшить количество вводов до трех, чтобы сделать этот процесс короче.
Хороший способ подумать о реализации ан - сделать это вручную, а затем в основном воспроизвести эти шаги на компьютере. Это приводит к алгоритму, который обычно справляется с этой задачей. Конечно, никаких гарантий по эффективности. :П
Просто чтобы указать вам в правильном направлении ... if (value != distinct[j]) будет активировать count каждый раз, когда элемент на Array не равен value. Это не то, что вам нужно. Я бы сделал переменную boolean, чтобы определить, является ли элемент уникальным или нет, и в конце второго цикла for, если он уникален, добавьте его в Array.
@GBlodgett спасибо за предложение. вы были правы, используя логическое значение для определения полученного уникального числа. потребовалось некоторое время, чтобы исправить ошибки, но теперь все в порядке.
Просто намек, а не полный ответ. Вы использовали i вместо j во внутреннем цикле. Проанализируйте то, что могло быть источником некорректной ошибки.




Вы можете сделать это с помощью массива справки длиной 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+" ");
}
Разрешено ли вам использовать коллекции Java, например
HashSet?