2017-03-06 30 views
0

对于这个项目,我创建了数组,每个数组有50个元素,每个元素的值介于0和9之间,并使用名为“BigIntegers”的数组进行加法,减法,乘法和除法。有几个较小的方法称为递增和递减,我很难找出答案。这是我做的代码...这些方法将如何设置为将数组中的最后一个数字递增和递减1? Java

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); 
} 

这些方法的功能是:)

•无效增量(---由1

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

我花了好几个小时试图弄清楚这些,看起来是什么,简单的方法。任何帮助或建议? 感谢一

+4

注意:调用你的类'BigInteger'是令人困惑的,因为[这个名字有一个众所周知的类](https://docs.oracle.com/javase/7/docs/api/java/math/ BigInteger.html);在该类中调用一个变量'BigInteger'(其类型不是'BigInteger',而是'int []')也是令人困惑的。 –

+0

欢迎来到Stack Overflow!看起来你可能会问作业帮助。虽然我们本身没有任何问题,但请观察这些[应做和不应该](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845),并相应地编辑您的问题。 (即使这不是作业,无论如何请考虑建议。) –

+0

@AndyTurner确实令人困惑! – shash678

回答

0

如果我理解你的问题很好,你应该试试这个(与@Andy特纳和@Yang李的言论)为起点:

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 
} 

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

+0

当数字超过9或低于0时会发生什么? –

+0

当然,这是一个初步的答案,让我解决这个:) – SegFault

0

已经有这篇文章的一些答案,但你需要小心,因为其中一些答案不处理溢出。如果最后一位数字是9,并且您将其增加1,则它会溢出,如果最后一位数字为0并且您减去,则也会出现问题。

您还应该考虑BigInteger数组中所有数字均为'9'的情况。在这种情况下,如果您将其增加1,则不会在您的阵列中允许更多房间。如果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”。

我没有实施“减少”的方法,因为我认为你可以想出你自己的解决方案会很好。

+0

谢谢你的帮助!这绝对让我了解如何做到这一点。那么递减会更容易做递归递增吗? (我对递归很新颖) – Icescout

+0

我个人认为递归更容易思考和理解。但是,任何递归都可以重写成循环。所以如果你对递归不满意,循环是另一种选择。所以是的,你肯定可以写递归递减。我不会说这会更容易,只要用任何你喜欢的方法去做就行。快乐的编码! – AttitudeL

相关问题