将数组发送到某个类并从中检索二维数组

时间:2017-09-03 17:42:51

标签: java arrays debugging

这是我想要做的,并且发生错误。希望有人可以指出这有什么问题。

  1. 将数组raw({1,2,3,4})发送到SelectNo类。

    public class SelectTest {
    
      public static void main(String[] args) {
    
       int[] raw = new int[] { 1, 2, 3, 4 };
    
       SelectNo select = new SelectNo(raw);
       select.select();
    
       }
    }
    
  2. SelectNo类'select()函数给出结果,包含来自raw的三个数字的数组,而不重复。所以结果必须是{1,2,3},{1,2,4},{2,3,4}。我知道如何使用下面的代码打印出结果。

  3. public class SelectNo {
    
        public int[] selected;
        public int[] raw;
    
        public SelectNo(int[] raw) {
            this.raw = raw; 
            this.selected = new int[3]; 
        }
    
        public void select() {
            for (int i = 0; i < raw.length - 2; i++) {
                for (int j = i + 1; j < raw.length - 1; j++) {
                    for (int k = j + 1; k < raw.length; k++) {
                        selected[0] = raw[i];
                        selected[1] = raw[j];
                        selected[2] = raw[k];
                        System.out.println(selected[0]+" "+selected[1]+" "+selected[2]);
                    }
                }
            }
    
    }
    
    1. 但问题是,我想将一堆数组({1,2,3},{1,2,4},{2,3,4})保存为{{{{{{ 1}}。所以我更改了SelectTest以返回二维数组'addSelected'。我不确定select()是否合乎逻辑,因为我收到了错误。
    2. select()

1 个答案:

答案 0 :(得分:0)

正如我在评论中所说,问题是selected是对数组的引用,这意味着它指向存储数组内容的内存段。基本上你是在做一个浅拷贝,而不是你的数组的深拷贝。要更正此问题,您可以执行以下操作,而不是addSelected[no] = selected;

  1. 使用for循环插入selectedaddSelected[no]数组中的每个元素。
  2. 使用Arrays.copyOf()