比较具有两个属性的项目数组

Comparing an array of item with two attributes

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

John 被要求设计一个捡瓶子的程序。程序必须从 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);

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

因此,算法如下所示:

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

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

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

试试看: 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);