[英](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.