繁体   English   中英

(Java) 当尝试返回自定义向量 class 的新子向量时,我的方法将最后一个元素替换为零。 为什么? [关闭]

[英](Java) When trying to return a new subvector of custom Vector class, my method replaces the last element with zero. Why? [closed]

我只是在学习如何使用类和对象,并且正在编写不同的方法来使用我创建的 Vector class。

我已经编写了两种添加和插入元素的工作方法,现在正在尝试在新方法中使用其中任何一种,其目的是创建一个新的向量子向量 object,它只包含从索引 a 到索引 b 的元素- 1,但容量与原版相同。

我尝试过同时使用 insert 和 add 方法,insert 方法似乎过早地中断循环并且只返回第一个元素,而 add 方法几乎返回正确的结果,但将最后一个元素替换为零。

我的第一种方法是像使用 arrays 一样复制和插入元素,但这会返回相同的结果。 为什么我的代码会返回这样的结果?

(英语不是我的母语,所以大部分名字都是斯洛文尼亚语,为了清楚起见,最重要的都翻译了)

这就是 class 的样子:

    public class VektorInt{
    private int[] elementi;
    private int stElementov;

private static final int START_CAPACITY = 10;
//konstanta, lahko jo večkrat uporabimo

public VektorInt(int startCapacity){
    this.elementi = new int[startCapacity];
    this.stElementov = 0;
}
public VektorInt() {
    this(START_CAPACITY);
}

这些是用于操作对象的方法:

public void set(int index, int value){
    if(index > this.elementi.length){
        throw new IndexOutOfBoundsException
    }
    this.elementi[index] = value;
}
public void add(int value){
    this.expandIfNeeded();
    this.elementi[this.stElementov] = value;
    this.stElementov++;
}
private void expandIfNeeded(){
    if (this.stElementov >= this.elementi.length){
        int[] stariElementi = this.elementi;
        this.elementi = new int[2*stariElementi.length];
        for(int i = 0; i < this.stElementov; i++){
            this.elementi[i] = stariElementi[i];
        }
        
    }  
}
public void insert(int index, int value){
    this.expandIfNeeded();
    for(int i = this.stElementov - 1; i >= index; i--){
        this.elementi[i + 1] = this.elementi[i];
    }
    this.elementi[index] = value;
    this.stElementov++;
}

这是有问题的方法:

public VektorInt subvector(int start, int end){
    VektorInt subvector = new VektorInt(this.elementi.length);
    for(int i = start; i <= (end) - 1; i++){
        subvector.add(elementi[i])
    }
    subvector.stElementov++;
    return subvector;
}

System.out.println(vektor.subvector(0, 6)) 返回 [2, 3, 4, 5, 6, 1, 0]。

如果我将 subvector.add(elementi[i]) 换成 subvector.insert(elementi[i]),那么 subvector 方法在第一个元素之后停止的原因是什么? 如果我初始化一个具有足够大的起始容量的向量,这不也可以吗?

使用subvector subvector.add(elementi[i]); 正确更改子向量stElementov

之后你写subvector.stElementov++; 这会增加子subvector的大小而无需实际添加元素。

这意味着子subvector的实际大小现在比添加的元素数量大一。

对于这个额外的元素,该值是int[]中的默认值 - 恰好为零 (0)。 这是您在打印出subvector时看到的额外零。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM