public void addClimb(String peakName, int climbTime){
for(int i = 0; i < climbList.size()-1; i++){
if(peakName.substring(0,1).compareTo(climbList.get(i).getName().substring(0,1)) <= 0){
climbList.add(i, new ClimbInfo(peakName, climbTime));
} else {
climbList.add(new ClimbInfo(peakName, climbTime));
}
}
}
目标是让它接受peakName和climbTime,让它循环遍历climbList中的climbTime对象,检查参数的第一个字母何时出现在循环中的climbTime的第一个字母之前,然后放置它一旦发生这种情况,但当我进入几个ClimbInfos并尝试打印它们时,我得到一个越界错误。此方法未正确将ClimbInfo正确插入到climbTime中。
有人可以解释我做错了吗?
答案 0 :(得分:4)
根据初始条件,您的功能将执行以下两项操作之一:
climbList
最初为空,或者最初只包含一个元素,则测试i < climbList.size() - 1
将失败,因此该函数将立即返回,不执行任何操作。climbList
最初包含多个元素,那么测试i < climbList.size() - 1
将始终成功,因为每次遍历循环都会向climbList
添加一个元素并将增加{{1}一个人。所以i
在迭代之前是真的,那么在迭代之后它将是真的。所以你有一个无限循环。我认为这些都不是你想要的。
答案 1 :(得分:0)
基本上你循环遍历整个列表,每次循环都添加一条记录。 你可能想要这样的东西:
public void addClimb(String peakName, int climbTime){
for(int i = 0; i < climbList.size(); i++){
if(peakName.substring(0,1).compareTo(climbList.get(i).getName().substring(0,1)) >= 0){
climbList.add(i, new ClimbInfo(peakName, climbTime));
return;
}
}
climbList.add(new ClimbInfo(peakName, climbTime));
}
答案 2 :(得分:0)
您未能解释问题所在。
此方法未正确将ClimbInfo正确插入到climbTime中。
不告诉我发生了什么。运行时异常?编译错误?或者你最后留下了一个空集合?
如果收到异常,请将其与堆栈跟踪一起包括在内。
如果我们假设你有一个空集合,那只能意味着一件事:永远不会达到for循环条件。我可以肯定地告诉它,因为if语句有一个插入的else。因此,保证循环的每次迭代都插入。因此,循环不能迭代。
我怀疑这是尺寸检查。
for(int i = 0; i < climbList.size()-1; i++){
由于两个原因,这种逻辑几乎肯定是错误的:
答案 3 :(得分:0)