0

tengo duda sobre como puedo convertir una cadena a entero usando ciclos sin usar el clasico Integer.parseInt.

Algo como "1987" -> 1987

Gracias de antemano.

  • Podrías aportar más información? Por ejemplo el motivo que tienes para no usar el parse? – ICIM Aug 01 '21 at 19:06
  • Si mira, nuestro profesor de programación no le agrada que usemos el parse por unas excepciones que puede causar y argumenta que "En el futuro no solo van a usar parse, van a necesitar mas metodos" y tenemos ese ejercicio. – Jhon Stiven Aug 01 '21 at 19:38
  • 2
    ¿Responde esto a tu pregunta? [Guia definitiva de conversión de tipos en Java](https://es.stackoverflow.com/questions/1487/guia-definitiva-de-conversi%c3%b3n-de-tipos-en-java) – padaleiana Aug 01 '21 at 20:33
  • Caramente no, si lees la pregunta y los comentarios te darás cuenta que no está pidiendo eso @padaleiana – ICIM Aug 01 '21 at 20:45
  • 1
    Es un comentario automático. De todas maneras, aunque fue mal reportado, lectura recomendada: [¿Cuánto esfuerzo se espera de los usuarios de Stack Overflow?](https://es.meta.stackoverflow.com/questions/4884/cuanto-esfuerzo-se-espera-de-los-usuarios-de-stack-overflow). – padaleiana Aug 01 '21 at 21:42
  • Lectura recomendada para quien? @padaleiana – ICIM Aug 01 '21 at 22:03
  • 2
    Para todos aquellos que lean la pregunta :) – padaleiana Aug 01 '21 at 22:07
  • Claro esta fue una de mis primeras preguntas, muchas gracias a todos por sus comentarios y ayuda :D – Jhon Stiven Aug 01 '21 at 22:40

1 Answers1

0

Te dejo aquí una posible solución:

Para poder convertir un String a entero vamos a crear una función que reciba un String, luego vamos a ir iterando en ese String y vamos a ir obteniendo cada número con el método chartAt(), la cual obtiene el valor de un string de acuerdo a la posición que se le pase. El resultado de eso lo almacenamos en una variable de tipo entero y con eso ya lo tendríamos convertido.

public class StringtoInt {
    
    
    public static void main (String args[])
    {
        String  convertingString="1978";
        System.out.println("String antes de parsear :  "+ convertingString);
        int output=    stringToint( convertingString );
        System.out.println("");
        System.out.println("");
        System.out.println("salida en int "+ output);
        System.out.println("");
    }
    
    
    public static int stringToint( String str ){
        int i = 0, number = 0;
        boolean isNegative = false;
        int len = str.length();
        if( str.charAt(0) == '-' ){//compruebo si está el símbolo negativo
            isNegative = true;
            i = 1;
        }
        while( i < len ){
            number *= 10;
            //obtengo el número de la posición i+1
            number += ( str.charAt(i++) - '0' );
        }
        //verificamos si es negativo y cambiamos
        number = (isNegative)? -number: number;
        return number;
    }   
}

En (isNegative)? -number: number; usamos la sintaxis de operador ternarios para poder reducir un poco más el código, lo que va entre paréntesis es la condición lo que va después del signo ? es el valor que tomará en caso la condición sea true y lo que va después de los dos puntos es el valor que tomará en caso la condición sea false.

También tienes el método Integer.valueOf("1978"), quizá te sirve.

ICIM
  • 352
  • 1
  • 13
  • 2
    _¿Qué hace este código?_ Lee [answer]. – padaleiana Aug 01 '21 at 20:29
  • 3
    Recordá que la respuesta no es solamente para el OP (autor de la pregunta), sino que otros usuarios más adelante llegarán a ella sin saber cómo es que funciona tal código. Referencia: [por qué es bueno explicar el código](https://es.meta.stackoverflow.com/a/2882). – padaleiana Aug 01 '21 at 21:35
  • Gracias! Por fin alguien que indica el problema! **Costo 3 mensajes**, pero conseguí que alguien dijese que le pasaba a la respuesta! Aparte de que cerraron la pregunta con el pretexto de `fuera de tema` y el resto de cosas raras que han pasado en esta pregunta... – ICIM Aug 01 '21 at 23:39
  • 4
    @ICIM, lo que se intenta explicar es que la respuesta ideal sería aquella que además de resolver problema aporte el contexto de dónde surge el problema o explique el algoritmo utilizado. Esto ayuda a que personas en el futuro puedan comprender de manera más sencilla la idea o la forma en que se planteó el problema... Aunque esto pueda ser extremadamente sencillo para programadores con experiencia, piensa en las personas que apenas están aprendiendo y también se hace en parte para contribuir a una cultura de conocimiento y no solo de copiar y pegar. – Eduardo Jiménez Aug 01 '21 at 23:47
  • Quieres que te explique por que la pregunta fue cerrada? – Christian Aug 02 '21 at 00:32
  • Esa es una respuesta más completa – Christian Aug 02 '21 at 01:16
  • Hola @christian yo lo único que digo es que no es muy normal que necesitemos unos 8 mensajes donde dicen que falta algo pero nadie me diga el qué y en todos los comentarios me mencionan, como si yo fuese el culpable o el encargado de tener que hacerlo. Cuando ustedes perfectamente pueden editar mi respuesta y mejorar aquello que yo no veo/no sé.
    Y si, me gustaría una explicación de **cerrado por fuera de tema**, creo que el motivo estaba mal elegido.
    – ICIM Aug 02 '21 at 10:28
  • 1
    lo que te debieron de decir es que complementes y/o expliques detalladamente la respuesta. La pregunta fue cerrada por que no se demuestra un trabajo de investigación y solo deja un enunciado con su requerimiento, SO no es un lugar para que te hagan trabajos, tareas, etc. aquí se ayuda con problemas en la depuración del código. Tal y como está la pregunta, se considera fuera de tema por que en SO no se hacen trabajos. – Christian Aug 02 '21 at 17:58
  • 1
    Siempre trata de explicar cada detalle de tu respuesta, hazlo como para que alguien que no sabe nada pueda entenderlo. Tuve que buscar información acerca del método `chartAt()` ya que no lo conocía y con todo lo investigado y probado pude *corregir* tu respuesta. La no es que otros puedan editarla para mejorarla, eso lo debes hacer tu, ya que es tu respuesta, los demás usuarios solo se encargarán de corregir pequeñas cosas, como la ortografía, indentación, aspecto, etc. – Christian Aug 02 '21 at 18:02
  • 1
    Lo que yo he hecho (añadir explicación a tu respuesta) esta mal y no se debe de hacer, si no tuviera el privilegio de editar sin que alguien lo revise, lo más seguro es que mi edición haya sido rechazada (al menos que tu la apruebes). – Christian Aug 02 '21 at 18:04