漂浮在0-1到0-17之间

时间:2015-09-29 13:09:45

标签: java

我在计算机类中得到了这个看似简单的任务,事实证明它比我更难:程序得到0到1之间的随机浮点数然后我需要变成0到17之间的int,不包括0& ; 17(十六个可能的值)。所以我开始制作一个简单的for循环,它并没有真正起作用,所以我去了硬编码:

public static float step(float input){
    if(input < (1/16 * 1)){
        return 1;
    }else if(input < (1/16 * 2)){
        return 2;
    }else if(input < (1/16 * 3)){
        return 3;
    }else if(input < (1/16 * 4)){
        return 4;
    }else if(input < (1/16 * 5)){
        return 5;
    }else if(input < (1/16 * 6)){
        return 6;
    }else if(input < (1/16 * 7)){
        return 7;
    }else if(input < (1/16 * 8)){
        return 8;
    }else if(input < (1/16 * 9)){
        return 9;
    }else if(input < (1/16 * 10)){
        return 10;
    }else if(input < (1/16 * 11)){
        return 11;
    }else if(input < (1/16 * 12)){
        return 12;
    }else if(input < (1/16 * 13)){
        return 13;
    }else if(input < (1/16 * 14)){
        return 14;
    }else if(input < (1/16 * 15)){
        return 15;
    }else{
        return 16;
    }
}

但由于某些原因我无法找到它总是返回16!谁能帮助我? (请JAVA)

6 个答案:

答案 0 :(得分:6)

请注意,仅使用值1/16会创建一个整数除法,在这种情况下会产生值0。所以基本上每个语句都会检查值是否为0.要获得正确的结果,您应该将条件更改为1.0/161d/161f/16作为float的表示,因为{ {1}}代表双倍。

答案 1 :(得分:6)

提示#1:1/16是整数零。

提示#2:如果你将输入乘以?并将其转换为整数,你得到了什么? (不,你不需要一系列if陈述......)

答案 2 :(得分:3)

整数除法的结果始终是整数。 将其中一个或两个更改为双(或浮动),你就可以了。

举个例子:

System.out.println("1/16: " + (1/16));
System.out.println("1.0/16: " + (1.0/16));
System.out.println("1/16.0: " + (1/16.0));
System.out.println("1.0/16.0: " + (1.0/16.0));

懒惰的Runnable版本: http://ideone.com/jecgGP

答案 3 :(得分:2)

的问题
(1/16 * 1)//result is int zero

使用

 ((float)1/16 * 1)

答案 4 :(得分:1)

使用映射功能可以帮助您编写更少的代码;)

public static float map(float value, float smallestValue, float largestValue, float smallestReturn, float largestReturn) {
    return smallestReturn + (largestReturn - smallestReturn) * ((value - smallestValue) / (largestValue - smallestValue));
}

此函数取值 - &gt;在你的情况下,浮点数介于0和1之间。 您必须指定值的范围,最小值= 0,最大值= 1 然后你给它返回的范围:1到16。

(int) map( randomGeneratedNumber , 0 , 1 , 1 , 16 );

希望这符合您的需求!

答案 5 :(得分:0)

float  max = 16;
max = max / randomClamped;
int retval = (int)max % 17;