Java-программа для разделения целых чисел - PullRequest
1 голос
/ 16 февраля 2012

Я написал следующий код на Java, чтобы отделить целое число. Пример: от 12345 до 1 2 3 4 5

Вот код:

public class Modulus {

public static void main(String[] args) {
    int number=Integer.parseInt(args[0]);
    String counter= Integer.toString(number);
    int count=(int)(counter.length()-1);

Ответы [ 5 ]

3 голосов
/ 16 февраля 2012

Вы хотите counter.length(), а не counter.length()-1, когда вы создаете массив.Индексы массива имеют значение n-1, а не длину строки (которая составляет n).

Когда вы проходите через массив, вы хотите начать с count-1 и идти внизоттуда.

Если число 12345, то ваш массив должен иметь размер 5, чтобы содержать 5 цифр, а индексы начинаются с 0-4.Соответственно, вы хотите создать массив с count и начать печать с count-1.

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

Обратите внимание, что ваш цикл остановится, как только он найдет ноль, даже если он находится в середине цифр.Поэтому, если у вас есть 3405, ваше приложение напечатает 5, а затем остановится.

Кроме того, комментарии к вашему вопросу намекают на общие более простые подходы, хотя то, что вы делаете, хорошо для изучения.

0 голосов
/ 16 февраля 2012

Попробуйте это:

 public class Modulus {

    public static void main(String[] args) {
        String numString = "12345";
        int num = Integer.parseInt(numString);
        char[] numCharArray = numString.toCharArray();
        for(int i=0;i<numCharArray.length;i++){
            System.out.print(numCharArray[i]+i != numCharArray.length-1 ? " " : "");
        }
    }
}
0 голосов
/ 16 февраля 2012

Попробуйте это:

counter.replaceAll(".(?=.)", "$0 ") 

Он заменит каждого персонажа на персонажа + пробел.

0 голосов
/ 16 февраля 2012

Индекс массива начинается с нуля. Так что, если вы делаете int count = (int) (counter.length () - 1); если предположить, что ваш счет 3, вы можете иметь индексы 0, 1, 2 Когда вы пишете дорожку [count] = (num% 10), вы пробуете дорожку [3] и, таким образом, получаете ошибку.

0 голосов
/ 16 февраля 2012

Выйдя из первого цикла while, вы получите счет> = 0, который будет равен false - счет будет отрицательным.

При переходе ко второму циклу while вы пытаетесь оценить трек [count],Если число отрицательно, это вызовет исключение ArrayIndexOutOfBoundsException.

Редактировать: , как указано hvgotcodes - исключение, которое вы видите, фактически выдается ранее в коде.

int [] track = new int[count];   // int of length count - indexed 0 to count-1

    while (num > 0 && count>=0) {
        track[count]=(num % 10); // get value indexed count - out of bounds!

Как только это будет решено, вы можете столкнуться с проблемой, которую я заметил.;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...