java - 在java中从左侧向数组添加新元素向右移动一步
问题描述
我的问题是:我希望向数组中添加一个元素。
数组长度为 3,这要归功于 'createArray' 方法
方法 'addElementsToArray' 将新元素添加
到 'this.array[0]' 的位置如果使用数组中的其余位置,
它们会向右移动一步,使第一个位置为空对于新元素。
如果我的数组长度等于 10 或 100 怎么办?
无论数组的长度如何,有没有办法使用更少的代码行。
谢谢
private int[] array;
public createArray(int m){
this.array = new int[m];
}
public void addElementsToArray(int element){
try {
for (int i=0; i<=this.getArray().length; i++) {
if (this.getArray()[i] == 0) {
this.getArray()[i] = element;
System.out.println("1");
break;
}else if(this.getArray()[i] != 0 && this.getArray()[i + 1] == 0) {
int vault = this.getArray()[i];
if (this.getArray()[i + 1] == 0) {
this.getArray()[i + 1] = vault;
this.getArray()[i] = element;
System.out.println("2");
break;
}
}else if(this.getArray()[i] != 0 && this.getArray()[i + 1] != 0) {
if (this.getArray()[i + 2] == 0) {
int vault = this.getArray()[i];
this.getArray()[i + 2] = this.getArray()[i + 1];
this.getArray()[i + 1] = vault;
this.getArray()[i] = element;
System.out.println("3");
break;
}
}
}
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("This Stack is Full");
}
System.out.println(Arrays.toString(this.getArray()));
}
解决方案
这个想法是从第一个元素到最后一个元素循环遍历数组,以查找第一次出现的 0。如果找不到,则数组已满。如果这样做,请使用System.arraycopy
将所有内容从 0 向右移动到标识的位置 1,然后在位置 0 处插入新元素。
public void addElementsToArray(int element){
for(int i=0; i<array.length; i++)
{
if(array[i] == 0)
{
System.arraycopy(array, 0, array, 1, i);
array[0] = element;
return;
}
}
throw new IllegalStateException("Array is full");
}
推荐阅读
- mysql - 如何在windows中使用cmd启动和停止mysql服务器
- xcode - Xcode 9:无法使用钛中的新(默认)构建系统构建应用程序
- operating-system - “计算机系统”的定义?
- javascript - div内的单选按钮
- angular - Angular 7,创建和运行新项目失败
- python - 如何在 C 语言中使用经过训练的图形文件
- python - Python 使用 GET 从 API 检索多页数据
- angularjs - 无法从选定的选项 Angular JS 中获取标签
- sql-server - 将表名和 where 条件动态传递到存储过程中,并将所有数据放入 #table 以供将来按摩
- c# - 从 WPF 中的 datagridview 隐藏特定单元格