这里的所有方法都是正确的,但我的问题是我必须在零件数组中找到具有一定重量的零件。所以在我做了getweight方法后,我想我必须调用它。但代码的最后一部分是我遇到的问题。它从行公共部分getPartWithWeight(int weight){
开始class Robot {
Part[] parts;
public Robot () {// assume these are right}
}
public void addPart(Part p) { // assume these are right}
}
class Part {
// Class details not shown
public double getWeight() {//... }
}
public int getPartnum() {//...}
}
public String getMaterial() {//...}
}
public Part getPartWithWeight (int weight){
for(int i = 0; i < parts.length; i ++){
if (parts[i].weight == weight) {
return parts[i];
}
}
答案 0 :(得分:1)
嗯,这是“开箱即用”的版本。
第1步写一个比较器。
class PartComparator implements java.util.Comparator<Part> {
@Override
public int compare(Part part1, Part part2) {
return part1.weight - part2.weight;
}
public final static PartComparator instance = new PartComparator();
}
如果你在Part中声明它,那么比较器类应该是静态的(这是我建议的)。
第2步使用比较器
public Part getPartWithWeight (int weight){
Part pivot = new Part();
pivot.weight = weight;
int idx = Arrays.binarySearch(parts, pivot, PartComparator.instance);
return parts[idx];
}
答案 1 :(得分:0)
if (parts[i].weight == weight)
应该说
if (parts[i].getWeight() == weight)
您应该使用 getWeight(),因为这是在Parts类中定义的方法。 此外,如果您遇到的问题是从机器人类获取零件数组并在零件类中使用它,那么您应该将其作为参数传递。
public Part getPartWithWeight (int weight, Part[] parts){
for(int i = 0; i < parts.length; i ++){
if (parts[i].getWeight() == weight) {
return parts[i];
}
}
}
然后当你调用方法getPartWithWeight()时,确保你也把数组放在那里。
编辑:同样根据Ray Cheng的评论,你正在寻找的权重应该是一个int,但你的getWeight()方法返回一个double ....所以你的getWeight()应该返回in或者你应该在进行比较之前将其作为int进行类型转换。请注意,如果将其类型化为int,则会失去一些精度。最好修复你的getWeight(),这样它就会像你需要的那样返回一个双精度。答案 2 :(得分:0)
要实现二进制搜索,首先需要将数组减半,然后决定要开始搜索的那一半。然后你再将一半的阵列切成两半并重复......
除非您想要实现自己的,但看起来有一个内置的,你可以打电话。
http://docs.oracle.com/javase/7/docs/api/index.html?java/util/Arrays.html