我需要编写一个接收1D数组的函数 例如:[2,5,3] 我需要创建以下2D数组: [[2,-5,-3] [ - 2,5,-3] [ - 2,-5,3]
我的代码是:
for (int i=0; i<vars.length; i++){
for (int j=0; j<vars.length; j++)
tempVars[j] = vars[j]*(-1);
tempVars[i] = tempVars[i]*(-1);
solution[i] = tempVars;
}
return solution ;
} // end of atMostOne function
但是我得到的输出是:[[ - 2,-5,3],[ - 2,-5, - 3],[ - 2,-5,3]] 该函数仅将最后一维数组放入所有二维阵列单元格中 我做错了什么?
答案 0 :(得分:0)
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
int n=4;
int a[]=new int[n];
a[0]=2;
a[1]=5;
a[2]=3;
a[3]=6;
int a1[][]=process(a);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
System.out.print(a1[i][j]+" ");
System.out.println();
}
}
public static int[][] process(int[] a)
{
int x=a.length;
int a1[][]=new int[x][x];
int i=0;
for(int b=0;b<x;b++)
{
for(int c=0;c<x;c++)
{
if(c==i)
a1[b][c]=a[c];
else
a1[b][c]=-1*a[c];
}
i++;
}
return a1;
}
}
以下是您想要的工作演示。我创建了一个函数,它接受一维数组并根据您的要求返回一个二维数组。
答案 1 :(得分:0)
tempVars
数组被添加到solutions
的倍数,因此solutions
填充了对同一数组的3个引用。
使用:
for (int i=0; i<vars.length; i++){
for (int j=0; j<vars.length; j++) {
tempVars[j] = vars[j]*(-1);
}
tempVars[i] = tempVars[i]*(-1);
solution[i] = tempVars.clone();
}
clone()
中的solution[i] = tempVars.clone();
将确保将tempVars
克隆的新数组放入solution
。
答案 2 :(得分:0)
var data = [2,3,5];
var counter = data.length;
var finalArr=[];
for (var i = 0; i < counter; i++) {
var tmpArr = [];
for (var j = 0; j < data.length; j++) {
if(i==j){
tmpArr.push(-data[j]);
}
else{
tmpArr.push(data[j]);
}
}
finalArr.push(tmpArr);
}
console.log(finalArr)