Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在2个ArrayList中添加整数?JAVA_Java_Arraylist - Fatal编程技术网

如何在2个ArrayList中添加整数?JAVA

如何在2个ArrayList中添加整数?JAVA,java,arraylist,Java,Arraylist,假设我有arraylist A={9,5,3,7}和arraylist B={4,9,8,7,5}。(两个ArrayList的长度可以相同,也可以不同。) 这些ArrayList表示数字(但以最低有效一级顺序写入) 我想创建一个arraylist(result),其中包含每个数字与另一个arraylist中对应数字的总和。如果总和大于9,则余数转入下一位。上述操作与操作相同:7359+57894=65253 结果必须是arraylist:result={3,5,2,5,6} 这就是我尝试过的:

假设我有arraylist A={9,5,3,7}和arraylist B={4,9,8,7,5}。(两个ArrayList的长度可以相同,也可以不同。) 这些ArrayList表示数字(但以最低有效一级顺序写入)

我想创建一个arraylist(result),其中包含每个数字与另一个arraylist中对应数字的总和。如果总和大于9,则余数转入下一位。上述操作与操作相同:7359+57894=65253

结果必须是arraylist:result={3,5,2,5,6}

这就是我尝试过的:

    BigInt result = new BigInt();

    int temp=0;
    int carry=0;

    BigInt bigger = this;
    BigInt smaller = otherBigInt;

    if(this.lessOrEqual(otherBigInt)){
        smaller = this;
        bigger = otherBigInt;
    }

    for(int i=0; i<bigger.digitList.size(); i++){
      temp= bigger.digitList.get(i)+smaller.digitList.get(i)+carry;         
      carry = temp/10;
      result.digitList.add(i,temp%=10);

    }

    if(carry == 1){
        result.digitList.add(1);
    }
   return result;
BigInt result=new BigInt();
内部温度=0;
整数进位=0;
BigInt biger=这个;
BigInt较小=其他BigInt;
如果(本出租人等于(其他BIGINT)){
更小=这个;
更大=其他更大;
}

对于(inti=0;i我将该方法添加到我认为您拥有的类中。 如果您已经这样做了,这将很有帮助,这样人们就可以一次性运行您的代码

对于那些想知道的人:他不是要将一个数组的元素添加到另一个数组中,而是要将两个数组视为数字(拆分为数字),并将这些数字的总和创建到输出数组中

正如我在评论中所描述的,我得到一个ArrayIndexOutOfBoundsException 检查i是否 下面我更改了您的代码,以测试是否还有小元素需要添加,或者是否已经用完了它们

还有其他方法可以做到这一点,例如,您可以将0添加到smallerint的末尾,使它们具有相同的长度,或者在bigInt上创建一个方法(getNthDigit(inti),该方法返回数字,如果找不到,则返回0)

公共类BigInt
{
私有ArrayList digitList=新ArrayList();
公共BigInt(整数…整数){
this.digitList.addAll(Arrays.asList(ints));
}
公共BigInt添加(BigInt其他BigInt){
BigInt结果=新的BigInt();
整数进位=0;
BigInt biger=这个;
BigInt较小=其他BigInt;
如果(本出租人等于(其他BIGINT)){
更小=这个;
更大=其他更大;
}
对于(int i=0;idigitList.size();
}
公共字符串toString(){
返回Arrays.toString(digitList.toArray());
}
公共静态void main(字符串[]argv){
BigInt first=新的BigInt(9,5,3,7);
BigInt second=新的BigInt(4,9,8,7,5);
BigInt结果=第一个。添加(第二个);
系统输出打印项次(结果);
}
}
您可以在BigInt上使用类似OO的方法来避免此问题,同时避免我添加的if/else:

public int getNthDigit(int digit) {
    if (digit < digitList.size()) {
         return digitList.get(digit);
    } else {
        return 0;
    }
}
public int getNthDigit(int-digit){
如果(数字
输出:


[3,5,2,5,6]

PFB您的问题的确切答案:

int size, carry = 0, temp = 0;

size = Math.max(al1.size(), al2.size());

ArrayList<Integer> al = new ArrayList<Integer>(size);

for (int i = 0; i < size; i++) {

    if (al1.size() > i && al2.size() > i)
        temp = carry + al1.get(i) + al2.get(i);
    else if (al1.size() > i)
        temp = carry + al1.get(i);
    else
        temp = carry + al2.get(i);

    carry = temp / 10;
    al.add(temp % 10);
}

System.out.println(al);
int size,进位=0,温度=0;
size=Math.max(al1.size(),al2.size());
ArrayList al=新的ArrayList(大小);
对于(int i=0;ii&&al2.size()>i)
温度=进位+al1.get(i)+al2.get(i);
else if(al1.size()>i)
温度=进位+al1.进位(i);
其他的
温度=进位+al2.进位(i);
进位=温度/10;
al.添加(温度%10);
}
系统输出打印项次(al);

这是我的问题解决方案版本:

    ArrayList<Integer> bigger = (A.size() >= B.size()) ? A : B;
    ArrayList<Integer> smaller = (A.size() < B.size()) ? A : B;
    ArrayList<Integer> C = new ArrayList();

    int idx = 0, sum, carr = 0;

    for (Integer i : bigger) {
        sum = (i + carr + ((idx < smaller.size()) ? smaller.get(idx++) : 0));
        carr = sum / 10;
        C.add(sum % 10);
    }

    if (carr == 1 ) C.add(carr);
    System.out.println("Array: " + C );
ArrayList biger=(A.size()>=B.size())?A:B;
数组列表较小=(A.size()

这在一个标准的ArrayList上工作。

a={9,5,3,7},B={4,9,8,7,5}-->{3,5,2,5,6}请提供您现在得到的输出和期望得到的结果提供正确的输入和期望输出正确的输入:a={9,5,3,7}B={4,9,8,7,5},然后将a的元素添加到B的元素中。结果={3,5,2,5,6}。如果i=0,则进位为i+1。此外,仅描述“它有一个错误”这还不足以回答这样的问题。请准确描述您的需求和问题。如果出现错误,请告诉我们是什么错误。它仍然不起作用。它表示比较失败。我不知道为什么它们会有比较问题,因为两个ArrayList的元素都是整数。添加了类定义和主方法I用于测试,我的代码运行并给出预期的输出仍然不起作用。。谢谢你的帮助。@Jeffrey.S没问题,但是你复制了代码并运行了吗?因为它在我的机器上编译并生成所需的输出。不管怎样,看看其他答案,我很确定它们都能起作用。非常简约:)temp只在循环内部需要,我认为tmp%=10应该是tmp%10。(无需分配任务)。你可以用Math.max来代替三元表达式。谢谢Joeblade@杰弗里,你试过这个吗?
    ArrayList<Integer> bigger = (A.size() >= B.size()) ? A : B;
    ArrayList<Integer> smaller = (A.size() < B.size()) ? A : B;
    ArrayList<Integer> C = new ArrayList();

    int idx = 0, sum, carr = 0;

    for (Integer i : bigger) {
        sum = (i + carr + ((idx < smaller.size()) ? smaller.get(idx++) : 0));
        carr = sum / 10;
        C.add(sum % 10);
    }

    if (carr == 1 ) C.add(carr);
    System.out.println("Array: " + C );