Autor Tema: Java error cannot find symbol - method substring (int, int) CU00662B No compila  (Leído 4053 veces)

Ryche

  • Sin experiencia
  • *
  • Mensajes: 11
    • Ver Perfil
Hola, es la primera vez que escribo, espero no meter mucho la pata.

Tengo un problema al intentar compilar el ejercicio CU00662B. Me dice "cannot find symbol - method substring(int,int)" y me señala al substring de entrada2. ¿Porqué?

Ahi va el código:

Código: [Seleccionar]
import java.util.Scanner;
public class ComparaLetraALetra{
    public static void main(String[]args){
        System.out.println("Introduce la primera palabra:");
        EntradaDeTeclado entrada1=new EntradaDeTeclado();
        System.out.println("Introduce la segundo palabra:");
        EntradaDeTeclado entrada2=new EntradaDeTeclado();
        int longitud1=entrada1.getLongitud();
        int longitud2=entrada2.getLongitud();       
        for(int i=0; i<longitud1 || i<longitud2; i++){
            if(longitud1 >= i+1 && longitud2 >= i+1){
                if (entrada1.substring(i,i+1).equals(entrada2.substring(i,i+1))){
                    System.out.println("Letra "+(i+1)+": Igual en las dos palabras");
                }else{
                    System.out.println("Letra "+(i+1)+": No es igual en las dos palabras");
                }
            }else if (longitud1 < i+1){
                System.out.println("La palabra 1 no tiene " + (i+1) + " letras");
            }else{
                System.out.println("La palabra 2 no tiene " + (i+1) + " letras");
            }
        }
    }
}

Tambien tengo declarada esta otra clase:
Código: [Seleccionar]
import java.util.Scanner;
public class EntradaDeTeclado{
    private String entradaTeclado;
    public EntradaDeTeclado(){
        entradaTeclado="";
        pedirEntrada();
    }
    public void pedirEntrada(){
        Scanner entradaScanner=new Scanner(System.in);
        entradaTeclado=entradaScanner.nextLine();
    }
    public String getEntrada(){return entradaTeclado;}
    public String getPrimeraPalabra(){
        for(int i=0;i<entradaTeclado.length()-1;i++){
            if(entradaTeclado.substring(i,i+1).equals(" ")){
                return entradaTeclado.substring(0,i+1);}
            }
        return entradaTeclado;
    }
    public int getLongitud(){return entradaTeclado.length();}
}
               
« Última modificación: 31 de Marzo 2016, 22:10 por Alex Rodríguez »

lpeiro61

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Re:CU00662B.No me compila
« Respuesta #1 en: 31 de Marzo 2016, 19:40 »
Hola Ryche, yo soy tan inexperto como tú.
Este ejercicio yo lo hice en una sola clase y en concreto en el if donde te da el error yo lo tento igual que tú.
Lo que veo es que tanto entrada1 como entrada2 son de tipo EntradaDeTeclado y no de tipo String por lo que el método substring() sólo es aplicable a objetos de tipo String.

Te pongo el código con el que he arreglado ese error, pero como no llamo a clase EntradaDeTeclado da error cuando se invoca el método getLongitud(), por lo que habrá que poner el código de dichos métodos en la misma clase.

Código: [Seleccionar]
import java.util.Scanner;
public class ComparaLetraALetra{
    public static void main(String[]args){
   
        System.out.println("Introduce la primera palabra:");
        Scanner scanner1=new Scanner(System.in);
        String entrada1 = scanner1.nextLine();
       
        System.out.println("Introduce la segundo palabra:");
        Scanner scanner2=new Scanner(System.in);
        String entrada2 = scanner2.nextLine();
       
        int longitud1=entrada1.getLongitud();
        int longitud2=entrada2.getLongitud();       
       
        for(int i=0; i<longitud1 || i<longitud2; i++){
            if(longitud1 >= i+1 && longitud2 >= i+1){
           
                if (entrada1.substring(i,i+1).equals(entrada2.substring(i,i+1))){
                    System.out.println("Letra "+(i+1)+": Igual en las dos palabras");
                }else{
                    System.out.println("Letra "+(i+1)+": No es igual en las dos palabras");
                }
               
            }else if (longitud1 < i+1){
                System.out.println("La palabra 1 no tiene " + (i+1) + " letras");
            }else{
                System.out.println("La palabra 2 no tiene " + (i+1) + " letras");
            }
        }
    }
}

