Java 向数组中插入元素
我有一个实现接口的类,我想当我多次尝试将元素插入数组时,第一次插入都会被忘记。我真的搞不懂这个。这就是我所拥有的:Java 向数组中插入元素,java,Java,我有一个实现接口的类,我想当我多次尝试将元素插入数组时,第一次插入都会被忘记。我真的搞不懂这个。这就是我所拥有的: public void insertElementAt(int index, E el) throws IllegalArgumentException { Object temp[] = new Object[data.length + 1]; for (int i = 0; i < data.length; i++) {
public void insertElementAt(int index, E el)
throws IllegalArgumentException {
Object temp[] = new Object[data.length + 1];
for (int i = 0; i < data.length; i++) {
if (i == index){
temp[index] = el;
temp[i + 1] = data[i];
i++;
}
temp[i] = data[i];
}
data = temp;
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
}
尝试将for循环更改为:
for (int i = 0; i < data.length; i++) {
if (i == index){
temp[index] = el;
temp[i + 1] = data[i];
i++;
}else{
temp[i] = data[i];
}
}
for(int i=0;i
或
for(int i=0;i
当列表为空时,data.length是什么?如果第一次插入时它为空,则不会输入for循环,而是复制temp数组,它将在下一次插入时进入循环,长度为1。将跳过第一次插入。您必须这样做:
public void insertElementAt(int index, E el) throws IllegalArgumentException {
Object temp[] = new Object[data.length + 1];
for (int i = 0; i < data.length; i++) {
if (i >= index){
temp[i + 1] = data[i];
} else {
temp[i] = data[i];
}
}
temp[index] = el;
data = temp;
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
}
public void insertElementAt(int-index,E-el)抛出IllegalArgumentException{
Object temp[]=新对象[data.length+1];
对于(int i=0;i=索引){
温度[i+1]=数据[i];
}否则{
温度[i]=数据[i];
}
}
温度[指数]=el;
数据=温度;
如果(索引>data.length | |索引<0){
抛出新的IllegalArgumentException();
}
}
要删除它,请执行以下操作:
public void removeElementAt(int index) throws IllegalArgumentException {
Object temp[] = new Object[data.length - 1];
for (int i = 0; i < temp.length; i++) {
if (i > index){
temp[i - 1] = data[i];
} else {
temp[i] = data[i];
}
}
data = temp;
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
}
public void removeElementAt(int-index)抛出IllegalArgumentException{
Object temp[]=新对象[data.length-1];
对于(int i=0;i索引){
温度[i-1]=数据[i];
}否则{
温度[i]=数据[i];
}
}
数据=温度;
如果(索引>data.length | |索引<0){
抛出新的IllegalArgumentException();
}
}
我会这样做:
public static void insertElementAt(int index, E el)
throws IllegalArgumentException {
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
Object temp[] = new Object[data.length + 1];
for (int i = index; i < data.length; i++) {
temp[i+1] = data[i];
}
temp[index] = el;
data = temp;
公共静态void insertElementAt(int索引,E el)
抛出IllegalArgumentException{
如果(索引>data.length | |索引<0){
抛出新的IllegalArgumentException();
}
Object temp[]=新对象[data.length+1];
for(int i=索引;i
}您应该首先对有效参数进行测试(“fail early”),并且您可以充分利用JDK的实用方法为您提升:
public static void insertElementAt(int index, E el) {
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
data = Arrays.copyOf(data, data.length + 1);
System.arrayCopy(data, index, data, index + 1, data.length - index);
data[index] = el;
}
公共静态void insertElementAt(int索引,E el){
如果(索引>data.length | |索引<0){
抛出新的IllegalArgumentException();
}
data=Arrays.copyOf(data,data.length+1);
System.arrayCopy(数据,索引,数据,索引+1,data.length-index);
数据[指数]=el;
}
还要注意,您不需要声明一个
抛出
,因为IllegalArgumentException
是一个未经检查的异常,所以我删除了它。通常情况下,一个遵循这种模式。看起来需要两个索引—一个用于旧数组,一个用于新数组。目前,由于插入而沿一个元素跳过时,将沿两个数组跳过。另外,只需使用列表
。似乎在if
块的末尾需要一个continue
。数据的第一个大小是多少?
?是否有任何理由不能使用数组列表
=我认为有一个简单的修复方法,而不需要对他现有的代码做太多更改(但我似乎无法找到它),很好的回答+1.0完美。我会做一些类似的事情,从数组中移除一个元素并将其向下移动吗?你太棒了。当取出一个元素并将其移动到末尾并向下移动时,这种类似的概念是否适用?还可以取出一个元素并将其放在开始位置,然后将所有元素向上移动?这可能是件好事,但考虑到在这种情况下,两个数组保持相同的大小;-)@Tejas,如果我的回答对你有帮助,请不要忘记把它标记为正确。这可能对其他开发人员有用;-)谢谢
public static void insertElementAt(int index, E el)
throws IllegalArgumentException {
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
Object temp[] = new Object[data.length + 1];
for (int i = index; i < data.length; i++) {
temp[i+1] = data[i];
}
temp[index] = el;
data = temp;
public static void insertElementAt(int index, E el) {
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
data = Arrays.copyOf(data, data.length + 1);
System.arrayCopy(data, index, data, index + 1, data.length - index);
data[index] = el;
}