java - convertidor de decimal a exceso-3 y aiken

CorePress2024-01-16  9

Exceso-3: Hecho por Arvind Kumar Avinash

 String yaz = "123";
        
        String binary = 
                Arrays.stream(yaz.split(""))
                        .map(x -> String.format("%4s", Integer.toBinaryString(Integer.parseInt(x) + 3)).replace(' ', '0'))
                        .collect(Collectors.joining());

        System.out.println(binary);

No estoy seguro de si la operación stream.of utilizada es correcta. Mi acción aquí es; Sumo 3 a cada dígito de los datos decimales que recibo del usuario y los convierto a un sistema de 2 dígitos. En otras palabras, 457 => 4,5,7 =(3 + 3 +3) 7,8,10 => Convertimos el número 7 a un sistema de 2 números, de la misma manera, 8 y 10 el resultado debería ser como (457) = (0111 1000 1010).

Código Aiken: Hecho por Alex Rudenko

int input = 468;
String[] aiken = Integer.toString(input).chars()
    .map(Character::getNumericValue)
    .mapToObj(d -> String.format("%4s", 
        Integer.toBinaryString(d + (d > 4 ? 6 : 0))) // get aiken value
        .replace(' ', '0') // provide 0 padding
    )
    .toArray(String[]::new);
System.out.println(input + " -> " + Arrays.toString(aiken));

Les agradezco a ambos

2

para akenarlosería algo así como si (n > 4) n = n+6. Tenga en cuenta que sólo codifica números hasta el 9

-njzk2

19/03/2021 a las 20:51



------------------------------------

La conversión solicitada de un solo dígito a una representación binaria con ceros a la izquierda debe implementarse con una matriz preparada de cadenas:

static final String[] DIGITS = {
    "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
    "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
};

Luego se puede crear código Excess-3 convirtiendo el número de entrada a String, usando Character::getNumericValue para cada carácter y cambiando el valor en 3:

int input = 123;
String[] excess3 = Integer.toString(input).chars()
    .map(Character::getNumericValue)
    .mapToObj(i -> DIGITS[i + 3])
    .toArray(String[]::new);
System.out.printf("xcs-3(%d) -> %s%n", input, String.join(" ", excess3));

Salida:

xcs-3(123) -> 0100 0101 0110

Según Wiki Aiken, el código es algo diferente.ent y suma 6 a los dígitos sobre 4 (5 -> 0xB,.. 9 -> 0xF). Por lo tanto, para convertir dígitos separados a sus códigos Aiken e imprimirlos como números binarios de 4 dígitos, se puede usar el siguiente código:

int input = 468;
String[] aiken = Integer.toString(input).chars()
    .map(Character::getNumericValue)
    .mapToObj(d -> DIGITS[d > 4 && d <= 9? d + 6 : d])
    .toArray(String[]::new);
System.out.printf("aiken(%d) -> %s%n", input, String.join(" ", aiken));

Salida

aiken(468) -> 0100 1100 1110

2

¿Cómo podemos imprimir los valores de la lista de matrices en JtextField?

Atlas

20/03/2021 a las 12:07

Puede ser preferible usar el método String::join para deshacerse de los corchetes proporcionados por Arrays.toString, por ejemplo: jtextField.setText(String.join(" ", aiken)) imprimirá los números divididos por un solo espacio.

- El hombre de ninguna parte

20/03/2021 a las 12:15



------------------------------------

Divida la cadena de números enteros en dígitos usando String#split. Obtenga una secuencia de la matriz resultante usando Arrays#stream. Utilice Stream#map para sumar 3 a cada dígito, analícelo en un número entero y luego convierta el entero obtenido en una cadena binaria utilizando Integer#toBinaryString, que puede formatear para ocupar el espacio necesario para 4 canales.caracteres y reemplace los lugares vacíos al principio con 0. Finalmente, une todos los elementos de la transmisión.

Ahora, puede configurar la cadena final (binaria en el código que se proporciona a continuación) en JTexField.

Demostración:

import java.util.Arrays;
import java.util.stream.Collectors;

public class Main {
    public static void main(String args[]) {
        String yaz = "123";

        String binary = Arrays.stream(yaz.split(""))
                .map(x -> String.format("%4s", Integer.toBinaryString(Integer.parseInt(x) + 3)).replace(' ', '0'))
                .collect(Collectors.joining(" "));

        System.out.println(binary);
    }
}

Salida:

0100 0101 0110

Nota: si no necesita espacio entre las cadenas binarias, utilice la variante no parametrizada de Collectors#joining, es decir, no pase el argumento " " a ello.

Alternativamente,

Puedes utilizar String#chars, introducido como parte de Java SE 9, para crear la secuencia. Tenga en cuenta que devuelve un IntStream que debe encuadrarse para obtener Stream<Integer>.

import java.util.stream.Collectors;

public class Main {
    public static void main(String args[]) {
        String yaz = "123";
        
        String binary = yaz.chars()
                            .boxed()
                            .map(x -> String.format("%4s", Integer.toBinaryString(Character.getNumericValue(x) + 3)).replace(' ', '0'))
                            .collect(Collectors.joining(" "));
        
        System.out.println(binary);
    }
}

Salida:

0100 0101 0110

6

Sí, pero nuestro objetivo no es hacer 123 126, sino nuestro objetivo es hacer 123 456 y escribir 456 como binario, mientras convertimos a exceso-3, se explicó que esto se haría.

Atlas

19/03/2021 a las 21:24

muchas gracias. Algunas aplicaciones en Internet (123) 10 = (010001010110) Veo que sale el valor XS3, obtengo el resultado 111001000 como resultado de su ayuda, me pregunto dónde falta

-&nbsatlas

20/03/2021 a las 11:03

Lo siento mucho, fue necesario convertir los números 4 5 6 a un sistema numérico binario de cuatro bits. No sé cómo me salté este detalle, lo siento mucho

Atlas

20/03/2021 a las 11:14

¿Cómo puedo convertir un valor ingresado por el usuario a un binario de 3,4,8 bits? por ejemplo, ¿cómo puedo find 3,4,8 valores de bits de 1,25

Atlas

22/03/2021 a las 14:42

@Atlas: no entendí este nuevo requisito. ¿Quieres encontrar el tercer, cuarto y octavo bit de 125?

- Arvind Kumar Avinash

22/03/2021 a las 19:28

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare