[英]How to copy only certain elements of one Array to another in Java
我正在努力根据已设置的参数创建大小正确的数组。 长话短说,该程序正在处理第一个数组中的一定数量的元素。 这些要素如下
int [] myWeights = {258, 58, 209, 91, 79, 182, 172, 27, 7, 29, 128, 198};
现在这些元素以盎司为单位。 我得到了可以正确运行所有程序的程序,现在我的教授希望我们将超过8磅的程序分成一个新数组。 在这种情况下,新数组中的那些元素是258、209、182、172和198。问题是程序在开始时可以创建一个随机大小的数组,其大小在数字1-320之间。 有没有一种方法可以使某种循环实例化所需数量的“盒子”。 还是我只是应该实例化一些任意数字,并希望这是我所需要的? 我目前的代码是
public static int [] overGivenPounds(int x, int [] array){
int pounds = 0;
int arrayLength = 0;
int arrayOverEightPounds[];
int k = 0;
for(int i = 0; i < array.length; i++){
pounds = array[i] / 16;
if(x < pounds){
arrayOverEightPounds[k] = array[i];
k++;
}
}
return arrayOverEightPounds;
如果其中任何一个不清楚,请询问,没有必要粗鲁。 我对Java非常陌生。
没有第一步,您将无法知道数组的正确大小。 如果创建的数组甚至是一个元素太小或一个元素两个太大,那将是浪费,因为您将被迫创建第三个数组以返回正确大小的数组。
因此,您的解决方案应类似于:
public static int[] overGivenPounds(int x, int[] array) {
int size = 0;
for (int value : array) {
if (satisfies(x, value)) {
size++;
}
}
int[] result = new int[size];
// ??? -> for you to complete this
for (int value : array) {
if (satisfies(x, value)) {
// ??? -> for you to complete this
}
}
return result;
}
您可以使用Java流吗? 如果是这样,解决方案将是:
return Arrays.stream(myWeights).filter(n -> n/16 > x).toArray();
如果没有,则可以使用Arrays.copyOf
创建正确长度的数组:
int[] heavyWeights = int[myWeights.length];
int size = 0;
for (int weight: myWeights)
if (weight / 16 > x)
heavyWeights[size++] = weight;
return Arrays.copyOf(heavyWeights, size);
public static int[] overGivenPounds(int x, int[] array){
Arrays.sort(array);
boolean foundSomething = false;
int startIndex = 0;
for (int i = 0; i < array.length; i++) {
if(array[i]/16>=x){
startIndex = i;
foundSomething = true;
break;
}
}
if(foundSomething)
return Arrays.copyOfRange(array, startIndex, array.length);
return null;
}
通常的方法是创建一个可以容纳所有内容的数组,将项目添加到该数组中,同时跟踪已添加的项目数。 最后,您返回数组的副本,该副本被截断为项目数。
或者,使用Java 8,您可以将它编写为流式的一排:
return Arrays.stream(array).filter(i -> (i / 16) > x).toArray();
您可以使用其他课程吗? 如果是这样,您可以使用ArrayList然后使用
//int arrayOverEightPounds[];
List<Integer> listOverEightPounds = new ArrayList<>();
//...
//arrayOverEightPounds[k] = array[i];
listOverEightPounds.add(array[i]);
//....
return listOverEightPounds.toArray(new Integer[0]);
返回适当大小的数组。 在这种情况下,您可以摆脱k
。 ArrayList在内部使用一个数组,但是如果需要更多空间,它将自动调整其大小,因此您不必进行微管理。 如果传入的数组不够大,则ArrayList上的toArray方法将返回适当大小的新数组。 您看到的常见现象是将大小为0的数组传入toArray,这意味着返回的值将始终是大小正确的数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.