【发布时间】:2016-09-10 01:28:58
【问题描述】:
我的教授给了我们这段代码,它创建了一个排序的 int 数组,并希望我们将它转换为一个带有字符串的排序数组列表。这是一项维护任务,必须反映原始代码。因此,我不能使用 size 方法、Collections.sort() 或任何不反映原始代码的方法。
我们得到了
OrderedIntList() {
a = new int[10];
}
public void insert(int v) {
if(c == 0) {
a[0]= v;
c++;
} else {
int j = 0;
for (int i = 0; i < c; i++, j++) {
if(v < a[i])
break;
}
for (int i = c; i > j; i--) {
a[i] = a[i - 1];
}
a[j]= v;
c++;
}
}
这是我想出的将其转换为数组列表的方法
stringList() {
list = new ArrayList<String>(10);
}
public void insert(String element) {
if(c == 0) {
list.add(0, element);
c++;
} else {
int j = 0;
for (int i = 0; i < c; i++, j++) {
if(element.compareTo(list.get(i)) == -1)
break;
}
for (int i = c; i > j; i--) {
list.set(i, list.get(0));
}
list.set(j, element);
c++;
}
}
它不断抛出异常
list.set(i, list.get(0));
调试时我看到 ArrayList.class 抛出异常,因为索引等于大小。我似乎无法提出解决方案。任何帮助将不胜感激。
【问题讨论】:
-
简短回答:您需要使用
add方法来增加列表的大小。您不能仅通过在尚未插入的元素上调用set来做到这一点。 -
@David Wallace 所说的,即使 set 确实允许这样做,你的行 list.set(i, list.get(0));与 a[i] = a[i - 1] 不同,您正在执行类似 a[i] = a[0] 的操作。所以你有两个错误。另外我只是猜测您误解了什么 list = new ArrayList
(10);确实,在这种情况下,它不会列出 10 个字符串,它只是使用数字 10 作为“提示”将初始容量(不是大小)设置为 10 -
@ben 这不是“提示”。是实际大小。根据javadoc:构造一个具有指定初始容量的空列表
-
嗨@Bohemian,你说得对,容量是内存中列表的“大小”。当我说大小时,我的意思是列表的“size()”,它是列表中实际元素的数量。如果您认为容量是列表中实际元素的数量,那您就错了。
-
@ben 啊,对。容量!= 大小。
标签: java maintenance