使用嵌套的For循环将两个具有数字值的字符串数组“相加”

时间:2019-04-21 20:27:18

标签: java arrays nested-loops

我正在尝试制作一个程序,该程序将x数量的添加剂转换为基于String的结果。使用String []而不使用int []的原因是因为某些数字对于int / long而言太大(并且我们不允许在该项目上使用BigInteger),因此在此我们坚持使用String []程序。另外:String []参数中的所有值的长度均为25个零,用数字代替最后的零个,如下所示。

例如:如果您传入具有三个值的字符串数组...

0000000000000000000000203

0000000000000000000000045

0000000000000000000000010

该方法会将其压缩为具有值...的String []。

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 [](结果)以便以后使用以后的方法进行打印。嵌套for循环一直以来都是非常糟糕的事情,所以我认为这种混乱会发生。到目前为止,我设法弄清楚了逻辑,在这里我成功添加最右边的列并将其存储在区域中,同时携带数字。从那里开始,我迷路了。

1 个答案:

答案 0 :(得分:0)

只是一个简单的解决方案,您可能需要对其进行一些调整以使其适合您的需求:

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

希望有帮助。当然,您应该做更多的异常处理,但这只是一个小例子,向您展示如何解决问题。