比较具有两个属性的项目数组
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
- 否则,比较
current
和best
的容量,将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);
我在 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
- 否则,比较
current
和best
的容量,将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);