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。

有人可以解释我在做什么错吗?

最佳答案

根据初始条件,您的函数将执行以下两项操作之一:


如果climbList最初为空,或者最初仅包含一个元素,则测试i < climbList.size() - 1将失败,因此该函数将立即返回,不执行任何操作。
如果climbList最初包含多个元素,则测试i < climbList.size() - 1将始终成功,因为每次循环都将为climbList添加一个元素,并使i递增1。因此i < climbList.size() - 1在迭代之前为true,然后在迭代之后为true。所以你有一个无限循环。


我认为这些都不是您想要的。

07-27 16:33