Использование вложенного цикла For для «добавления» двух строковых массивов вместе с числовыми значениями - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь создать программу, которая принимает x добавок и превращает их в результат на основе строк.Причина использования String [], а не int [] состоит в том, что некоторые числа слишком велики для int / long (и нам не разрешено использовать BigInteger в этом проекте), поэтому мы придерживаемся String [] в этомпрограмма.Кроме того: все значения в параметре String [] имеют длину 25 нулей, а число заменяет последние несколько нулей, как показано ниже.

Например: если вы передали строковый массив с тремя значениями...

0000000000000000000000203

0000000000000000000000045

0000000000000000000000010

Метод скомпоновал бы его в строку [] со значением ...

0000000000000000000000258

Сложной частью является учет переноса числа,как в элементарной алгебре.Ниже приведено то, что я получил до сих пор

//Every array will be 25 digits long. Mostly zeroes with the numbers to add at the 
//end
public static final int ARRSIZE = 25;

public static void addStuff(String[] stuff)    {
    String[] result = new String[ARRSIZE];
    int[] holder = new int[ARRSIZE];
    String temp = "";
    int area = 0;
    int carry = 0;
    for (int i = 0; i < stuff.length; i++)
    {
        for (int j = 0; j < stuff.length; j++)
        {
            temp = stuff[j].substring(stuff[i].length() - 1-i, stuff[i].length()-i);
            area += Integer.parseInt(temp);
            if (area >= 10)
            {
                carry = area/10;
                holder[ARRSIZE - 1-i] = area%10;
                area = 0;
            }
            carry = 0;
        }
    }

    //TODO: Make int[] holder -> String[] result
    //Take result String[] to future method
}

Что я пытаюсь сделать с этим кодом, так это прочитать последний элемент каждого элемента String [], превратить его в int, чтобы сложитьи сохраните окончательное число как String [] (результат) для последующей печати в будущем методе.Мне всегда было плохо с вложенными циклами, поэтому я думал, что эта путаница случится.До сих пор мне удалось разобраться в логике, в которой я успешно добавил крайний правый столбец и сохранил его в области, сохраняя при этом число.Оттуда я и потерян.

1 Ответ

0 голосов
/ 22 апреля 2019

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

public static void addStuff(String[] stuff) {
    if (stuff.length != result.length) {
        throw new IllegalArgumentException("length does not match");
    }
    int carry = 0;
    for (int i = stuff.length - 1; i >= 0; i--) {
        int temp = Integer.parseInt(result[i]) + Integer.parseInt(stuff[i]) + carry;
        carry = temp / 10;
        result[i] = String.valueOf(temp % 10);
    }
}

Это добавляет указанный массив String в глобальный массив результатов, определенный следующим образом:

private static final String[] result = "0000000000000000000000000".split("");

Если вы звоните по указанным номерам, вы можете использовать его следующим образом:

addStuff("0000000000000000000000203".split(""));
addStuff("0000000000000000000000045".split(""));
addStuff("0000000000000000000000010".split(""));
System.out.println(String.join("", result));

Результат будет:

0000000000000000000000258

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

...