我在java中执行这个项目,它接受两个整数值(最多30个数字)并将它们加在一起。由于我不允许使用Big Integer或其他类,我想把它们作为字符串然后将它们转换为整数。这是我到目前为止所做的:
import java.util.*;
public class Test{
public static void main(String[] args){
System.out.print("Input 1: ");
char[] firstInteger = myInput();
System.out.print("Input 2: ");
char[] secondInteger = myInput();
int[] num1 = char2Integer(firstInteger);
int[] num2 = char2Integer(secondInteger);
sum(num1, num2);
}
public static char[] myInput(){
String numbers;
Scanner input = new Scanner(System.in);
numbers = input.nextLine();
while(numbers.length() > 30){
System.out.println("Please input valid integers with digits less than 30");
numbers = input.nextLine();
}return numbers.toCharArray();
}
public static int[] char2Integer(char[] integer){
int[] numbers = new int[integer.length+1];
int j=integer.length-1;
for (int i = numbers.length-1; i>0 ; i--){
if(j>-1){
numbers[i] = (int)(integer[j]-'0');
j--;
}
}return numbers;
}
public static void sum(int[] num1, int[] num2){
int[] sum = new int[num1.length];
for (int i = sum.length-1 ; i> 0; i--){
sum[i] += num1[i]+num2[i];
if(sum[i] >= 10){
sum[i] = sum[i]%10;
sum[i-1]++;
}
}
for (int i = 0; i< sum.length; i++)
System.out.print(sum[i]);
}
}
我现在的问题是:当添加不同长度的数组时,我会得到奇怪的答案。 (添加相同长度的数组工作正常。) 例如:
input 1 = 50
input 2 = 500
output = 100
和
input 1 = 50
input 2 = 5
output = java.lang.ArrayIndexOutOfBoundsException: 2
我尝试将数组反转然后添加它们,但是我得到一个outOfBoundsException:-1。 我还想过将较短的数组转换为与较长的数组相同的长度,但这会在我的代码中占用很多行。谢谢您的帮助。我将采取所有积极/消极的建议。
答案 0 :(得分:2)
检查此代码的和函数。
public static void sum(int[] num1, int[] num2){
int num1len = num1.length;
int num2len = num2.length;
int[] sum= new int[num1len>num2len?num1len:num2len];
for (int i = sum.length-1 ; i> 0; i--){
if(num1len>0)
sum[i] += num1[--num1len];
if(num2len>0)
sum[i] += num2[--num2len];
if(sum[i] >= 10){
sum[i] = sum[i]%10;
sum[i-1]++;
}
}
for (int i = 0; i< sum.length; i++)
System.out.print(sum[i]);
}
答案 1 :(得分:0)
将缩短的数字用0填充,使其长度与较长的数字相同。
e.g。
input 1 = 50
input 2 = 5
应解释为50 + 05
答案 2 :(得分:0)
是的,因为这行
sum[i] += num1[i]+num2[i];
如果其中一个数组的长度比另一个长,那么你处理它们总是具有相同的长度
答案 3 :(得分:0)
你的问题是总和方法,你没有考虑两个输入的长度,甚至lsb数字1总结为数字2的lsb:
public static void sum(int[] num1, int[] num2){
int[] sum = new int[num1.length > num2.length ? num1.length : num2.length];//allocate for whoever is having more number of characters in input.
for (int i = num1.length-1, j = num2.length - 1, k = sum.length - 1 ; i> 0 || j > 0; i--, j--, k--){//take three variables one for each
sum[k] += num1[i]+num2[j];
if(sum[k] >= 10){
sum[k] = sum[k]%10;
sum[k-1]++;
}
}
for (int i = 0; i< sum.length; i++)
System.out.print(sum[i]);
}