问题:在指定数组:{99,88,77,66,55};中插入一个数字并使之保持降序。
1.
package pinxixi;
import java.util.Arrays;
public class java3my {
public static void main(String[] args) {
int[]arr={99,88,77,66,55};
int num=90;
int[] arr2=new int[arr.length+1];
for (int i = 0; i < arr.length; i++) {
if(i<=arr.length-1){
arr2[i]=arr[i];
}
}
arr=arr2;
arr[arr.length-1]=num;
for (int i = 0; i < arr.length; i++) {
/*此处范围写大了,当i等于5时arr.length-i-2=-1所以下标越界。
而我们把arr.length-i-2作为所替换数组元素的下标时,
只要取到下标为0的(即数组中第一个元素即可,即arr.length-i-2能取到0即可,
反推i=4(i最大只能取4)源代码 i < arr.length可取到5,
所以应该更正为 i < arr.length-1或者 i < =arr.length-2;这样就能避免出现下标越界
的问题。)*/
if(num>arr[arr.length-i-2]){
int x=arr[arr.length-i-2];
arr[arr.length-i-2]=num;
arr[arr.length-1-i]=x;
}else{break;
}
}
System.out.println(Arrays.toString(arr));
}
}
2.本题还有一种方法,即通过获取替换数组下标来解决,这种方法更容易理解。
package pinxixi;
import java.util.Arrays;
public class java3arr {
public static void main(String[] args) {
int[]arr={99,88,77,66,55};
int num=90;
int[] arr2=new int[arr.length+1];
for (int i = 0; i < arr.length; i++) {
if(i<=arr.length-1){
arr2[i]=arr[i];
}
}
arr=arr2;
int index=0;
for (int i = 0; i < arr.length; i++) {
if(arr[i]<num){
index=i;
break;
}
}
for (int i =arr.length-1; i>index; i--) {
arr[i]=arr[i-1];
}arr[index]=num;
System.out.println(Arrays.toString(arr));
}
}
运行结果