Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado 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:
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:
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();}
}
-
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.
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.
-
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í:
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
-
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
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");
}
}
}
}
-
Gracias, Alex, veo que estoy muy verde, a ver si voy situando conceptos
Un saludo