如何设置这些方法以将数组中的最后一个数字递增和递减 1? Java

How would these methods be setup to increment and decrement the last number in an array by 1? Java

对于这个项目,我正在创建数组,每个数组有 50 个元素,每个元素的值介于 0 和 9 之间,并使用这些称为 "BigIntegers" 的数组进行加法、减法、乘法和除法运算。有一些较小的方法称为递增和递减,我很难理解。这是我完成的代码...

public class BigInteger {   

    int[] BigInteger = new int[50];

    //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    //x BigInteger(): creates a BigInteger of all 0's                x
    //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   
    public BigInteger() {
        for (int i = 0; i < 50; i++) {
        BigInteger[i] = 0;
        }
    }

    //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    //x BigInteger(n): creates a BigInteger the size of n            x
    //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    
    public BigInteger(int n) {
         for (int i = 49; i > 0; i--) {
            BigInteger[i] = n%10;
            n = n/10;
        }
        BigInteger[0] = n;
    }

    public int[] getBigInteger() {
        return BigInteger;
    }

    public BigInteger(BigInteger n) {
        for(int i = 0; i < 50; i++) {
            BigInteger[i] = n.getBigInteger()[i];
        }
    }

    //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    //x print(): prints out each element of the BigInteger array     x
    //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    public void print() {
        int index = 0;

        for (int i = 0; i < BigInteger.length; i++) { 
            if (BigInteger[i] == 0) { index = 0; }
            else { index = i; break; }
        }

        for(int i = index; i < BigInteger.length; i++) { 
            System.out.print(BigInteger[i] + " ");
        }   
    }

    public void decrement() {
        int last = BigInteger.length;
        for(int i = last; i < 50; i++) {
            if (i == 0) {  }
            else last = BigInteger[last] - 1;
        }
    }

    public static void main(String args[]) {
        BigInteger big = new BigInteger(50);
        BigInteger big2 = new BigInteger();
        BigInteger big3 = new BigInteger(602345812);
}

这些方法的作用是:

• void increment( ) --- 将调用对象的值增加 1

• void decrement( ) --- 将调用对象的值减 1

我花了很多时间试图找出这些看似简单的方法。任何帮助或建议? 谢谢我。

如果我很好地理解你的问题,你应该尝试这个(@Andy Turner 和@Yang Li 的评论)作为起点:

public void increment() {
    for (int i = BigInteger.length - 1; i; i--)
      if (BigInteger[i] < 9) {
        BigInteger[i]++;
        for (int j = i + 1; j < BigInteger.length; j++)
          BigInteger[j] = 0;
        break;
      }
      else if (i == 0)
        // cannot increment 9
}

public void decrement() {
    for (int i = BigInteger.length - 1; i; i--)
      if (BigInteger[i] > 0) {
        BigInteger[i]--;
        for (int j = i + 1; j < BigInteger.length; j++)
          BigInteger[j] = 9;
        break;
      }
      else if (i == 0)
        // cannot decrement 0
}

这将递增/递减 BigInteger 数组的最后一个 int 元素,其中 BigInteger.length - 1 是数组中最后一个元素的索引。

这个 post 已经有一些答案,但你需要小心,因为其中一些答案不处理溢出。如果最后一位是9,你加1,它会溢出,如果最后一位是0,你减去,也会有问题。

您还应该考虑 BigInteger 数组中所有数字都是“9”的情况。在这种情况下,如果您将它递增一个,则您的数组中将不允许有更多房间。如果 BigInteger 中的所有数字都是“0”并且您想将其减去 1,则可能会发生同样的事情。对于这些情况,您可能应该抛出一个错误。

更新

我已经实现递归方法来递增大整数。 请注意,我已经处理了 BigInteger 中所有数字都是“9”的情况。您应该检查是否需要此输入,否则您应该删除此检查。

public void increment() {
    increment(BigInteger.length-1);
}

private void increment(int index) {
    if (index < 0) {
        throw new RuntimeException("BigInteger maximum capacity reached!");
    }
    if (BigInteger[index] < 9) {
        BigInteger[index]++;
    } else {
        BigInteger[index] = 0;
        increment(--index);
    }
}

基本上这会一直寻找前导数字直到小于 9,然后递增该数字,在此过程中它会将遇到的任何“9”设置为“0”。

我没有实施 "decrease" 方法,因为我认为您可以提出自己的解决方案。