0

在为我的大学实验室做一些工作时,我正在创建这个函数,其中另一个函数中有一个 for 循环。

知道该方法用于什么并不重要。我只是不明白为什么程序没有进入第二个 for 循环。这是代码:

public void worseFit(int[] array){
  int tempPosition = -1;
  int tempWeight = 101 ;
  for (int x = 0; x < (array.length - 1); x++){
    if (allCrates.getSize() < 1){
      Crate crate = new Crate();
      crate.addWeight(array[0]);
      allCrates.add(crate);
    } else{
      for( int i = 1; i < (allCrates.getSize() - 1); i++ ){
        Crate element = allCrates.getElement(i);
        int weight = element.getTotalWeight();
        if (weight < tempWeight){
          tempWeight = weight;
          tempPosition = i;
          Crate crate = new Crate();    
          if (weight + tempWeight <= 100){ 
            crate.addWeight(weight + tempWeight);
            allCrates.setElement(i, crate);
          } else {
            crate.addWeight(weight);
            allCrates.setElement(allCrates.getSize(), crate);
          } // if
        } // if 
      } // for
    } // if
  } // for
} // worseFit

一旦程序进入代码的 else 部分,它就会立即回到第一个 for 循环的开头。

有人知道如何解决这个问题吗?

4

2 回答 2

1

的预期值似乎存在一些差异allCrates.getSize()

如果allCrates.getSize()返回 2,将进入第二个 for 循环,但不运行它,这样i < allCrates.getSize() - 1会导致 false

您可能想使用<=而不是<

于 2012-11-03T16:47:52.727 回答
0

i将第二个循环中的变量初始化为0而不是1. 因为如果您getSize()返回 1,它将不会进入该if部分,并且在进入该else部分后,for循环条件将评估为 false,因此您的for循环将不会被执行。

于 2012-11-03T16:49:55.600 回答