Estoy tratando de convertir un número binario en un número decimal pero mi salida siempre es 0

Aquí está mi código. Traté de convertir el binario en una matriz de caracteres, luego multipliqué cada char en la matriz por 2 a la potencia de su número correspondiente en la matriz, luego resumí todos los valores de la matriz de caracteres en un doble. Nuevo en programación, un poco confundido. Mi entrada binaria es txfBinaryInput, y mi etiqueta de salida es lblDisplay.

 private void btnProcessActionPerformed(java.awt.event.ActionEvent evt)                                           
{                                               
    if (txfBinaryInput.getText().equals(""))
    {
        lblDisplay.setText("ERROR: NO INPUT");
    } else
    {
        int n = 0;
        int[] binaryValueStorage = new int[100];
        double[] decimalValueStorage = new double[100];
        String binaryInput = txfBinaryInput.getText();
        int binaryNumber = binaryInput.length();
        char[] binaryDigits = binaryInput.toCharArray();
        for (int i = 0; i >= binaryNumber; i++)

        {
            binaryValueStorage[n] = binaryDigits[n];
            decimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, n));
            n++;
        }
        double sum = 0;
        for (double a : decimalValueStorage)
        {
            sum += a;
        }
        lblDisplay.setText("The Deciaml Value Is " + sum);
    }
}                                          
Respuesta 1

Tenga cuidado: en su condición de bucle for, tiene en i >= binaryNumberlugar de i < binaryNumber, por lo tanto, su programa nunca entrará en el bucle.

Y en una nota al margen, ¿por qué estás usando dos variables iy ncon el mismo propósito (incrementar y acceder a la matriz)?

Editar: otro problema:

En números binarios, los bits de orden inferior están a la derecha , pero en las matrices, ¡los índices son de izquierda a derecha !

Por lo tanto, desea que su dígito más a la derecha se multiplique por 2 ^ 0, el siguiente a la derecha a su izquierda por 2 ^ 1, y así sucesivamente.

Pero en su código, lo que está sucediendo es lo contrario: ¡es el dígito más a la izquierda (su dígito en el índice 0) que se multiplica por 2 ^ 0!

Para solucionarlo, puedes:

1) invierta su binaryDigitsmatriz antes de comenzar a convertir, y mantenga intacto el resto de su código

2) reemplazar decimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, n));pordecimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, binaryNumber - n));

¡Espero que esto ayude!

Respuesta: 2

¿Alguien alguna vez usó una buena biblioteca Java de código abierto que permitiera la conversión NAL> H264? He visto muchas bibliotecas, pero la mayoría de ellas están incompletas o son muy difíciles de usar (sin documentación, etc.). Lo que quiero ...

Estoy leyendo el PDF de convenciones de código Java y me di cuenta de esto: evite las declaraciones locales que ocultan las declaraciones en los niveles superiores. Por ejemplo, no declare el mismo nombre de variable en un interno ...

Entorno: Java EE 6 ¿Cómo determinar en Interceptor si el bean invocado es administrado por contenedor (CMT) o administrado por bean (BMT)?

Intenté convertir html a imagen usando la API HtmlImageGenerator de Google. Pero cuando subo el código en el motor de aplicaciones de Google, bloquea muchas clases como JLabel, ImageIO, JeditorPane, Dimension2D, etc. Entonces ...