我有一个数组
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)中的按钮?
答案 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)
:
i = 0
:0 > 1
评估为false,因此newArray[0] = arr[0]
i = 1
:i
等于removeInd
,我们不会复制任何内容i = 2
:2 > 1
的计算结果为true,因此newArray[1] = arr[2]
(请参阅我们如何减少新数组中的索引但保留其原始值中的索引)i = 3
:3 > 1
评估为真,因此newArray[2] = arr[3]
希望这能澄清代码的内部工作原理。
答案 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();
}
}
希望它能解决你的问题