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