让我们说阵列一[2/3, 0, -1, 0, 7/2]
和阵列二[0, 0, -2/3, 1, 0, 0]
所以我希望我的结果数组是[0, 2/3, -2/3, 0, 0, 7/2]
。结果数组长度将是两个数组之间的最大长度。我怎么能用Java做到这一点?
我非常希望特定的索引位置相互添加,但是我不知道如何使用不相等的数组。
编辑:它添加了位置,并且在最大的数组中保持不匹配的任何内容。 [0, 0, -2/3, 1, 0, 0]
位置为0, 1, 2, 3, 4, 5
,数组[2/3, 0, -1, 0, 7/2]
的位置与较大的数组重合为1, 2, 3, 4, 5
,因此我希望添加相同的位置值并将其放入生成的数组中。我创建了一个新的结果数组并将其设置为等于最大的数组,所以必须要做的就是添加类似的位置值。
答案 0 :(得分:2)
这是我设计的一种精心设计且易于理解的方式:
它做了什么它将数组的最后元素加在一起并从那里向后移动;如果一个数组在另一个数组之前结束,它只是将不存在的元素的值替换为零,然后添加它们:
public class ArrayAddition
{
public static void main(String[] args)
{
double array1[] = {2./3, 0, -1, 0, 7./2}; // first array
double array2[] = {0, 0, -2./3, 1, 0, 0}; // second array
int length = Math.max(array1.length, array2.length); // length of longest array
double newArray[] = new double[length]; // result must be length of longest array
int index1 = array1.length - 1; // last element of first array
int index2 = array2.length - 1; // last element of second array
int indexRes = length - 1; // result will be placed in last spot of result
for (int i = length -1; i >= 0; i--) // adds elements of two arrays together bckwrd
{
double val1, val2; // value holders for array elements
try // try to get value of the array 1 at certain position
{
val1 = array1[index1];
}
catch(ArrayIndexOutOfBoundsException e) // if empty, make it zero
{
val1 = 0;
}
try // try to get value of array 2 at certain position
{
val2 = array2[index2];
}
catch(ArrayIndexOutOfBoundsException e) // if empty make it zero
{
val2 = 0;
}
newArray[indexRes] = val1 + val2; // array[?] result is val1 + val 2
index1--; // decrement to the next lower value
index2 --; // decrement to the next lower value
indexRes--; // go the next lower spot
}
for (int i = 0; i < newArray.length; i ++) // this loop prints out the results
System.out.println(newArray[i]);
}
}
您需要输入您的值作为双打或答案不正确(2./3而不是2/3)
0.0
0.6666666666666666
-0.6666666666666666
0.0
0.0
3.5
答案将采用十进制形式,原因显而易见(如果答案是2/3,它实际上将2除以3,仍然是正确答案,您可以将其转换回来)
希望这有帮助! :)
答案 1 :(得分:0)
从最后开始遍历数组,并添加2个值,将它们放入一个大数组最大的新数组中。
int a = arrayA.length-1;
int b = arrayB.length-1;
double [] result = new double[Math.max(arrayA.length, arrayB.length)];
double sum = 0;
while(a >= 0 || b >= 0) {
if(a>=0) sum+=arrayA[a];
if(b>=0) sum+=arrayB[b];
result[Math.max(a, b)] = sum;
sum = 0;
a--;
b--;
}
答案 2 :(得分:0)
这应该这样做。请注意,此代码缺少数组变量的声明。
if (array1.length > array2.length)
array3 = addArrays(array1, array2);
else
array3 = addArrays(array2, array1);
int [] addArrays(longArray, shortArray) {
int index;
for (index = 0; index < longArray.length - shortArray.length; index++) {
array3[index] = longArray[index] + 0;
}
for (int i = 0; i < shortArray.length; i++, index++) {
array3[index] = longArray[index] + shortArray[i];
}
return array3;
}
答案 3 :(得分:0)
import java.util.Scanner;
public class ArrayAdd {
public static void main(String args[]) {
Scanner a = new Scanner(System.in);
int m = a.nextInt();// First array's size
int n = a.nextInt();// Second array's size
int arr1[] = new int[m];
int arr2[] = new int[n];
for (int i = 0; i < m; i++) {
arr1[i] = a.nextInt();
}
for (int i = 0; i < n; i++) {
arr2[i] = a.nextInt();
}
a.close();
if (m < n) {
int difference = n - m;
int arr3[] = new int[n];
for (int i = 0; i < n; i++) {
if (i < difference) {
arr3[i] = arr2[i];
} else {
arr3[i] = arr1[i-difference] + arr2[i];
}
System.out.println(arr3[i]);
}
} else {
int difference = m - n;
int arr3[] = new int[m];
for (int i = 0; i < m; i++) {
if (i < difference) {
arr3[i] = arr1[i];
} else {
arr3[i] = arr1[i] + arr2[i-difference];
}
System.out.println(arr3[i]);
}
}
}
}