Autor Tema: Java. Duda en ejemplo entrega CU00661B por qué se resta uno en un bucle for  (Leído 90 veces)

mithrandir

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola comunidad, un grato saludo a todos, éste es mi segundo post, voy al grano.

Tengo éste pedazo de código en java del curso "Pensar en objetos. Una entrada de teclado o consola en Java como objeto con campos y métodos. (CU00661B)"

Código: [Seleccionar]
public String GetPrimeraPalabra(){
        for(int i=0; i < entradaTeclado.length() -1; i++){
            if(entradaTeclado.substring(i,i+1).equals(" ")){ //las comparaciones se hacen con equals
                return entradaTeclado.substring(0,i+1);  }
            }
            return entradaTeclado; //se devuelve la entradaTeclado si no se detectan espacios blancos

Mi duda radica en la línea   for(int i=0; i < entradaTeclado.length() -1; i++){       exactamente en la parte donde dice -1 , si, -1, he mirado muchas veces la pagina web y creo no estar viendo mal, mi duda es, ese -1 (es un signo menos o un guión) ese -1 qué efecto tiene sobre el contador i o el largo de la entradateclado?

gracias comunidad

« última modificación: 28 de Febrero 2017, 19:58 de Ogramar »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1070
    • Ver Perfil
Re:duda JAVA
« Respuesta #1 : 12 de Enero 2017, 22:04 »
Hola mithrandir.

Aquí tienes una buena explicación sobre el asunto.

http://www.aprenderaprogramar.com/foros/index.php?topic=2883.msg13158#msg13158

Saludos. ;D

mithrandir

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:duda JAVA
« Respuesta #2 : 12 de Enero 2017, 23:15 »
hola pedro, muchísimas gracias!!! me ha quedado claro el uso del -1 en el ciclo for.

Por otro lado, estoy estancado intentando hacer el ejercicio propuesto de la clase :

El método equals en Java. Diferencia entre igualdad e identidad. Comparar objetos. Ejemplos. (CU00662B). 

En el cual me proponen que haga un código para comparar letra a letra dos palabras que se escriban en la consola, si no es mucha molestia puedo mostrar lo que se me ocurrió hacer pero que no me da resultado.

primera clase

Código: [Seleccionar]
public class EntradaDeTeclado2{
    public String entradaTeclado2;
    public String entradaTeclado3;
    public EntradaDeTeclado2(){
        entradaTeclado2 = "";
        entradaTeclado3 = "";
        pedirEntrada2();
    }
   
    public void pedirEntrada2(){
        Scanner entradaScanner2 = new Scanner(System.in);
        entradaTeclado2 = entradaScanner2.nextLine();
        Scanner entradaScanner3 = new Scanner(System.in);
        entradaTeclado3 = entradaScanner3.nextLine();
    }
   
    public String Getletraaletra2(){
        for(int j=0; j< entradaTeclado2.length(); j++){
            entradaTeclado2.substring(j,j+1);{
        return entradaTeclado2.substring(j,j+1);}
        }
        return null;
    }
   
    public String Getletraaletra3(){
        for(int k=0; k< entradaTeclado3.length(); k++){
            entradaTeclado3.substring(k,k+1);{
        return entradaTeclado3.substring(k,k+1);}
        }
        return null;
    }
}



segunda clase ( la cual toma cosas de la primera)

Código: [Seleccionar]
public class TestEntradadeTeclado2{
   
    public static void main(String []args){
       
        System.out.println("inicio programa comparador letras de dos palabras");
        System.out.println("Por favor introduzca la primera palabra");
        EntradaDeTeclado2 entradaTeclado2 = new EntradaDeTeclado2();
        System.out.println("Por favor introduzca la segunda palabra");
        EntradaDeTeclado2 entradaTeclado3 = new EntradaDeTeclado2();
       
        System.out.println("Inicia comparación letra a letra " +
        entradaTeclado2.Getletraaletra2().equals(entradaTeclado3.Getletraaletra3()));
       
    }
}

ambas clases estan compiladas sin errores de sintaxis, quise agregar imagenes para que se viera mas claramente pero no supe como agregarlas acá, perdón.

el resultado de la consola es el siguiente:

inicio programa comparador letras de dos palabras
Por favor introduzca la primera palabra
hola

Por favor introduzca la segunda palabra
hija

Inicia comparación letra a letra false


FIN

explico un poco, lo que se me ocurrió fue hacer un constructor con dos strings los cuales voy a comparar, y para cada uno de los strings les creé un metodo en el cual toma letra por letra de la palabra introducida en el terminal y con la segunda clase comparar cada una de las letras de ambas palabras y determinar si son iguales o diferentes, evidentemente no me ha funcionado.

Quisiera saber qué estoy pensando mal, qué estoy ejecutando mal y que me dieran una pista de cómo lograr resolver ese ejercicio propuesto.

GRACIAS



« última modificación: 13 de Enero 2017, 09:29 de pedro,, »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1070
    • Ver Perfil
Re:Java. Duda en ejemplo entrega CU00661B
« Respuesta #3 : 14 de Enero 2017, 00:57 »
Buenas.

La clase EntradaDeTeclado2, debería solo encargarse de devolver los datos introducidos por teclado y si quieres, por aprovechar la clase que has pegado, también dejar el método que devuelve la longitud de la cadena que se introduce por el teclado y no crear más atributos dentro de esta clase.

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado aprenderaprogramar.com
public class EntradaDeTeclado2 {
    private String entradaTeclado; //Variable de instancia (campo) de la clase
 
    public EntradaDeTeclado2 ()  { //Constructor
        entradaTeclado="";
        pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
    } //Cierre del constructor
 
    public void pedirEntrada ()  {  //Método de la clase         
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine ();     } //Cierre del método pedirEntrada
 
    public String getEntrada () {
        return entradaTeclado;
    } //Cierre del método getEntradaierre del método getPrimeraPalabra
 
    public int getLongitud ()  {  //Método de la clase
        return entradaTeclado.length();
    } //Cierre del método getLongitud
} //Cierre de la clase

Para plantear el ejercicio, lo primero es saber cual cadena es mas corta de las dos, de esta manera, si usas un bucle for para ir recorriendo letra a letra que no excedas el número de caracteres que contenga la cadena mas corta.

Puedes empezar planteándote eso.

Saludos. ;D

 

Esto es un laboratorio de ideas...
Aprender a programar

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".