【问题标题】:trying to put 1D array to a 2D array in specific order试图以特定顺序将一维数组放入二维数组
【发布时间】:2017-11-21 10:27:46
【问题描述】:

我需要编写一个接收一维数组的函数 例如:[2,5,3] 我需要创建以下二维数组: [[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 ;
} 

但是我得到的输出是: [[-2, -5, 3], [-2, -5, 3], [-2, -5, 3]] 该函数仅将最后一个 1D 数组放入所有 2D 数组单元格中。
我做错了什么?

【问题讨论】:

  • 从外观上看,您只创建了一个数组tempVars,您在循环中覆盖并多次添加到solution 数组中。您需要为每个可能的结果创建一个数组,而不是一次又一次地使用相同的数组。

标签: java arrays syntax


【解决方案1】:

@OH GOD SPIDERS 是对的。 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();

    }

solution[i] = tempVars.clone(); 中的clone() 将确保将从tempVars 克隆的新数组放入solution

【讨论】:

    【解决方案2】:
    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;
    
        }
    }
    

    这是您想要的工作演示。我创建了一个函数,它采用一维数组并根据您的要求返回一个二维数组。

    【讨论】:

    • 您可以使用Arrays.toString(a1[i]);获取包含数组值的String,而不是使用for(int j=0;j&lt;n;j++) System.out.print(a1[i][j]+" ");
    【解决方案3】:
        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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 2013-07-30
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多