java - 添加到动态数组的左右两边问题
问题描述
所以我试图在Java中创建一个动态数组。对于这个问题,有一个名为 store 的主数组,它具有定义的大小。在存储中是一种伪数组,它利用存储块作为动态数组。left 和 right 变量是分别用作动态数组的头部和尾部的索引。这意味着 left 的值是 store 中动态数组开始的索引,而 right 是结束的索引。
我一直在尝试为此创建 addleft 和 addright 方法,但我不断出现越界错误。但是,我不确定我到底哪里出了问题。
boolean add(int i, int x){
if (i<0 || i>size) return false;
if (i<size-i)
addLeft(i,x);
else
addRight(i,x);
return true;
}//add
void addLeft(int i, int x){
size ++;
left--;
if(left == -1) {
restore();
}
for(int j = left; j < left + i; j++) {
store[j] = store[j+1];
}
store[left + 1 + i] = x;
return;
}//addLeft
void addRight(int i, int x){
size ++;
right++;
if(right == CAP+1) {
restore();
}
for(int j = right; j > left + i; j--) {
store[j] = store[j-1];
}
store[left + 1 + i] = x;
return;
}//addRight
我正在寻找的结果是输入要在索引处插入的整数,然后将值向左(对于 addleft)或向右(对于 addright)移动到它们各自的方向。restore() 方法用于在动态数组的一侧到达终点时扩展存储数组。
解决方案
对数据类型做了一些假设,并用 system.out 命令替换了你的函数。我在 for 循环中超出了界限异常,所以我认为您的错误在于您的数组称为 storestore[j] = store[j+1];
就在您的 for 循环范围之外的行也超出了界限:store[left + 1 + i] = x;
这是一个有根据的猜测如果你可以发布你的整个代码,我会运行它,希望能给出更好的答案!不确定变量 size、left、right、store[] 和 CAP 是什么。
更新:
在更新 addRight 方法后能够让程序运行。从商店创建了一个 +1 大小的临时数组。存储然后克隆 temp。这是我关于如何处理 addRight 方法的想法。
void addRight(int i, int x){
size++;
right++;
if(right == CAP+1) {
restore();
}
int[] temp;
temp = new int[store.length+1];
for(int j = 0; j <= store.length; j++) {
if(j < i){
temp[j] = store[j];
}
else if (j == i) {
temp[j] = x;
}
else if( j > i)
{
temp[j] = store[j-1];
}
}
store = new int [temp.length];
for(int k = 0; k < temp.length; k++)
{
store[k] = temp[k];
}
return;
推荐阅读
- reactjs - 如何使用或任何其他方式在反应 js 中使表格的整行可点击?
- c++ - 指针的函数模板特化
- c# - 坦克桶旋转
- javascript - 使用 JS 确定 DOM 元素媒体样式
- google-colaboratory - 在 colab 中使用“安装驱动器”网络按钮的错误(已解决)。从 google colab 访问“与我共享”文件(2020 年,以前的解决方案似乎失败了)
- javascript - Firebase 基本规则
- reactjs - 如何从组件中禁用字段数组中的字段?
- python - Python虚拟环境,是否还需要完整的python安装?
- php - 从数据库中选择图像并将其插入到更新表单中
- python - 从 networkx kernighan_lin_bisection 创建元组对象