Простые числа в массиве с отдельными цифрами

Я исключительно новичок в программировании, но я работаю над улучшением своих навыков программиста. В настоящее время я работаю над проблемой, которую я дал себе, где я пытаюсь принять переменное число, и сделать каждый из его цифр отдельным числом в массиве. Меня не волнует порядок цифр, поэтому, если они меняются, то для меня это не имеет значения. Я знаю, что люди задавали этот вопрос много раз, но они всегда, кажется, используют много вещей, которые я не понимаю. Поскольку моя школа не предлагает Java-курсы, я знаю только то, что узнала сама по себе, поэтому, если бы вы могли объяснить любые термины, которые вы используете в коде, который не является чрезвычайно тривиальным, это было бы замечательно. Прямо сейчас, я написал:

int number = 1234567890;
    while (number > 0) {
        System.out.println(number%10);
        number = number/10; 

Это отлично подходит для печати цифр по отдельности, но я не могу понять, как их добавить в массив. Я очень благодарен за любую помощь, которую вы можете дать, и, пожалуйста, имейте в виду, что я предпочитаю простоту по малым размерам. Заранее спасибо!

Постскриптум Некоторые ответы, которые я видел по аналогичным вопросам, включают в себя то, что я считаю массивами строк. Для того, чтобы часть программы, над которой я работал, все еще работает, я считаю, что мне нужно использовать массив целых чисел. Если вам интересно, остальная часть кода используется для определения того, все ли цифры в массиве различны, чтобы достичь конечного результата определения того, являются ли цифры числа отличными. Это выглядит так:

int repeats=0;
int[] digitArray;
digitArray = new int[10];
for (int i = 0; i < digitArray.length; i++) 
    for (int j = 0; j < digitArray.length; j++)
        if ((i != j) && (digitArray[i]==digitArray[j])) unique = unique+1;
System.out.println(unique==0);
7
nl ja de
Да, это динамический массив, который поддерживается массивом. docs.oracle.com/javase/6/docs/api/java/util/ArrayList.‌ HTML
добавлено автор kosa, источник
В этом случае мы не знаем размер раньше времени, поэтому я думаю, что аррайалист будет хорош здесь. Если вы используете arraylist, все, что вам нужно сделать, будет yourList.add (число% 10); из-за autoboxing, java5 и дальше он будет работать.
добавлено автор kosa, источник
@MatthewTyler .. Именно. Я добавил ссылку на документацию в первой строке моего ответа. Вы можете это проверить.
добавлено автор Rohit Jain, источник
. Integer.toString (п) .chars() отображение (а-> а-'0' ) ToArray ().
добавлено автор David S Alderson, источник
Это действительно потрясающее место! Я рассмотрю этот массив массивов. Похоже, что это не только помогло мне решить эту проблему, но также может быть весьма полезным в будущем. Большое вам спасибо за вашу помощь.
добавлено автор user2049256, источник
Я действительно не знаю, что такое arraylist ... Это похоже на массив, но с другим именем и динамическим размером?
добавлено автор user2049256, источник

4 ответы

Метод number.toString (). Length() вернет число цифр. То же самое, что и длина вашего необходимого массива. Затем вы используете свой код по-прежнему, но вместо печати вы добавляете цифру в массив.

int number = 1234567890;
int len = Integer.toString(number).length();
int[] iarray = new int[len];
for (int index = 0; index < len; index++) {
    iarray[index] = number % 10;
    number /= 10;
}
8
добавлено
@MaxDietz Что это связано с методом toString в Integer? И как это повлияет на использование int [] вместо Integer [] ?
добавлено автор Rohit Jain, источник
@MatthewTyler .. Вы можете работать с int тоже. Integer необязательно требуется здесь. На самом деле вам следует использовать int , где это возможно. И используйте Integer , где вы не можете обойтись без него, например. в общем объявлении ArrayList , где вы не можете - ArrayList , но только ArrayList
добавлено автор Rohit Jain, источник
Отредактировано, чтобы сделать немного яснее. При инициализации массива, который является гораздо более простой структурой данных, чем ArrayList, вам нужно заранее знать его длину, равную количеству цифр. Для этого кастинг на строку и подсчет символов аналогичны знанию цифр. Integer - это объект, который инкапсулирует int, в основном он хранит int, но также имеет некоторые методы, такие как toString, equals и т. Д. Он имеет немного наворотов и может быть заменен моим редактированием, а именно статическим методом Integer.toString , как показано.
добавлено автор Max Dietz, источник
Я использую Integer, потому что int не имеет метода toString (), означающего, что вам придется использовать ArrayList вместо простого массива.
добавлено автор Max Dietz, источник
@RohitJain .. я вижу. Я никогда не слышал об использовании Integer раньше, поэтому я думаю, что буду придерживаться int, когда это возможно.
добавлено автор user2049256, источник
Вау! Это был быстрый ответ. Это тоже очень полезно. Мой единственный вопрос: почему вы используете «Integer» вместо «int», что я обычно использую?
добавлено автор user2049256, источник

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

Таким образом, либо работайте с массивом, и итерация по номеру дважды - один раз для поиска размера, а затем для выполнения фактической работы. Else, продвигайтесь вперед с помощью ArrayList .

Добавление элемента в ArrayList довольно простое. Вам просто нужно позвонить - < code> List # add (E) с соответствующим параметром.

Итак, вот расширение вашего решения: -

// Declare a List, since it will store integers only.
List digits = new ArrayList():

int number = 1234567890;
while (number > 0) {
    int digit = number % 10; //Store digit in a variable
    number = number/10;

   //Add digit to the list
    digits.add(digit);
}

В качестве альтернативы, если вы хотите иметь только уникальные цифры в List , то вы должны использовать HashSet , который автоматически удаляет дубликаты.

5
добавлено
См. Документацию - docs.oracle.com/javase/ 7/docs/api/java/util/HashSet.html . HashSet - это не что иное, как Set , который хранит только уникальный элемент. Знаете, что устанавливает в математике правильно? Это просто. Вы можете получить более подробную информацию в документах.
добавлено автор Rohit Jain, источник
@MatthewTyler .. Просто замените объявление ArrayList на HashSet . Он выглядит следующим образом: Set digitits = new HashSet (); . А остальное то же самое.
добавлено автор Rohit Jain, источник
@MatthewTyler .. Потому что вы не можете хранить слишком большое количество в int . Попробуйте использовать long для исходного номера.
добавлено автор Rohit Jain, источник
@MatthewTyler. Пожалуйста :)
добавлено автор Rohit Jain, источник
@MatthewTyler .. У вас возникли проблемы с этим решением?
добавлено автор Rohit Jain, источник
Я получаю это сейчас. Спасибо за информацию. Я попробую. Вы знаете, почему возникает ошибка, когда число слишком велико? Мой текущий код выглядит следующим образом:
добавлено автор user2049256, источник
О, я вижу. Благодарю. Я получаю предупреждение, чтобы не использовать расширенную дискуссию в комментариях, поэтому я перестану прослушивать вас сейчас. Вы оказали огромную помощь. Спасибо, и у меня прекрасный день.
добавлено автор user2049256, источник
Я очень ценю всю помощь, которую вы предоставили до сих пор, но если бы вы могли показать мне, как я буду реализовывать функцию HashSet в фактическом коде, это будет абсолютно превосходно. Спасибо за ваше время.
добавлено автор user2049256, источник
Спасибо за полезный и быстрый ответ! Как вы думаете, вы могли бы объяснить HashSet немного больше? Эта функция меня интригует, потому что похоже, что это может сделать мой код намного проще.
добавлено автор user2049256, источник

С Java 8:

Integer.toString(n).chars().map(a->a-'0').toArray()

0
добавлено
char [] arr = scan.next().toCharArray();

Этот код будет читать номер из scan.next() , а затем он будет передавать его как вход в массив char , который будет иметь номер по своим индексам как единый по цифрам.

Надеюсь, это поможет.

0
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async