java: error al agregar un valor de cadena al índice de la matriz

CorePress2024-01-25  83

Esta pregunta ya tiene respuestas aquí: Cómo revertir un número de manera más eficiente con Java

(4 respuestas)

Cerrado

hace 2 años

.
public class aa {
    public static void main(String[] args) {
        int number = 521;
        String temp1 = "" + number;
        int result = 0;
        int[] temp2 = new int[temp1.length()];
        for(int i=0; i<temp1.length(); i++){
            int len = temp1.length();
            temp2[i] = temp1.charAt(len-i-1);
            System.out.println(temp2[i]);
            System.out.println(temp1.charAt(len-i-1));
        }

    }
    
}

Este programa debería hacer de 521 a 125 (al revés). Pero cuando ejecuto este programa, el resultado es

49
1
50
2
53
5

Creo que el valor de la cadena es correcto, pero cuando agrego ese valor de cadena a la matriz, se vuelve incorrecto.largo camino. ¿Alguien puede decirme qué pasa?

Para empezar, println imprime una nueva línea al final de su salida, por lo que no hay forma de que su salida esté en una sola línea si la usa. En segundo lugar, temp2 es una matriz de entradas, no puedes esperar que println sepa que realmente quieres caracteres si le pides que imprima números.

– Federico Klez Culloca

28 de marzo de 2021 a las 9:48

Puedes encontrar fácilmente miles de artículos sobre cómo invertir un número en Java.

- Harshal Parekh

28/03/2021 a las 9:50

@AlexRudenko Eso realmente no explica cuál es el problema con este enfoque. Esa pregunta se refiere a enfoques alternativos. El que está usando el OP, aunque no es óptimo, funcionaría una vez que arreglen el tipo de matriz.

– Federico Klez Culloca

marzo28, 2021 a las 10:23



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

Como decía en los comentarios, temp2 es del tipo incorrecto. Lo declaraste como una matriz de entradas, por lo que println, por supuesto, lo trata como una matriz de números, no de caracteres imprimibles.

Simplemente cambie el tipo de temp2 a char[]:

public class aa {
    public static void main(String[] args) {
        int number = 521;
        String temp1 = "" + number;
        int result = 0;
        char[] temp2 = new char[temp1.length()];
        for(int i=0; i<temp1.length(); i++){
            int len = temp1.length();
            temp2[i] = temp1.charAt(len-i-1);
            System.out.println(temp2[i]);
            System.out.println(temp1.charAt(len-i-1));
        }

        // print the whole reversed number on one line
        for(char c : temp2) {
            System.out.print(c);
        }

        System.out.println();
    }
    
}

Salida

1
1
2
2
5
5
125

Por supuesto que esta no es la solución óptima, solo una forma de arreglar el código que escribiste para que funcione. Consulte el comentario de Alex Rudenko para obtener un enlace con mejores soluciones al problema de invertir los dígitos de un número.



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

Como temp2 es una matriz de valores int, es necesario corregir la siguiente asignación:

temp2[i] = temp1.charAt(len-i-1);

porque asigna un valor ASCII de carácter.

Esto se puede hacer restando un 0 o usando Character::getNumericValue

temp2[i] = temp1.charAt(len-i-1) - '0';
// or
temp2[i] = Character.getNumericValue(temp1.charAt(len-i-1));

Un número entero no negativo se puede invertir sin utilizar ninguna conversión de cadena:

La "longitud" de la matriz temp2 está definida por Math.log10 Cada dígito se calcula con el operador de módulo % y dividiendo la entrada mientras sea mayor que 0
public static void main(String[] args) {
    int number = 521;

    int len = number < 2 ? 1 : (int) Math.ceil(Math.log10(number));
    
    int[] temp2 = new int[len];
    
    for (int i = 0, n = number; n > 0; n /= 10, i++) {
        
        temp2[i] = n % 10;
        
        System.out.println(temp2[i]);
    }
    for (int i : temp2) {
        System.out.print(i);
    }
    System.out.println();
}

Salida

1
2
5
125



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

Tu pregunta no es muy clara sobre si estás pidiendo opinión. Pero una consulta que "cuando agrego ese valor de cadena a la matriz, sale mal".

Entonces, String es un tipo de referencia, mientras que su matriz es de tipo int. Necesita analizar el valor de String a int

Entero.parseInt(Cadena)

2

Cadena temp1 = "" + número; obras. Eso no es óptimo pero seguramente no es el problema con este código

Federico klez Culloca

28/03/2021 a las 10:28

@FedericoklezCulloca Creo que la pregunta estaba relacionada con el valor de cadena de la matriz y eso es lo que se explicó. Dado que la matriz era de tipo int. No me he referido al int asignado a String.

- Jaswinder Singh

28/03/2021 a las 10:31

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