(Java)当试图返回自定义Vector类的新子向量时,我的方法将最后一个元素替换为零.为什么



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

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

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

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

(英语不是我的第一语言,所以大多数名字都是斯洛文尼亚语,为了清晰起见,最重要的名字都被翻译了(

这就是类的样子:

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(vektorsubvector(0,6((返回[2,3,4,5,6,1,0]。

如果我将subvector.add(elementi[I](交换为subvector.insert(elementi[I](,那么子向量方法在第一个元素之后停止的原因是什么?如果我用足够大的启动容量初始化一个向量,这不应该也起作用吗?

使用subvector.add(elementi[i]);将元素添加到subvector会正确更改子向量stElementov

之后,您编写subvector.stElementov++;,它增加了subvector的大小,而实际上没有添加元素。

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

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

相关内容

最新更新