【问题标题】:Java Potential Bodmas Issue during calculation计算期间的 Java 潜在 Bodmas 问题
【发布时间】:2015-02-21 12:40:46
【问题描述】:

我将这两个值传递给我的函数...

    float c = -80f;
    float m = 1.66f;

该函数接受两个用于图像对比度增强的浮点数,但是在 if 结构期间,程序总是进入 if else 块,这是不正确的。因此,数组中的每个值都被分配了 255,这是不正确的,任何人都可以确定为什么会这样吗?

//look up table for linear stretching
public short[] linearStretchLut(float m,float c)
{
    short Lut[] = new short[256];

    for(int i =0; i<Lut.length;i++){            
        if(i < -c/m){
            Lut[i] = 0;
        } else if(i > (255 - c) / m) {
            Lut[i] = 255;
        } else {
            Lut[i] = (short) (m*i+c);
        }
        System.out.println(i + " " + Lut[i]);
    }
    return Lut;
}   

一个应该使条件为假的例子......

i=10 10 > (255-c) / 米 (最终值应为 201.8) 所以这应该是一个错误的评估,但程序不会复制这种行为。

【问题讨论】:

  • 您是否尝试过使用调试器?在Lut[i] = 255; 行设置断点,查看 i、c 和 m 的值。

标签: java math logic


【解决方案1】:

问题原来是这样的……

我以错误的顺序将变量 m 和 c 传递给函数,所以问题是我自己造成的 :)

【讨论】:

    【解决方案2】:

    我创建了以下测试程序,您似乎只是以错误的顺序传递值:

    package test;
    
    public class Test {
    
        //look up table for linear stretching
        public static short[] linearStretchLut(float m,float c)
        {
            short Lut[] = new short[256];
    
            for(int i =0; i<Lut.length;i++){ 
                float f1 = -c/m;
                float f2 = (float) (255 - c) / m;
                if(i < f1){
                    Lut[i] = 0;
                } else if(i > f2) {
                    Lut[i] = 255;
                } else {
                    Lut[i] = (short) (m*i+c);
                }
                System.out.println("-c/m = " + f1 + " / " + " (255 - c) / m = " + f2 + "/ i = " +  i + " / Lut[i] = " + Lut[i]);
            }
            return Lut;
        } 
    
        public static void main(String[] args)
        {
            float c = -80f;
            float m = 1.66f;
            short Lut[] = Test.linearStretchLut(m,c);
        }
    }
    

    【讨论】:

    • 糟糕,抱歉,您在我发帖时回答了。对不起!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2019-03-02
    • 1970-01-01
    • 2013-09-19
    相关资源
    最近更新 更多