为什么今天
依然是二维数组呢?
因为发生了一件很Sb的事情。
先看图吧
定义二维数组的作业:
图片来源:韩老师
作业:{10,12,45,90} 插入一个数,保持升序
最开始我是这样做排序的,结合冒泡排序,咱瞬间就想到可以通过位置交换实现,就是麻烦点
int arr[] = {10,12,45,90};
int arr1[] = new int[arr.length+1];
System.out.println("请输入要插入的数: ");
Scanner myScanner = new Scanner(System.in);
int nub = myScanner.nextInt();
arr1[arr.length] = nub;
for(int i = 0;i<arr.length;i++){
arr1[i] = arr[i];
}
arr = arr1;
for(int i = 0;i<arr.length;i++){
for(int j = 0;j<arr.length-1;j++){
if(arr[j]>arr[j+1]){
arr[j]+=arr[j+1];
arr[j+1]=arr[j]-arr[j+1];
arr[j]-=arr[j+1];
}
}
}
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
看了老师的解析后,感觉难度尚可,就来了一套化死为生
没想到在一个小小的细节上卡1个小时,看了半天才猛然发现index没有放到循环里
int arr[] = {10,12,45,90};
while(true){
int index = -1; //【很容易忽略的细节,既然是一个循环,那么每次都给index重新赋值才行】
System.out.println("请输入要插入的数:");
Scanner myScanner = new Scanner(System.in);
int nub = myScanner.nextInt();
for(int i = 0;i<arr.length;i++){ //遍历数组,查看输入数位置,没有发现nub<=arr[i];说明index = arr.length 即:添加到数组最后
if(nub<=arr[i]){
index = i;
break;
}
if(index == -1){
index = arr.length;
}
}
int arr1[] = new int[arr.length+1];
for(int i = 0,j = 0;i<arr1.length;i++){
if(index != i){ //如果index不等于i,就证明插入数不是这个位置,就把arr对应位置的值赋给arr1
arr1[i] = arr[j];
j++;
}else{ //插入数是当前位置
arr1[i] = nub;
}
}
arr = arr1;
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("是否继续?");
String chose = myScanner.next();
if("否".equals(chose)){
break;
}
}