我正在努力根据我设置的参数创建一个具有正确大小的数组。长话短说,这个程序正在处理第一个数组中的一定数量的元素。这些要素如下
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的新手。
答案 0 :(得分:2)
如果没有第一步,您就无法知道数组的正确大小。如果你创建一个甚至一个元素太小或一个元素两个大的数组,这将是一个浪费, 因为您将被迫创建第3个数组以返回正确大小的数组。
所以你的解决方案看起来应该是这样的:
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;
}
答案 1 :(得分:2)
您是否可以使用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);
答案 2 :(得分:2)
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;
}
答案 3 :(得分:0)
通常的做法是创建一个您知道可以容纳所有内容的数组,将项目添加到该数组中,同时跟踪已添加的项目数。最后,您返回一个数组副本,截断为项目数。
或者,使用Java 8,您可以将其编写为流一行:
return Arrays.stream(array).filter(i -> (i / 16) > x).toArray();
答案 4 :(得分:0)
您是否可以使用其他课程?如果是这样,您可以使用ArrayList然后使用
k
返回适当大小的数组。在这种情况下,您可以摆脱 data concatenation;
length dset source $50.;
set CURR_CURR CURR_30 indsname=source;
dset=source;
run;
。 ArrayList在内部使用数组,但如果需要更多空间,则会自动调整大小,因此您不必进行微管理。如果传入的数组不够大,ArrayList上的toArray方法将返回一个适当大小的新数组。你看到的一个常见的事情就是将一个大小为0的数组传入toArray,这意味着返回的值将始终是正确大小的数组。