java - 如何在数组中插入索引
问题描述
当我打印此代码时,我在终端上得到的是 {3,4,4,20}。我想在一个位置插入一个索引并将数组向右移动。当我移动数组中的元素时,它下降了 10。我该如何解决这个问题,所以终端上打印的是 {3,4,10,20 }。谢谢!
public static void main(String[] args) {
practice obj = new practice(5);
obj.insert(3);
obj.insert(10);
obj.insert(20);
obj.insertShift(4,1);
obj.print();
public void insertShift(int index, int pos){
sum[counter++] = index;
for(int i=counter-1; i> pos; i--){
sum[i]= sum[i-1];
sum[pos]= index;
}
}
public class practice {
private int[] sum;
private int counter;
public practice(int counter) {
sum = new int[counter];
}
public void insert(int index) {
sum[counter] = index;
counter++;
if (counter == 0) {
int[] newArray = new int[counter * 2];
for (int i = 0; i < counter; i++) {
sum[i] = newArray[i];
}
// sum = newArray;
// System.out.println(counter);
}
}
public void insertAt(int index, int pos){
sum[counter] = index;
for(int i=pos; i<counter; i++){
// sum[i] = sum[i+1];
sum[pos]= index;
// newArray[pos] = index;
}
}
public void insertShift(int index, int pos){
sum[counter] = index;
for(int i=counter; i> pos; i--){
sum[i]= sum[i-1];
sum[pos]= index;
}
}
public void print () {
for (int i = 0; i < counter; i++) {
System.out.println(sum[i]);
}
}
}
解决方案
要找到问题,请在一张纸上画,然后按照代码的逻辑。
调用时insertShift(4,1)
,数据如下:
sum = { 3, 10, 20, 0, 0 }
counter = 3
index = 4
pos = 1
意思是:
┌────┬────┬────┬────┬────┐
│ 3 │ 10 │ 20 │ 0 │ 0 │
└────┴────┴────┴────┴────┘
↑
counter
sum[counter++] = index; // sum[3] = 4
// counter = 4
┌────┬────┬────┬────┬────┐
│ 3 │ 10 │ 20 │ 4 │ 0 │ Why???
└────┴────┴────┴────┴────┘
↑
counter
for(int i=counter-1; i> pos; i--){ // i = 3
sum[i]= sum[i-1]; // sum[3] = sum[2]
┌────┬────┬────┬────┬────┐
│ 3 │ 10 │ 20 │ 20 │ 0 │
└────┴────┴────┴────┴────┘
sum[pos]= index; // sum[1] = 4
┌────┬────┬────┬────┬────┐
│ 3 │ 4 │ 20 │ 20 │ 0 │ Oops! We just lost the value 10
└────┴────┴────┴────┴────┘
for(int i=counter-1; i> pos; i--){ // i = 2
sum[i]= sum[i-1]; // sum[2] = sum[1]
┌────┬────┬────┬────┬────┐
│ 3 │ 4 │ 4 │ 20 │ 0 │
└────┴────┴────┴────┴────┘
sum[pos]= index; // sum[1] = 4
┌────┬────┬────┬────┬────┐
│ 3 │ 4 │ 4 │ 20 │ 0 │ Nothing changed, value was already 4
└────┴────┴────┴────┴────┘
for(int i=counter-1; i> pos; i--){ // i = 1, loop ends
现在问自己:为什么参数的值index
被多次分配?当方法结束时,该值4
应该只在数组中的一个位置,因此多次分配该值似乎......过度。
推荐阅读
- php - 从 MySQL 连接 3 个表,并根据用户输入搜索连接
- python - 用于多标签回归的 keras 神经网络中的未知问题(S)
- c++ - 我如何为 std::string 专门化我的模板
- python - 熊猫删除括号,字符串中的内部内容在其中保留一个空格
- python - 为什么当索引为 0 和 1 时不会发生交换?
- javascript - 如何在运行时访问 vue 实例数据
- ruby - 如何为 Xcode 项目升级 Circle CI 2.0 上的 ruby 版本?
- python - GDAL安装错误“错误:命令'x86_64-linux-gnu-gcc'失败,退出状态为1”
- python - 如何在 python folium geoJSON 代码中修复“AttributeError: 'str' object has no attribute 'setdefault'”?
- javascript - 如何修复模块导入语句中的“语法错误:意外标识符”