如何在POJO属性中找到最接近的java值?

时间:2013-08-08 11:52:13

标签: java nearest-neighbor

class CalorieExpenditures {
        String activity
        int lbs90
        int lbs100
        int lbs110
        int lbs120
        int lbs130
        int lbs140
        int lbs150
        int lbs160
        int lbs170
        int lbs180
        int lbs190
        int lbs200
        int lbs220
        int lbs240
        int lbs260
        int lbs280
        int lbs300              
}

从上面的POGO(我用的是grails)。 如何找到POGO最近的lbs酒店 例如 如果我通过282它将返回lbs280并且如果我通过295它将返回lbs300。 逻辑是两个值之间的差异,如果差异相同则返回更大的值。

您可以建议使用java方法或grails方法。

我需要一个找到最接近值的简单程序。

提前致谢。

3 个答案:

答案 0 :(得分:0)

下面是从int数组中找到给定数字的示例,其中最接近的是&上

public class FindNearestInt
{
    public static void main(String[] args)
    {
        Random random = new Random();
        int array[] = new int[30];
        //Initialise array with rendom values
        for (int i = 0; i < array.length; i++)
        {
            array[i] = random.nextInt(200);
        }

        System.out.println(Arrays.toString(array));
        Arrays.sort(array);
        System.out.println(Arrays.toString(array));

        // Number you want to find in array
        int searchFor = 57;
        //Nearest lower you searching for  
        int nearestLower = 0;
        //Nearest upper you searching for 
        int nearestUpper = Integer.MAX_VALUE;
        int searchForExist = -1;
        for (int i = 0; i < array.length; i++)
        {
            int j = array[i];
            if (j < searchFor)
            {
                if(j > nearestLower){
                    nearestLower = j;
                }
            } else if (j > searchFor){
                if(j < nearestUpper){
                    nearestUpper = j;
                }
            } else {
                nearestLower = -1;
                nearestUpper = -1;
                searchForExist = j;
                break;
            }
        }
        System.out.println("Nearest Lower : " + nearestLower);
            // This will print -1 if number exist in array
        System.out.println("Provided Number Already Exist : " + searchForExist);
        System.out.println("Nearest Upper : " + nearestUpper);
    }
}

答案 1 :(得分:0)

更简单,更快速的解决方案是使用公式

public static int nearest(int num) {
    return num < 90 ? 90 : 
           num < 200 ? Math.round(num/10.0) * 10 :
           num < 300 ? Math.round(num/20.0) * 20 : 300;

答案 2 :(得分:0)

def calorieExpendituresWeightCategory(float weight){
    int nearest = 0;        
    int min = Integer.MAX_VALUE
    CalorieExpenditures.properties.each {
        if(it.toString().startsWith("lbs")){
            int j = it.toString().substring(it.toString().indexOf("lbs"))               
            int k = (weight - j) * (weight - j)             
            if(k < min){
                min = k
                nearest = j
            }
        }
    }   
    return nearest          
}

这对我有用,我觉得简单,对我有用。

感谢您的回答。