如何设置这些方法以将数组中的最后一个数字递增和递减 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" 方法,因为我认为您可以提出自己的解决方案。
对于这个项目,我正在创建数组,每个数组有 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" 方法,因为我认为您可以提出自己的解决方案。