-1
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(b'se 我正在使用 grails)。如何从 POGO 中找到最近的 lbs 资产,例如,如果我通过 282,它将返回 lbs280,如果我通过 295,它将返回 lbs300。逻辑是两个值之间的差异,如果差异相同将返回更大的值。

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

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

提前致谢。

4

3 回答 3

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);
    }
}
于 2013-08-08T11:57:51.640 回答
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          
}

这对我有用,我认为很简单,对我有用。

感谢您的回答。

于 2013-08-09T03:57:14.590 回答
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;
于 2013-08-08T14:08:15.317 回答