【问题标题】:Inserting into a simple Array and Deleting插入一个简单的数组并删除
【发布时间】:2016-03-13 07:12:53
【问题描述】:
public class DataOperations {
int arraySize=50;
int[]array=new int[arraySize];
public void generateRandomArray(){
for(int i=0;i<arraySize;i++){
    array[i]=i;


}
}
public int getValueAtIndex(int index){
if(index<arraySize){
    System.out.println("Your value At index "+index+" is "+array[index]);
    return array[index];
}else{
    System.out.println("Please Return an Index that is inbounds");
    return 0;
}
}
public boolean doesArrayContainValue(int searchValue){
boolean valueInArray=false;
for(int i=0;i<arraySize;i++){
    if(array[i]==searchValue){
         valueInArray=true;
    }
}
return valueInArray;

}
 public void deleteIndex(int index){
if(index<arraySize){
    for(int i=index;i<(arraySize-1);i++){
        array[i]=array[i+1];

    }       
}
System.out.println(arraySize);
arraySize--;
System.out.println(arraySize);


}
public void printArray(){
for(int i=0;i<arraySize;i++){
    System.out.print(i+"-");
    System.out.println(array[i]);
}
}
public void insertValue(int index){
if(index<arraySize){
array[arraySize]=index;
System.out.println(arraySize);
arraySize++;
System.out.println(arraySize);
}

}
 public void linearSearchForValue(int value){
boolean valueInArray=false;
System.out.println("The was Found and is at Index:");
for(int i=0;i<arraySize;i++){
    if(array[i]==value){
        System.out.println(i);
    }
}
}
}

嘿,所以我为我的数组创建了简单的添加和删除方法。但是,我不确定几个部分。我了解 add 方法,并且我们正在将我在下面的 Driver 类中创建的这个特定数组对象的 arraySize 从 50 减少到 49。但是,我不确定为什么我不能在我的删除方法 insertValue 方法之前执行我的 add 方法,如果我将 arraySize++ 放在 array[arraySize]=index 之前,并且没有调用我的 deleteIndex 方法不应该我的 arraySize=51?但这会引发越界异常 下面的驱动类

public class Driver {
public static void main(String[] args) {
    DataOperations array=new DataOperations();
    array.generateRandomArray();
    array.insertValue(20);
    array.printArray();

}
}

【问题讨论】:

  • 数组是固定大小的数据结构。您无法即时更改其大小。在您的情况下,arraysize 不是实际的arraysize,您正在维护它以用于计算目的。您可以通过调用 array.length 获得实际的数组大小。在该阵列的整个生命周期中它将保持不变。如果要更改大小,请使用 ArrayList。
  • 但是如果我先调用我的 deleteIndex 方法,然后我调用我的插入方法,这是怎么回事。如果它是固定的,那么我首先调用哪种方法不应该无关紧要吗?它不应该每次都给我一个越界异常吗?
  • 只要你的大小不超过实际的数组大小,它就会起作用。因此,只要您的大小小于 50,任何数量的添加和删除都可以。一旦达到 50,它将开始失败。您正在将自己的变量与 java 的数组大小混合。看看这个 - docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
  • 哦,等一下,我想我明白了,所以如果我创建一个名为 arraySize=10; 的变量然后使我的数组大小=50;我可以插入和删除,因为我不会操纵实际的数组大小吗?
  • 如果您创建一个大小为 10 的数组,并且要插入 50 个元素,则必须创建大小为 50 的新数组,从大小为 10 的数组中复制元素,然后添加剩余元素.您不能将旧数组修改为新大小。

标签: java arrays eclipse stack queue


【解决方案1】:

int arraySize=50;

您创建了一个大小为 50 的数组。数组的大小是固定的,因此您无法获得大小为 51 的数组。在您的代码中,当从数组中添加/删除一个元素时,您不会更改数组的大小。您只是移动索引以获得所需的输出。如果你想要一个更大的数组,你可以:

  1. 创建一个所需大小的新数组并将所有元素从旧元素复制到新元素
  2. 使用 ArrayList 而不是数组。

【讨论】:

  • 如果您创建一个大小为 10 的数组,并且要插入 50 个元素,则必须创建大小为 50 的新数组,从大小为 10 的数组中复制元素,然后添加剩余元素.您不能将旧数组修改为新大小。
猜你喜欢
  • 1970-01-01
  • 2016-05-28
  • 2014-01-25
  • 2021-06-06
  • 2023-03-03
  • 1970-01-01
  • 2013-08-22
  • 2017-07-17
  • 1970-01-01
相关资源
最近更新 更多