A ver si algún experto nos ayuda un poco más.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:CU00662B.No me compila
« Respuesta #2 en: 31 de Marzo 2016, 22:08 »
Hola la respuesta del problema está en lo que ha indicado lpeiro, no puedes aplicar un método a un objeto que no es del tipo correspondiente con el método.

En este caso no puedes aplicar substring a un objeto que no es un String.

Puede resolverse de varias maneras, una de ellas obteniendo un String a partir de la entrada de teclado, por ejemplo así:

Código: [Seleccionar]
import java.util.Scanner;
public class ComparaLetraALetra{
    public static void main(String[]args){
        System.out.println("Introduce la primera palabra:");
        EntradaDeTeclado trada1=new EntradaDeTeclado();
        String entrada1 = trada1.getEntrada();
        System.out.println("Introduce la segundo palabra:");
        EntradaDeTeclado trada2=new EntradaDeTeclado();
        String entrada2 = trada2.getEntrada();
        int longitud1=trada1.getLongitud();
        int longitud2=trada2.getLongitud();       
        for(int i=0; i<longitud1 || i<longitud2; i++){
            if(longitud1 >= i+1 && longitud2 >= i+1){
                if (entrada1.substring(i,i+1).equals(entrada2.substring(i,i+1))){
                    System.out.println("Letra "+(i+1)+": Igual en las dos palabras");
                }else{
                    System.out.println("Letra "+(i+1)+": No es igual en las dos palabras");
                }
            }else if (longitud1 < i+1){
                System.out.println("La palabra 1 no tiene " + (i+1) + " letras");
            }else{
                System.out.println("La palabra 2 no tiene " + (i+1) + " letras");
            }
        }
    }
}

Saludos

Ryche

  • Sin experiencia
  • *
  • Mensajes: 11
    • Ver Perfil
Re:CU00662B.No me compila
« Respuesta #3 en: 31 de Marzo 2016, 22:18 »
Mira que me estaba volviendo Tururú  :o
Has dado en el clavo. He quitado las referencias a la clase EntradaDeTeclado, y he escrito el codigo correspondiente que las sustituye y, oye, a la primera. Mil gracias, Ipeiro
Código: [Seleccionar]
import java.util.Scanner;
public class ComparaLetraALetra{
    public static void main(String[]args){
        System.out.println("Introduce la primera palabra:");
        Scanner escaneo1=new Scanner(System.in);
        String entrada1=escaneo1.nextLine();
        System.out.println("Introduce la segunda palabra:");
        Scanner escaneo2=new Scanner(System.in);
        String entrada2=escaneo2.nextLine();
        int longitud1=entrada1.length();
        int longitud2=entrada2.length();       
        for(int i=0; i<longitud1 || i<longitud2; i++){
            if(longitud1 >= i+1 && longitud2 >= i+1){
                String caracter1=entrada1.substring(i,i+1);
                String caracter2=entrada2.substring(i,i+1);
                if (caracter1.equals(caracter2)){
                    System.out.println("Letra "+(i+1)+": Igual en las dos palabras");
                }else{
                    System.out.println("Letra "+(i+1)+": No es igual en las dos palabras");
                }
            }else if (longitud1 < i+1){
                System.out.println("La palabra 1 no tiene " + (i+1) + " letras");
            }else{
                System.out.println("La palabra 2 no tiene " + (i+1) + " letras");
            }
        }
    }
}

Ryche

  • Sin experiencia
  • *
  • Mensajes: 11
    • Ver Perfil
Gracias, Alex, veo que estoy muy verde, a ver si voy situando conceptos

Un saludo

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".