Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Ryche en 31 de Marzo 2016, 11:05

Título: Java error cannot find symbol - method substring (int, int) CU00662B No compila
Publicado por: Ryche en 31 de Marzo 2016, 11:05
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();}
}
               
Título: Re:CU00662B.No me compila
Publicado por: lpeiro61 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.
Título: Re:CU00662B.No me compila
Publicado por: Alex Rodríguez 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
Título: Re:CU00662B.No me compila
Publicado por: Ryche 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");
            }
        }
    }
}
Título: Re:Java error cannot find symbol - method substring (int, int) CU00662B No compila
Publicado por: Ryche en 31 de Marzo 2016, 22:24
Gracias, Alex, veo que estoy muy verde, a ver si voy situando conceptos

Un saludo