从现有数组创建数组

时间:2018-03-09 09:54:59

标签: java arrays android-studio

我有一个数组

myArray []={1,4,3,2}.

我想创建4个新数组,如:

myArray1[]={2,3,4},
myArray2[]={1,2,3},
myArray3[]={1,2,4},
myArray4[]={1,3,4}. 

myArray1的第一个元素应该是myArrays第一个元素(1)到4的数字,但是1个本身除外。所以它将是{2,3,4}。 我怎样才能从myArray创建这个数组,每次我点击Java(Android Studio)中的按钮?

4 个答案:

答案 0 :(得分:0)

也许这可以是一个解决方案:

public static void main(String args[])
  {
    //Create myArray
    List<Integer> myArray= new ArrayList<>();
    myArray.add(4);
    myArray.add(5);
    myArray.add(6);
    myArray.add(7);

    //buttonClick
    List<List<Integer>> result = clickButton(myArray);

    //output all created Lists
    for(List<Integer> list : result){
      System.out.println("List: " + list);
    }
  }

  public static <T> List<List<T>> clickButton(List<T> myArray){
    //The List that will return. This Array contains all created Arrays
    List<List<T>> returnedArrays = new ArrayList<>();

    //For each element in myArray
    for(int i = 0; i < myArray.size(); i++) {

      //get the Element at position i (i increment each time)
      T object = myArray.get(i);

      //create a new Array
      List<T> array = new ArrayList<>();

      //add all elements from myArray to the new Array
      array.addAll(myArray);

      //remove the element by position i from the new Array
      array.remove(object);

      //add the new Array to the result Array
      returnedArrays.add(array);
    }
    //return the Array of all created Arrays
    return returnedArrays;
  }

您将数组作为参数传递,并成为所有已创建列表的列表

答案 1 :(得分:0)

可以实现目标的简单方法可能如下所示:

public static void main(String[] args) {

    int[] myArray = {1, 2, 3, 4};

    // generate a sub array with element at index 0 left out
    int[] sub1 = subArray(myArray, 0);
    printArray(sub1);

    // generate all sub arrays of myArray in a cycle
    for(int i = 0; i < myArray.length; i++){
        int[] sub2 = subArray(myArray, i);
        printArray(sub2);
    }
}

static int[] subArray(int[] arr, int removeInd){
    if(removeInd >= arr.length)
        return arr;        

    int[] newArray = new int[arr.length - 1];

    for(int i = 0; i < arr.length; i++){
        if(i == removeInd)
            continue;
        newArray[i > removeInd ? i-1 : i] = arr[i];
    }
    return newArray;
}

static void printArray(int[] arr){
    for(int x : arr)
        System.out.print(x + " ");
    System.out.println();
}

该代码现在包含一个完整的使用示例。

subArray方法有两个参数 - 原始数组和不应包含在新数组中的元素索引。如果索引不在原始数组中,我们只返回数组。否则,我们创建一个新数组,它比原始数组短一个元素,并开始将元素复制到新数组。

索引使用三元运算符。基本上,在我们到达removeInd索引之前,我们会将所有元素复制到其原始位置。在我们跳过要删除的元素之后,我们需要将元素的原始索引减1(这样,我们&#34; patch&#34;被删除元素留下的数组中的孔)。这也确保了我们不会在新数组之外进行索引。

subArray({1, 2, 3, 4}, 1)

的调用中的索引示例
  1. i = 00 > 1评估为false,因此newArray[0] = arr[0]
  2. i = 1i等于removeInd,我们不会复制任何内容
  3. i = 22 > 1的计算结果为true,因此newArray[1] = arr[2](请参阅我们如何减少新数组中的索引但保留其原始值中的索引)
  4. i = 33 > 1评估为真,因此newArray[2] = arr[3]
  5. 希望这能澄清代码的内部工作原理。

答案 2 :(得分:0)

一个简单的嵌套循环应该这样做。如果列表变得非常大,则不是最佳方法,但应该足够简单以了解正在发生的事情。基本上,对于列表中的每个元素,我们创建一个新列表。然后我们将所有其他元素添加到列表中。

public static List<List<Integer>> Action(List<Integer> intList){
       List<List<Integer>> listlistint = new ArrayList<>();
       for(int i = 0; i < intList.size(); i++){
            listlistint.add(new ArrayList<Integer>());
           for(int j = 0; j < intList.size(); j++){
               if(i == j) continue;
               listlistint.get(i).add(intList.get(j));
           }
       }
       return listlistint;
     }

答案 3 :(得分:0)

以下是使用数组而不是List的问题的解决方案:

public static void main(String args[])
  {
    int[] myArray = {4,5,6,7,8};

    int[][] result = clickButton(myArray);

    printArrays(result);
  }


  public static int[][] clickButton(int[] myArray){
    int[][] returnedArrays = new int[myArray.length][myArray.length -1];
    for(int i = 0; i < myArray.length; i++) {
      int[] array = new int[myArray.length - 1];
      for(int j = 0, k = 0; j < myArray.length; j++){
        if(j != i){
          array[k++] = myArray[j];
        }
      }
      returnedArrays[i] = array;
    }
    return returnedArrays;
  }


  public static void printArrays(int[][] arrayOfArrays){
    for(int[] list : arrayOfArrays){
      System.out.println("Array: ");
      for(int i : list)
        System.out.print(i);
      System.out.println();
    }
  }

希望它能解决你的问题