【问题标题】:Adding elements to an array java将元素添加到数组java
【发布时间】:2015-02-06 03:39:10
【问题描述】:

您好,我想知道如何编写一个方法来从 java 中的对象数组中添加和删除对象。我不允许使用任何 java 内置的抽象数据结构来执行此操作,例如数组列表或向量等。。汽车列表最初是空的,但 newCar - 要添加到此集合的新 Car 对象 position - 此 CarCollection 中将插入汽车的位置 前提条件: 此 CarCollection 对象已被实例化,并且 1

后置条件: 新车现在存储在集合中的所需位置。原来位置大于或等于位置的所有汽车都向后移动一个位置。 (例如:如果一个集合中有 5 辆汽车,位置 1-5,并且您在位置 4 插入一辆新车,新卡现在将位于位置 4,位于位置 4 的汽车将移动到位置 5 ,并且位于位置 5 的汽车将移动到位置 6)。

public class CarCollection {

    private Car[] collection;
    final int maxCarsPossible = 100;

    public CarCollection()
    {
        collection = new Car[0];

    }

    public void addCar(Car newCar,int position)
    {

        for(int i =0; i < collection.length; i++)
        {
            if(collection.length+1>=position&&position>=1)
            {
                i = position;
                collection[i] = newCar;
            }
        }

    }

【问题讨论】:

  • 您想在数组中添加/删除一个元素(如您的标题中所示),还是创建一个新数组,该数组是添加/删除元素的旧数组的副本?
  • @AdrianShum 提出了一个很好的问题,这对于确定您需要的解决方案类型非常重要。制作数组的副本将“删除”数据。不过,我确实在您的构造函数中看到了一个问题;您正在立即将数组大小设为 0。这可能不是您想要的。此外,您的 if 语句确实令人困惑,请尝试将其拆分,如果可以提高清晰度,则使用嵌套的 if 语句没有害处。
  • collection.length + 1?你什么时候会跨过数组的边界?由于您的 for 循环的设计方式,此条件将始终为真。您永远不应该查看数组的边界。
  • 我认为最大的问题是OP没有问任何问题......
  • @AdrianShum 我需要在当前数组中添加一个汽车对象而不会丢失任何先前的数据,因此该方法本质上需要在数组中的任何给定位置添加一个元素并移动任何元素所在的位置该位置到下一个索引,所以如果一辆车在位置 4 并且我希望将一辆新车添加到位置 4,则该方法应该添加新车并将旧车推到位置 5,如果这有意义的话。我很难写出这个方法。现在我需要做的就是专注于向数组添加新元素

标签: java arrays loops add shift


【解决方案1】:

我建议存储另一个名为 oldCarCollection 的数组,并在每次添加新车时重新设置和更新它。例如,在您的 addCar 方法中,

public void addCar(Car carToAdd) {
    cars = new Car[oldCars.length + 1];
    for (int i = 0; i < cars.length; i++) {
        if (i == oldCars.length) {
            // If we're done transferring from old cars.
            cars[i] = carToAdd;
        } else {
            // Transfer from old cars
            cars[i] = oldCars[i];
        }
    }
    // Update oldCars
    oldCars = new Car[cars.length];
    System.arraycopy(cars, 0, oldCars, 0, oldCars.length);
}

【讨论】:

  • 有没有办法使用方法头中的设置参数来做到这一点?使用 object 和 int 插入特定位置?
  • 你可以做的是在类的顶部声明 String[] cars 和 String[] oldCars(这就是我在那个例子中所做的)。
  • 汽车对象有多个值字符串 int double 数组存储在其中
  • 我把它改成了更好的使用方式。您要添加的汽车作为方法中的参数进入,该方法在将数组大小变大并添加旧汽车后将其添加。
猜你喜欢
  • 2023-04-04
  • 2021-07-23
  • 1970-01-01
  • 2015-05-11
  • 2015-05-14
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多