有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java设置不带舍入的double值

首先请注意,我在谷歌上找不到答案,所以这个问题非常简单

所以我试着制作一个java程序,包括查看图像中像素的颜色,并将其插入神经网络

我制作了一种方法,尝试将十六进制转换为神经网络的输入。(这意味着从0到1的值)

public double[] toHex(int a)
{
    char[] hex = Integer.toHexString(a).toCharArray();
    double[] out = new double[6];
    for(int i = 2; i < hex.length; i++)
        switch(hex[i - 2])
        {
            case('0'):
                out[i - 2] = 0D;
            case('1'):
                out[i - 2] = 0.066D;
            case('2'):
                out[i - 2] = 0.133D;
            case('3'):
                out[i - 2] = 0.2D;
            case('4'):
                out[i - 2] = 0.266;
            case('5'):
                out[i - 2] = 0.333D;
            case('6'):
                out[i - 2] = 0.4D;
            case('7'):
                out[i - 2] = 0.466D;
            case('8'):
                out[i - 2] = 0.533D;
            case('9'):
                out[i - 2] = 0.6D;
            case('a'):
                out[i - 2] = 0.666D;
            case('b'):
                out[i - 2] = 0.733D;
            case('c'):
                out[i - 2] = 0.8D;
            case('d'):
                out[i - 2] = 0.866D;
            case('e'):
                out[i - 2] = 0.933D;
            case('f'):
                out[i - 2] = 1.0D;
        }
    return out;
}

但出于某种原因,当我查看生成的代码时,这样做总是导致1.0或0.0。有人能解释一下发生了什么事吗

编辑对不起。我很笨。我在看一个只显示0和f的特定部分,但我确实忘记了中断


共 (1) 个答案

  1. # 1 楼答案

    您在每个案例的结尾缺少break。它应该看起来更像

    switch(hex[i - 2])
    {
        case('0'):
            out[i - 2] = 0D;
            break;
        case('1'):
            out[i - 2] = 0.066D;
            break;
        // ...
    }
    

    如果没有这些,程序会从一个case到下一个,每个程序都会覆盖上一个程序的结果。由于最后一个案例有out[i - 2] = 1.0D,因此这是您将始终从switch中看到的结果