改变数组元素?
Changing array element?
我的目标是有一个像这样的数组 int arrMarks[] = {10,-15,25,102,30} 当一个元素低于零或高于 100 时,我需要让它等于零。然后这些元素应该在数组的最后一个位置,另一个的位置删除一个位置。那么如何在不使用任何包裹或短缺的情况下做到这一点呢?
public void validateMarks(int [] array){
int [] array1 = new int[5];
for(int i = 0; i<array.length; i++){
if(array[i] < 0 || array[i] > 100){
int f= array1.length-1;
array1[f] = array[i];
array1[f] = 0;
f--;
}
else if(array[i] > 0 || array[i] < 100){
array1[i] = array[i];
}
System.out.println(array1[i]);
}
}
你可以使用交换方法。
public void swap(int i, int j, int[] arr) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
public void validateMarks(int[] array){
int[] array1 = new int[array.length];
int pos = 0;
for (int i = 0; i < array.length; i++){
if (array[i] >= 0 && array[i] <= 100)
array1[pos++] = array[i];
}
for (int i = 0; i < array.length; i++){
System.out.println(array1[i]);
}
}
这里要吸取的教训:
- 不要对值进行硬编码(
5
更改为 array.length
)
- 了解范围规则(
f
和 pos
需要在 for
循环之外声明)
- 有时您不需要存储值
最后一点暗示 array1
实际上不是必需的。我把这个挑战留给了 OP。
好吧,让我检查一下我是否理解正确。据我了解,您想检查每个数组值是否小于 0 或大于 100。如果是这样,应从原始数组中删除该值(替换为 0)并复制到新数组的最后一个位置.所以,如果我明白了,我的建议是:
public int[] validateMarks(int [] originalArray){
int[] returnArray = new Int[originalArray.length];
int i,j;
j=originalArray.length; //returnArray will be visited backwards
for(i=0;i<originalArray.length;i++){ //originalArray will be visited forwards
if(originalArray[i]<0 || originalArray[i]>100){
returnArray[j] = originalArray[i]
//Last valid returnArray's position will receive originalArray's value which, is less than 0 or higher than 1000
originalArray[i] = 0;
//The value which was less then 0 or higher than 100 will be replaed by 0 at the originalArray
j--;
//returnArray's counter is decreased so it can be visited backwards
}
}
return returnArray;
//The new processed array will be returned by this method. If you prefer, you can set this method as void and work it your way.
}
希望对你有帮助。干杯!
我的目标是有一个像这样的数组 int arrMarks[] = {10,-15,25,102,30} 当一个元素低于零或高于 100 时,我需要让它等于零。然后这些元素应该在数组的最后一个位置,另一个的位置删除一个位置。那么如何在不使用任何包裹或短缺的情况下做到这一点呢?
public void validateMarks(int [] array){
int [] array1 = new int[5];
for(int i = 0; i<array.length; i++){
if(array[i] < 0 || array[i] > 100){
int f= array1.length-1;
array1[f] = array[i];
array1[f] = 0;
f--;
}
else if(array[i] > 0 || array[i] < 100){
array1[i] = array[i];
}
System.out.println(array1[i]);
}
}
你可以使用交换方法。
public void swap(int i, int j, int[] arr) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
public void validateMarks(int[] array){
int[] array1 = new int[array.length];
int pos = 0;
for (int i = 0; i < array.length; i++){
if (array[i] >= 0 && array[i] <= 100)
array1[pos++] = array[i];
}
for (int i = 0; i < array.length; i++){
System.out.println(array1[i]);
}
}
这里要吸取的教训:
- 不要对值进行硬编码(
5
更改为array.length
) - 了解范围规则(
f
和pos
需要在for
循环之外声明) - 有时您不需要存储值
最后一点暗示 array1
实际上不是必需的。我把这个挑战留给了 OP。
好吧,让我检查一下我是否理解正确。据我了解,您想检查每个数组值是否小于 0 或大于 100。如果是这样,应从原始数组中删除该值(替换为 0)并复制到新数组的最后一个位置.所以,如果我明白了,我的建议是:
public int[] validateMarks(int [] originalArray){
int[] returnArray = new Int[originalArray.length];
int i,j;
j=originalArray.length; //returnArray will be visited backwards
for(i=0;i<originalArray.length;i++){ //originalArray will be visited forwards
if(originalArray[i]<0 || originalArray[i]>100){
returnArray[j] = originalArray[i]
//Last valid returnArray's position will receive originalArray's value which, is less than 0 or higher than 1000
originalArray[i] = 0;
//The value which was less then 0 or higher than 100 will be replaed by 0 at the originalArray
j--;
//returnArray's counter is decreased so it can be visited backwards
}
}
return returnArray;
//The new processed array will be returned by this method. If you prefer, you can set this method as void and work it your way.
}
希望对你有帮助。干杯!