Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 选择每列上有多个条件的行_Java_Algorithm - Fatal编程技术网

Java 选择每列上有多个条件的行

Java 选择每列上有多个条件的行,java,algorithm,Java,Algorithm,我有一个类似以下的问题需要在java中实现 item view Hit Quality(%) 1 20 6 55 2 18 8 67 3 16 7 70 4 13 9 80 5 17 8 85 .. .. .. .. 我这里有上述格式的数据 我必须只选择那些视图、命中率和质量平均值之和最高的行 这是上面的

我有一个类似以下的问题需要在java中实现

item    view        Hit         Quality(%)
1   20      6       55
2   18      8       67
3   16      7       70
4   13      9       80
5   17      8       85
..  ..      ..      ..  
我这里有上述格式的数据

我必须只选择那些视图、命中率和质量平均值之和最高的行


这是上面的第一个问题,第二个问题是额外的,比如我们提到的总视图、总命中率和总质量平均值的最小限制,比如视图=100、命中率=30和质量=70%。这里的首要因素是观点,次要因素是命中率,第三个因素是质量。所以现在我们必须再次为这些最高值选择行,但要小心,视图和命中的总和不应小于限制。如果没有达到极限的案例,那么我们可以继续进行,而不必关心它。

使用以下代码对结果进行排序:

import java.util.Collections;
import java.util.Comparator;
import java.util.List;


public class Item {
    private int view;
    private int hit;
    private double quality;
    public int getView() {
        return view;
    }
    public void setView(int view) {
        this.view = view;
    }
    public int getHit() {
        return hit;
    }
    public void setHit(int hit) {
        this.hit = hit;
    }
    public double getQuality() {
        return quality;
    }
    public void setQuality(double quality) {
        this.quality = quality;
    }


}


class ExecuteTest{
    public void sort(List<Item> itemList){
      Collections.sort(itemList, new Comparator<Item>() {

            @Override
            public int compare(Item item1, Item item2) {
                boolean checkView = true, checkHit = true;
                if(item1.getView() == item2.getView()){
                    checkView = false;
                }
                if(item1.getHit() == item2.getHit()){
                    checkHit = false;
                }

                 if(item1.getView() <=100 &&  item1.getHit() <= 30 && item1.getQuality() <= 70
                         &&
                         item2.getView() <=100 &&  item2.getHit() <= 30 && item2.getQuality() <= 70
                         ){
                     if(checkView && item1.getView() > item2.getView()){
                         return 1;
                     }else if(checkView && item1.getView() < item2.getView()){
                         return -1;
                     }
                     else if(checkHit && item1.getHit() > item2.getHit()){
                         return 1;
                     }else if(checkHit && item1.getHit() < item2.getHit()){
                         return -1;
                     } else if(item1.getQuality() > item2.getQuality()){
                         return 1;
                     } else if(item1.getQuality() < item2.getQuality()){
                         return -1 ;
                     } else{
                         return 0;
                     }


                 }
                return 0;
            }
        });

    }

}
import java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
公共类项目{
私有视图;
私人int hit;
私人双重品质;
public int getView(){
返回视图;
}
公共void集合视图(int视图){
this.view=视图;
}
公共int getHit(){
回击;
}
公共无效集命中(整数命中){
hit=hit;
}
公共服务质量(){
退货质量;
}
公共质量(双重质量){
质量=质量;
}
}
类执行测试{
公共无效排序(列表项列表){
Collections.sort(itemList,newcomparator(){
@凌驾
公共整数比较(项目1、项目2){
布尔值checkView=true,checkHit=true;
如果(item1.getView()==item2.getView()){
checkView=false;
}
如果(item1.getHit()==item2.getHit()){
checkHit=false;
}
if(item1.getView()