将项目数组与两个属性进行比较

时间:2015-03-20 11:55:48

标签: java logic

我遇到了一个问题,即我在Java中解决问题。问题是这样的:

约翰被要求设计一个挑选瓶子的程序。该程序必须由4瓶决定:瓶A,B,C,D。某些瓶子可能有孔。因此,该程序必须防止采摘有孔的瓶子和最大的瓶子,以便携带尽可能多的水。

Bottle A - has holes and can hold 5 litres of water
Bottle B - no holes and can hold 2 litres of water
Bottle C - no holes and can hold 3 litres of water
Bottle D - no holes and can hold 1 litre of water`

我尝试使用嵌套for循环在Java中编程。但是,它没有给我正确的答案。

Bottle[] bottles = {a, b, c, d};
Bottle chosen = a;
for(int i=0; i<bottles.length; i++)
{
    for(int j=i+1; j<bottles.length; j++)
    {
        if(bottles[i].capacity < bottles[j].capacity && bottles[j].noHoles())
        {
            chosen = bottles[j];
        }
    }
}

System.out.println(chosen.id);

3 个答案:

答案 0 :(得分:1)

首先,既然您选择了一件事,那么您只需要一个循环。其次,由于其中一个属性(即noHoles())与固定值进行比较(即它必须是true),因此唯一需要进行比较的是容量。

因此,算法如下所示:

  • 将最佳瓶子设置为null
  • 制作一个逐个穿过瓶子的循环
  • 检查当前瓶子是否有孔;如果是,继续循环
  • 检查最佳瓶子是否为null。如果是,请将best设置为current
  • 否则,请比较currentbest的容量,并将best设置为容量更大的瓶子。

答案 1 :(得分:0)

你的问题有点令人困惑所以我不确定我是否回答了你的问题。但是,如果您只需要检查Bottle是否有漏洞,则不需要使用嵌套的for循环。我建议使用增强型for循环。像这样的东西:

for(Bottle bot : bottles){
      if(bot.noHoles()) //i assume noHoles is bollean type
          System.out.println(bot);
}

答案 2 :(得分:0)

尝试为:    Bottle[] bottles = {a, b, c, d}; Bottle chosen = bottles[0]; for(int i=1; i<bottles.length; i++) { if(bottles[i].noHoles() && bottles[i].capacity > chosen.capacity) chosen = bottles[i]; }      System.out.println(chosen.id);