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

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

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

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

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

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);

person Community    schedule 07.02.2013    source источник
comment
В этом случае мы не знаем размер заранее, поэтому я думаю, что arraylist здесь был бы хорош. Если вы используете arraylist, все, что вам нужно сделать, это yourList.add(number%10); из-за автобокса, java5 и далее будет работать.   -  person kosa    schedule 07.02.2013
comment
Я действительно не знаю, что такое массив... Это как массив, но с другим именем и динамическим размером?   -  person    schedule 07.02.2013
comment
Да, это динамический массив, поддерживаемый массивом.docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html   -  person kosa    schedule 07.02.2013
comment
@MatthewTyler.. Точно. Я добавил ссылку на документацию в первую строку своего ответа. Вы можете проверить это.   -  person Rohit Jain    schedule 07.02.2013
comment
Это действительно потрясающее место! Я посмотрю на этот массив списка. Похоже, это может не только помочь мне решить эту проблему, но и может оказаться весьма полезным в будущем. Большое спасибо за вашу помощь.   -  person    schedule 07.02.2013
comment
Integer.toString(n).chars().map(a-›a-'0').toArray();   -  person David S Alderson    schedule 02.01.2017


Ответы (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;
}
person Max Dietz    schedule 07.02.2013
comment
Ух ты! Это был быстрый ответ. Это тоже очень полезно. Мой единственный вопрос: почему вы используете Integer вместо int, который я обычно использую? - person ; 07.02.2013
comment
@MatthewTyler.. Вы тоже можете работать с int. Integer здесь не обязательно. Фактически, вы должны использовать int везде, где это возможно. И используйте Integer только там, где без него не обойтись, например. в общем объявлении ArrayList, где не может быть - ArrayList<int>, а только ArrayList<Integer> - person Rohit Jain; 07.02.2013
comment
@RohitJain.. Понятно. Я никогда раньше не слышал об использовании Integer, поэтому думаю, что по возможности буду использовать int. - person ; 07.02.2013
comment
Я использую Integer, потому что у int нет метода toString(), что означает, что вам придется использовать ArrayList вместо простого массива. - person Max Dietz; 07.02.2013
comment
@MaxDietz Какое это имеет отношение к методу toString в Integer? И как это повлияет на использование int[] вместо Integer[]? - person Rohit Jain; 08.02.2013
comment
Отредактировано, чтобы сделать немного понятнее. При инициализации массива, который представляет собой гораздо более простую структуру данных, чем ArrayList, вам нужно заранее знать его длину, которая равна количеству цифр. Для этого приведение к строке и подсчет символов — это то же самое, что знание цифр. Integer — это объект, который инкапсулирует int, в основном он хранит int, но также имеет некоторые методы, такие как toString, equals и т. д. Он немного раздут и может быть заменен моим редактированием, а именно статическим методом Integer.toString, как показано . - person Max Dietz; 08.02.2013

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

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

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

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

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

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, который автоматически удаляет дубликаты.

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

С Java 8:

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

person David S Alderson    schedule 02.01.2017

char [] arr = scan.next().toCharArray();

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

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

person akay    schedule 16.07.2017