Java - Ayuda con pequeño error en código (manipulación de cadenas)

 
Vista:
sin imagen de perfil

Ayuda con pequeño error en código (manipulación de cadenas)

Publicado por Oscar (3 intervenciones) el 27/10/2016 04:16:12
En este programa tengo que ingresar una cadena y extraer una subcadena de ahi basandome en un indice inicial de posición y en un indice final que tambien son ingresados por el usuario pero tengo prohibido usar substring asi que la cosa esta en que tengo un do-while y al principio tengo que pedir una cadena, la ingreso y todo correcto pero cuando el ciclo se repite da como por echo que ya ingrese la cadena (como ignorando el leer.nextLine) y se salta de inmediato a pedirme el indice inicial y no hallo como solucionarlo (el programa termina cuando la longitud de la subcadena extraida es menor que 4), aqui esta el codigo, enserio lo agradeceria mucho si alguien me ayuda:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package cadenas;
import java.util.Scanner;
public class Cadenas {
 
 
    public static void main(String[] args) {
        Scanner leer=new Scanner (System.in);
        int indi, indf, longi;
        String cadena;
        do{
            System.out.print("Ingrese cadena: ");
            cadena=leer.nextLine();
            System.out.print("Ingrese indice inicial: ");
            indi=leer.nextInt();
            System.out.print("Ingrese indice final: ");
            indf=leer.nextInt();
            if(indi<indf){
                if(indf<=cadena.length()){
                    String subcad="";
                    while(indi<=indf){
                        char car=cadena.charAt(indi);
                        subcad+=car;
                        indi++;
                    }
                    System.out.println("Subcadena extraída es: "+subcad);
                    longi=subcad.length();
                }
                else{
                    System.out.println("Error");
                    longi=4;
                }
            }
            else{
                System.out.println("Error");
                longi=4;
            }
        }while(longi>=4);
        System.out.println("FIN");
    }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 144
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con pequeño error en código (manipulación de cadenas)

Publicado por Thanatos (97 intervenciones) el 27/10/2016 06:22:32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package cadenas;
 
import java.util.Scanner;
 
public class Cadenas {
 
    public static void main(String[] args) {
        Scanner leer = new Scanner (System.in);
        int indi, indf, longi;
        String cadena;
 
        do {
            System.out.print("Ingrese cadena: ");
            cadena = leer.nextLine();
 
            System.out.print("Ingrese \u00EDndice inicial: ");
            indi = leer.nextInt();
 
            System.out.print("Ingrese \u00EDndice final: ");
            indf = leer.nextInt();
 
            if (indi < indf) {
                if (indf <= cadena.length()) {
                    String subcad = "";
                    while (indi <= indf) {
                        char car = cadena.charAt(indi);
                        subcad += car;
                        indi++;
                    }
                    System.out.println("\nSubcadena extra\u00EDda es: " + subcad);
                    longi = subcad.length();
                } else {
                    System.out.println("Error");
                    longi = 4;
                }
            } else {
                System.out.println("Error");
                longi = 4;
            }
            leer.nextLine();
            System.out.println();
        } while (longi >= 4);
 
        leer.close();
        System.out.println("FIN");
    }
 
}

nextInt() sólo toma el valor del número ingresado por el usuario, pero el carácter \n (nueva línea) que se ingresa al presionar la tecla enter luego del número, continúa en el buffer. Cuando intentas leer la nueva cadena, nextLine() recibe ese carácter \n del buffer, el efecto es el mismo que obtendrías al presionar enter directamente, por eso no te da tiempo de ingresar la nueva cadena.

La línea 40 se encarga de consumir el carácter \n, antes de leer la nueva cadena.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Ayuda con pequeño error en código (manipulación de cadenas)

Publicado por Oscar Amador (3 intervenciones) el 27/10/2016 18:37:09
Gracias, me sirvió :), pero para que sirve el leer.close()?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar