Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - LPM

Páginas: [1] 2
1
AAAA, ya veo

muchas gracias toni, me sirvió =)

2
Hola.

¿Se puede acceder a un objeto anónimo contenido en un ArrayList?

Al agregar un objeto anónimo queda dentro del array, con lo que sí se puede acceder.


¿Se puede inicializar un objeto de una clase que contiene tres atributos de tipo objeto declarando en el constructor que los atributos se inicializan mediante objetos anónimos?

No me queda claro lo que es un objeto anónimo. Sería un objeto sin nombre de variable?. Tampo no sé qué código escribir para mostrar mi duda, estoy bastante desorientado

Espero alguien me ayude

3
Hola alex

Quise editar el mensaje pero no me dejó. A la próxima haré como decís



Con lo del código, quería ordenarlo luego de ingresar un elemento. A mitad del trabajo encontré el método sort, pero quise terminar usando los bucles y condicionales para aprender.

No le encontraba la vuelta. Ahora que veo el tuyo usando el for y los if, me quedó claro.

Gracias por la ayuda.



4
http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=633:tipo-iterator-api-java-ejemplo-error-javautilconcurrent-modificationexception-resumen-bucles-cu00667b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

Hola.

Arreglé el problema que tenía. Me quedó así el ejercicio.

Código: [Seleccionar]
public class CantanteFamoso
{
    private String nombre;
    private String discoMasVendido;
   
    public CantanteFamoso(String nombre,String disco){
        this.nombre=nombre;
        discoMasVendido=disco;
    }
   
    public void setNombre(String nombre){this.nombre=nombre;}
    public void setDisco(String disco){discoMasVendido=disco;}
   
    public String getNombre(){return nombre;}
    public String getDisco(){return discoMasVendido;}
}

Código: [Seleccionar]
import java.util.ArrayList;

public class ListCantantesFamosos
{
    private ArrayList<CantanteFamoso>listaCantantesFamosos;
   
    public ListCantantesFamosos(){
        listaCantantesFamosos=new ArrayList<CantanteFamoso>();
    }
   
    public void addCantante(CantanteFamoso cantante){listaCantantesFamosos.add(cantante);}

    public ArrayList<CantanteFamoso> getLista(){return listaCantantesFamosos;}
}

Código: [Seleccionar]
import java.util.Scanner;
import java.util.Iterator;

public class TestListCantantesFamosos
{
    private ListCantantesFamosos testLista;
    private CantanteFamoso cantante1;
    private CantanteFamoso cantante2;
   
    public TestListCantantesFamosos(){
        cantante1=new CantanteFamoso("Rata","Blanca");
        cantante2=new CantanteFamoso("Mago","De Oz");
        testLista=new ListCantantesFamosos(){{addCantante(cantante1);addCantante(cantante2);}};
    }

    private void mostrarCantantesIt(){
        Iterator<CantanteFamoso> listaIt=testLista.getLista().iterator();
        CantanteFamoso tmpCantante;
        while (listaIt.hasNext()){
            tmpCantante=listaIt.next();
            System.out.println("Cantante "+tmpCantante.getNombre()+" con su disco "+tmpCantante.getDisco()+" mas vendido.");
        }
    }
   
    private void addCantanteTeclado(){
        Scanner teclado=new Scanner (System.in);
        System.out.print("Escriba su nombre: ");
        String nombre=teclado.nextLine();
        System.out.print("Su disco mas vendido?");
        String disco=teclado.nextLine();
        CantanteFamoso cantanteAgregado=new CantanteFamoso(nombre,disco);
        testLista.addCantante(cantanteAgregado);
    }
   
   
    public static void main (String []args){
        Scanner tecladoMain=new Scanner(System.in);
        TestListCantantesFamosos testLista1=new TestListCantantesFamosos();
        System.out.println("Los cantantes en la lista actual son:");
        testLista1.mostrarCantantesIt();
        System.out.println("Ahora agregue un cantante.");
        testLista1.addCantanteTeclado();
        int intentos=0;
        do{System.out.print("Agregar otro cantante? Si/No: ");
           String respuesta=tecladoMain.next();
           if(respuesta.equalsIgnoreCase("si")){
                intentos=0;
                testLista1.addCantanteTeclado();
           }else if(respuesta.equalsIgnoreCase("no")){
                System.out.print("Ok.");
                intentos=3;
           }else{System.out.println("Escriba si o no para continuar");
                  intentos++;
                  if (intentos==3){System.out.println("Ha intentado agregar un cantantes varias veces sin éxito");
                                 break;
                                  }
           }
        }   
        while(intentos<3);
        System.out.println("Ahora los cantantes de la lista actual son: ");
        testLista1.mostrarCantantesIt();
    }
}


5
No me deja editar el post.

Estaba mirando que las condiciones estaban mal, debe ser ese el problema.

Lo arreglo y pongo el código

------------------

Funciona!

Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Iterator;

public class ListaOrdenada{
    private ArrayList<String>listaO;
       
    public ListaOrdenada(){
        listaO=new ArrayList<String>(){{add("Bara");add("Maria");add("Tario");}};
    }
       
    public void ordenadoFor(){
       Scanner teclado=new Scanner(System.in);
       System.out.println("Escriba:");
       String nombre=teclado.nextLine();
       if (nombre.compareToIgnoreCase(listaO.get(0))<0){
           listaO.add(0,nombre);
       }else if(nombre.compareToIgnoreCase(listaO.get(listaO.size()-1))>=0){
           listaO.add(nombre);
       }else for(int i=1;i<listaO.size();i++){
           if (nombre.compareToIgnoreCase(listaO.get(i))<0&&nombre.compareToIgnoreCase(listaO.get(i-1))>=0){
               listaO.add(i,nombre);
               break;
           }
       }
       System.out.println(listaO);
    }
     
    public void ordenadoForEach(){
       Scanner teclado=new Scanner(System.in);
       System.out.println("Escriba:");
       String nombre=teclado.nextLine();
       if (nombre.compareToIgnoreCase(listaO.get(0))<0){
           listaO.add(0,nombre);
       }else if(nombre.compareToIgnoreCase(listaO.get(listaO.size()-1))>=0){
           listaO.add(nombre);
       }else for (String elemento:listaO){
           if (nombre.compareToIgnoreCase(listaO.get(0))>=0&&nombre.compareToIgnoreCase(listaO.get(listaO.indexOf(elemento)+1))<0){
               listaO.add(listaO.indexOf(elemento)+1,nombre);
               break;
           }
       }
    }
   
    public void ordernadoITR(){
        Iterator<String> listaITR=listaO.iterator();
        Scanner teclado=new Scanner(System.in);
        System.out.println("Escriba:");
        String nombre=teclado.nextLine();
        if (nombre.compareToIgnoreCase(listaO.get(0))<0){
            listaO.add(0,nombre);
        }else if(nombre.compareToIgnoreCase(listaO.get(listaO.size()-1))>=0){
            listaO.add(nombre);
        }else while(listaITR.hasNext()){
            String elemento=listaITR.next();
            if (nombre.compareToIgnoreCase(listaO.get(listaO.indexOf(elemento)))>=0&&nombre.compareToIgnoreCase(listaO.get(listaO.indexOf(elemento)+1))<0){
                listaO.add(listaO.indexOf(elemento)+1,nombre);
                break;
            }
        }
        System.out.println(listaO);
    }
}


Encima se puede usar else for! Me queda probar con Iterator.

Funciona, pero no se si estará bien el constructor, o si se puede mejorar algo.

6
Aprender a programar desde cero / Re:Ejercicio con boolean ???
« en: 02 de Diciembre 2014, 06:59 »
Hola stevito.

Solo escribiste el ejercicio del curso.

De momento solo te piden definir métodos básicos por así decir. Empecé hace poco, mucho no te puedo decir, aunque saber cómo hacer el ejercicio alcanza.

boolean es un tipo de dato primitivo, y solo puede valer "true" o "false", sin las comillas.

En la declaración de variables de la clase, hacés como con los int y String

Código: [Seleccionar]
private boolean casado;
En el constructor, generalmente se le da a cada variable un valor básico. Hay reglas para escribir algunas cosas. Y para otras hay normas por así decir, un convenio para escribir los códigos para que quien lo vea lo entienda.

Por ejemplo, querés que el nombre de una variable sea bien descriptivo y decidiste poner nombre escuela infancia. Juntás las palabras, la primer letra de la primer palabra va con minuscula, pero de las siguientes con mayúscula.

Código: [Seleccionar]
private String nombreEscuelaInfancia;
Esto te explico porque en el constructor podés asignar cualquier valor a las variables, o directamente no hacerlo xd

Pero lo ideal sería hacerlo, y con valores que se usan por defecto. Para String se usa "", para int el 0 y para los boolean el valor false;

Código: [Seleccionar]
//Constructor
public Persona(){
nombre="";
edad=0;
casado=false;
}


Los métodos para obtener y establecer un boolean es como los demás.

Código: [Seleccionar]
public void setCasado(boolean valorCasado){casado=valorCasado;}
public boolean getCasado(){return casado;}

Entonces, boolean o vale true o vale false

esCasado=false;
esSoltero=true;

A partir de eso se pueden hacer mas cosas. Si no es casado, o sea, si casado=false, se hace tal cosa, pero si está casado, se hace otra cosa.

Eso sería lo básico, creo... xd   
Si me equivoco que alguien me corrija.


No te olvides de plantear cuál es tu problema para la próxima. Que el título sea un resumen sobre lo que trata tu post, así te ayudamos mejor.

Y si tu duda era otra cosa, no dudés en preguntar.

7
Hola.

Estaba practicando con un ejercicio del curso de Java. Era pedir agregar por teclado elementos a un arrayList.

Lo que quise hacer era tomar la primer letra del valor que se ingresa con el método substring, recorrer el array con el bucle foreach  y comparándolo con la primer letra de cada elemento.

Elegí substring porque comparar 1 letra parece mas fácil, o mas simple. Bueno, en el momento en que la letra del valor fuera mayor que la de algún elemento, uso el método get, le paso como parámetro el elemento comparado en el momento y le sumo +1 para ponerlo después de ese.

Sería algo así:

lista.add(elemento+1,valorTeclado);
break;

Break para terminar el bucle porque ya se agregó a la lista. Pero si no es mayor que ninguno, entonces es el menor de todos.

if(valorTeclado>elemento){lista.add(elemento+1,valorTeclado);
break;}
else {lista.add(0,valorTeclado)}

Para comparar encontré el método compareTo, pero hace hooooras estoy probando y probando y no me sale. Hasta se me fue de las manos esto. Me pide escribir incluso sin haber importado la clase Scanner.

Copié la clase a un nuevo paquete, por las dudas, tal vez había algo que no veía o que toqué, pero igual, me sigue pidiendo escribir!

Código: [Seleccionar]
import java.util.ArrayList;
//import java.util.Scanner;

public class ListaCantantesFamosos
{    private ArrayList<String>listaCantantes;
   
    public ListaCantantesFamosos(){
       listaCantantes=new ArrayList<String>(){{add("Bara");add("Maria");add("Tario");}};
    }
     
    public void ordenado(){
       //Scanner teclado=new Scanner(System.in);
       System.out.println("Escriba:");
       String cantante="Tola";//teclado.nextLine();
       for(int i=0;i<listaCantantes.size();i++){
           if (cantante.compareTo(listaCantantes.get(i))>0){
               listaCantantes.add(i+1,cantante);
               break;   
           }else{listaCantantes.add(0,cantante);}
       }
       System.out.println(listaCantantes);
    }
}

Dejé comentado lo referente a Scanner porque la idea es escribir y encontrarle una posición en el array. También saqué el substring por las dudas, cuando ya no se te ocurre nada hacés cualquier cosa xd

Probé en otra clase el compareTo, y funciona bien.

Código: [Seleccionar]
public class Casd
{
    public static void main(String[]args){
        String a="abc";
        String b="bca";
        String c="cba";
        if (a.compareTo(b)>0){
            System.out.println("a Es mayor que b");
        }else{System.out.println("a Es menor que b");}
        if (b.compareTo(c)>0){
            System.out.println("b Es mayor que c");
        }else{System.out.println("b Es menor que c");}
        if (c.compareTo(a)>0){
            System.out.println("c Es mayor que a");
        }else{System.out.println("c Es menor que a");}
    }
}

Probé con el for común y el iterator, por si estaba mal el usar foreach para lo que quería. No compilabra primero, luego compilaba, ejecutaba y me tiraba error. Luego terminaba agregando el valor, pero no ordenado. Y ahora me pide que le de y le de... entradas... por teclado xd

Bueno, en esta clase hice 3 métodos: for, foreach e iterator.

Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Iterator;

public class ListaCantantesFamosos3{
    private ArrayList<String>listaCantantes;
    private ArrayList<String>listaCantantes2;
   
    public ListaCantantesFamosos3(){
        listaCantantes=new ArrayList<String>(){{add("Bara");add("Maria");add("Tario");}};
    }
   
    public void ordenado(){
       Scanner teclado=new Scanner(System.in);
       System.out.println("Escriba:");
       String cantante=teclado.nextLine();
       for(int i=0;i<listaCantantes.size();i++){
           if (cantante.substring(0,1).compareTo(listaCantantes.get(i).substring(0,1))<0){
               listaCantantes.add(i+1,cantante);
               break;   
           }else{listaCantantes.add(0,cantante);}
       }
       System.out.println(listaCantantes);
    }

    /*
     
    public void ordenado(){
       Scanner teclado=new Scanner(System.in);
       System.out.println("Escriba:");
       String cantante=teclado.nextLine();
       for (String elemento:listaCantantes){
           if (cantante.compareTo(elemento)>0){
               listaCantantes.add(listaCantantes.indexOf(elemento)+1,cantante);
               break;
           }else{listaCantantes.add(0,cantante);
            break;}
         }
    }
    */
   
    /*public void ordernadoITR(){
    Iterator<String> listaITR=listaCantantes.iterator();
    Scanner teclado=new Scanner(System.in);
    System.out.println("Escriba:");
    String cantante=teclado.nextLine();
    while(listaITR.hasNext()){
        String elemento=listaITR.next();
        if (cantante.compareTo(elemento)>0){
            listaCantantes.add(listaCantantes.indexOf(elemento)+1,cantante);
        }else{listaCantantes.add(0,cantante);}
        }
    }
    */
}

No se exactamente si pide que escriba, pero me deja escribir en la ventana "terminal" de blueJ, como si así fuera.

Miré la clase en la api, pero... me costó entender. No pude sacar algo en concreto. Solo que compara y devuelve un int según si es menor, igual o mayor.

Encontré el método sort, pero probé el compareTo con algo sencillo. Y debería funcionar con lo que quiero, o no? Qué hago mal? No entiendo

Una última cosa... al principio tenía la clase ListaCantantes, que la declaraba en otra clase, ponele TestLista, de modo que alguien escriba para usar el programa. El problema es que en la clase TestLista no podía trabajar con el array directamente. Tenía que declarar métodos en la clase ListaCantantes e invocarlos en TestLista.

Por ejemplo, un método que me diga cuántos elementos hay en la lista usando como retorno el método size. Si lo creo en TestLista dice que no encuentra el método.  No se si alguien me puede explicar esto, dejo archivado las 2 clases, por si hace falta.



Bueno, espero que no haya quedado algo suelto, y que se entienda. Cualquier respuesta es bienvenida =)

8
Hola Ogramar.

Lo del return me quedó claro, se devuelve el primer return que se encuentre.

Lo de  entradaTeclado.substring(0, i+1),en el ejemplo del curso, el resultado devuelve un string con espacio al final

Código: [Seleccionar]
public class PrimerPalabra
{
    public static void main(String[]args){
        String texto="Hola mundo";
        for (int i=0;i<texto.length();i++){
            if (texto.substring(i,i+1).equals(" ")){
                System.out.println(texto.substring(0,i+1)+"1");//el 1 aparece separado porque el substring
                                                               //termina con un espacio
            }
        }
    }
}

que, bueno, en su momento me tenía confuso porque como que es algo delicado escribir un código, te equivocás en 1 o 2 cosas y te sale cualquier cosa


lo último, sobre el for (int i=0;i< entradaTeclado.length()-1;i++) , no recorre toda la cadena

Código: [Seleccionar]
public class ContarEspacios
{
    public static void main(String[]args){
        String texto="Hola mundo ";
        int espacio=0;
        for(int i=0;i<texto.length()-1;i++){
            if (texto.substring(i,i+1).equals(" ")){
                espacio++;
            }
        }
        System.out.println(espacio);
    }
}


Aunque no recorra todo el código, solo necesita la primer palabra ,y si no hay espacio devuelve toda la cadena.

Le di vuelta a esto porque no tenia entendido lo del return. Tratando de entender, encontré  esas 2 cosas.

Pero lo mas importante me quedó claro, gracias Ogramar.

9
Bien, le sacaste las comillas a las variables, y también se lee bien el texto que muestra System.out.print

Quedó lo del boolean. Por ejemplo tenés esto

Código: [Seleccionar]
public void setEdad(int valorEdad){
    edad=valorEdad;
    System.out.println("ha cambiado la edad del médico "+ nombre+" ,la nueva edad es "+valorEdad);
 }

Diría que en " " ,la nueva edad es "+valorEdad "pongas directamente edad, así

Código: [Seleccionar]
public void setEdad(int valorEdad){
    edad=valorEdad;
    System.out.println("ha cambiado la edad del médico "+ nombre+" ,la nueva edad es "+edad);
 }

Te va a mostrar el valor actual de edad, que justamente en este caso sería el mismo que ingresás

Por eso acá parece que está bien

Código: [Seleccionar]
public void setCasado(boolean valorCasado){
     casado=false;
     System.out.println("ha cambiado el estado de casado del medico "+  nombre+" ,el nuevo estado es "+valorCasado);
 }

al poner que te imprima valorCasado, te va mostrar lo qu ponés al usar el método, pero si ponés que te muestre por pantallá qué vale casado, siempre te va a mostrar false

dentro del programa BlueJ al crear un objeto de tu clase, lo vas a poder inspeccionar para que te muestre el valor de cada variable global, las que declaraste al principio.
Se hace con botón derecho sobre el objeto creado, que te aparecerá abajo a la izquierda en la ventana de BlueJ, y elegís Inspeccionar

Si usás el método setCasado y ponés true, al inspeccionar te va a seguir mostrando true

para corregir eso tenés que poner

Código: [Seleccionar]
public void setCasado(boolean valorCasado){
     casado=valorCasado;
     System.out.println("ha cambiado el estado de casado del medico "+  nombre+" ,el nuevo estado es "+casado);
 }

pasarle el parámetro que te pide el método a casado, de casado=false a casado=valorCasado tenés que cambiar


lo último, es que por convenio en los constructores las variables tipo int se inicializan en 0, los boolean en false y los String en ""

entonces en nombre="desconocido" tenés que cambiar a

nombre=""


para que quede mas claro, un ejemplo sería así

Código: [Seleccionar]
public class Ejemplo1{

   private String palabra1;
   private int numero1;
   private boolean fOv;

   public Ejemplo1(){
      palabra1="";
      numero1=0;
      fOv=false;
   }
}

10
Código: [Seleccionar]
public void setNumerodni(String valorNumerodni){
     numerodni="valorNumerodni";
     System.out.println("ha cambiado el número de dni del médico"+"valorNombre"+"el nuevo número es"+ valorNumerodni);
 }

numerodni="valorNumerodni";

acá si compilás te va a mostrar por pantalla "el nuevo número es valorNumerodni"
osea, numerodni va a valer lo que esté escrito entre comillas

pero debe ser que te confundiste nomas al poner con comillas, porque en los anteriores métodos hiciste bien

numerodni=valorNumerodni

así debería ser


luego

Código: [Seleccionar]
public void setCasado(boolean valorCasado){
     casado=false;
     System.out.println("ha cambiado el estado de casado del medico"+"valorNombre"+"el nuevo estado es"+valorCasado);
 }

en casado=false lo estás declarando false, no le estás pasando el parámetro valorCasado
tendría que ser así

casado=valorCasado 
en que valorCasado va ser false o true

Después, en System.out.println
ponés ("algo"+variable+"algo mas"+otra variable)

Si compilás tu código el texto en pantalla va a estar todo pegado.

Por ejemplo con

Código: [Seleccionar]
System.out.println("ha cambiado el número de dni del médico"+"valorNombre"+"el nuevo número es"+ valorNumerodni);
se va a ver así:
ha cambiado el número de dni del médicoJoseelnuevo número es12356

También recién veo que valorNombre lo pusiste con comillas
con lo que en realidad te va a imprimir así:
ha cambiado el número de dni del médicovalorNombreelnuevo número es12356

sacandole las comillas a "valorNombre" se resuelve. Pero lo que quería decir era que tendrías que preparar las cadenas, los strings que pongas dentro de System.out.print()

Por ejemplo así
System.out.println("dejo un espacio al final "+algo+" y otro al principio de esta cadena.")

Igual tratá de compilar tu código y probarlo, para ver cómo resulta y cómo te imprime las cosas por pantalla

11
Pasa que el método substring te devuelve un valor tipo String, y String es un objeto

Por lo que tengo entendido, para comparar la igualdad entre objetos se usa .equals()

Código: [Seleccionar]
if (texto.substring(0,1).equals("a"))
al usar charAt te devuelve un valor tipo char, que es un tipo de dato primitivo, y para comparar la igualdad de un dato primitivo se usa ==
por eso es que al usar el método charAt y el operador == te resulta



Código: [Seleccionar]
if (texto.charAt(0)=='a')
la a está entre comillas simples, 'a'
con eso como que indicás que es un char.  comparás el char que devuelve charAt con el char 'a' usando ==

fijate también que si pones con doble comilla la a, te salta error, en que no se puede comparar entre tipo String y char. la "a" es String, 'a' es char


En una entrega del curso explica bien el == y el equals

http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=628:el-metodo-equals-en-java-diferencia-entre-igualdad-e-identidad-comparar-objetos-ejemplos-cu00662b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

12
Hola.

Estoy confundido con una parte del ejemplo que dan en la entrega

Código: [Seleccionar]
import java.util.Scanner;

public class EntradaDeTeclado1
{
    private String entradaTeclado;
   
    public EntradaDeTeclado1 (){
        entradaTeclado="";
        pedirEntrada();
    }

    public void pedirEntrada ()  { 
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.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();
    }
}


Es sobre este método específicamente

Código: [Seleccionar]
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;
    }

Hay 2 return. Uno dentro del bucle y otro fuera.
Ahora bien, el segundo return, fuera del bucle, me tendría que devolver el valor del String, cosa que si se cumple la sentencia if no muestra el
String completo, sino que retorno el substring.

Aunque habiendo un return dentro de un bucle, si borro el segundo return me tira error al compilar.

Bueno, por ejemplo, si en una sentencia o un bucle tengo mas de una condición, primero se verifica el que aparece a la izquierda. Si la condición se cumple, se sigue con la siguiente condición y así.
Pero en el momento en que no se cumpla alguna condición no se verifican las otras.

Ahora, esto se aplica al método que cité? Se cumplió una condición que.. "valida" un return (devolver el substring), entonces no se verifica el siguiente (devolver el String)




Cambiando de tema, pero sobre el mismo método, lo probé con valor "hola mundo"

Código: [Seleccionar]
return entradaTeclado.substring(0, i+1);         }
con esa línea me devuelve "hola "


le saqué el +1 en el substring

Código: [Seleccionar]
return entradaTeclado.substring(0, i);         }
y devuelve "hola".


luego a

Código: [Seleccionar]
for (int i=0;i< entradaTeclado.length()-1;i++) {
le saqué el -1 y no cambia nada el resultado. no se cuál sería su... "propósito"

lo único que se me ocurre con -1 es algo así

Código: [Seleccionar]
for (int i=0;i<= entradaTeclado.length()-1;i++) {
length cuenta desde el 1, mientras que substring o métodos de Character desde el 0, entonces al usar operador <= se tendría que restar 1


comento estas 2  últimas cosas para tratar de entender el por qué está así escrito. aunque compile, un pequeño cambio y tal vez obtengas un bucle infinito, o que haga algo diferente a lo que querías que haga el método.

lo de la primera línea  tal vez no sea nada, pero del segundo directamente no lo entiendo. hay algo que se me escapa, o , nose, por eso antes de quemarme la cabeza aprovecho para consultar.

Gracias de antemano

13
Hola jaivcaba

Código: [Seleccionar]
if (texto.substring(0,1).charAt(0) == 'a'){
Está bueno combinar 2 métodos en uno solo por así decir

Pero creo que substring(0,1) es casi lo mismo que hace chartAt(0), ambos toman el primer caracter de la cadena.

con substring(0,1) tomás el caracter inicial. como que de "hola" te queda "h". con eso ya podés iniciar bien el bucle

Código: [Seleccionar]
if(texto.substring(0,)=="a"{
pero tenés que usar doble comilla porque substring te devuelve un String

14
Hola toni

gracias por responder.

y qué bueno que esté bien el ejercicio  =)


15
Hola.

Las variables globales las declaré tipo String porque la finalidad del programa es mostrar el resultado en forma de texto

y porque el programa se basa en imprimir todos los resultados en un texto, también declaré los métodos como private y void.

Código: [Seleccionar]
import java.util.Scanner;
public class EntradaString
{
    private String texto;
    private String textoLongitud;
    private String esA;
   
    public EntradaString(){
        texto="";
        textoLongitud="";
        esA="";
    }
   
    private void escribaCadena(){
        Scanner teclado=new Scanner (System.in);
        System.out.println("Escriba algo.");
        texto=teclado.nextLine();
    }
   
    private void contarCaracteres(){
        if (texto.length()<5){textoLongitud="menos de 5";}
        else if (texto.length()>=5&&texto.length()<=15) {textoLongitud="entre 5 y 15";}
        else {textoLongitud="mas de 15";}
    }
   
    private void comienzoA(){
        String comprueba=texto.substring(0,1);
        if (comprueba.equalsIgnoreCase("a")){esA="comienza con a.";}
        else {esA="no comienza con a.";}
    }
   
    public static void main (String[]args){
        EntradaString textoEntrada=new EntradaString();
        textoEntrada.escribaCadena();
        textoEntrada.contarCaracteres();
        textoEntrada.comienzoA();
        System.out.println("La cadena introducida tiene "+textoEntrada.textoLongitud+" y "+textoEntrada.esA);
    }
}


Luego quise usar el charAt para ver si comienza con "a" y que el programa preguntara si queria contar todos los caracteres o solo las letras.

Código: [Seleccionar]
import java.util.Scanner;
public class ProbarEntradaString
{
    private String texto;
    private String cadenaLongitud;
    private String esA;
   
    public ProbarEntradaString(){
        texto="";
        cadenaLongitud="";
        esA="";
    }
   
    private void ingresarTexto(){
        Scanner teclado=new Scanner(System.in);
        System.out.println("Escriba algo.");
        texto=teclado.nextLine();   
    }
   
    private void contadorCaracteres(){
        if (texto.length()<5){cadenaLongitud="menos de 5 caracteres";}
        else if(texto.length()>=5&&texto.length()<=15){cadenaLongitud="entre 5 y 15 caracteres";}
        else {cadenaLongitud="mas de 15 caracteres";}
}
   
    private void contadorLetras(){
        int letras=0;
        for (int x=0;x<texto.length();x++) {
            if(Character.isLetter(texto.charAt(x))) {letras++;}
        }   
        if (letras<5){cadenaLongitud="menos de 5 letras.";}
        else if (letras>=5&&letras<=15){cadenaLongitud="entre 5 y 15 letras.";}
        else {cadenaLongitud="mas de 15 letras.";}
    }

    private void comienzoA(){
        if(Character.toLowerCase(texto.charAt(0))=='a' ) {esA="comienza con a.";}
        else {esA="no comienza con a.";}
    }

    public void elegirContador(){
        Scanner teclado=new Scanner(System.in);
        System.out.println("Contar todos los caracteres(escriba car) o solo letras(escriba let)?");
        String opcion=teclado.nextLine();
        if (opcion.equalsIgnoreCase("car")){contadorCaracteres();}
        else if (opcion.equalsIgnoreCase("let")){contadorLetras();}
        else {System.out.println("No eligió una opción correcta.");elegirContador();}           
    }
   
    public static void main (String[]args){
       ProbarEntradaString probar=new ProbarEntradaString();
       probar.ingresarTexto();
       probar.elegirContador();
       probar.comienzoA();
       System.out.println("El texto introducido tiene "+probar.cadenaLongitud+" y "+probar.esA);
    }
}

16
Hola toni.

Andaba repasando. tambien buscaba por la web qué pasa cuando invoco el método pow.

al final la respuesta estaba en el curso. tengo que prestar mas atención

tu respuesta sí, me sirvió.

gracias por la mano.

17
Hola, tambien soy nuevo con la programacion. Espero poder ayudarte

Código: [Seleccionar]
public void pasadoMetro(double salto){
   
    if(salto>1){
       
        System.out.println(this.nombre+" "+this.apellido+" ha pasado de 1 con su salto de "+salto+" metros.\nEres  un campeón");   
   
        this.salto=salto;
   
    }else{
        System.out.println("Siga intentandolo, salto mejorable");
    }

}
public void saltoMasAlto(double salto){


   
    if(salto>this.salto){
       
   
    System.out.println("El nuevo record es"+salto);
    this.salto=salto;
    }else{
        System.out.println("El record sigue siendo"+this.salto);
    }
}

por convención, creo que solo las clases su primer letra es mayúscula, con lo que las variables empiezan con minúscula.

Despues de una cadena de texto, si querés imprimir algún valor conviene dejar un espacio para que el valor no quede pegado al texto

Código: [Seleccionar]
"Mostrar un"+9
se mostraria por pantalla Mostrar un9

Código: [Seleccionar]
"Mostrar un "9Mostrar un 9

Con lo de que this.salto siempre vale 0, cuando se cumple la condición de que el salto es mayor, le asignás el parámetro a la variable salto

Código: [Seleccionar]
this.salto=salto;
Luego, opinando, aparte de indicar que logró superar el metro de salto, pondría cuánto saltó, cosa de que sepa cuánto tiene que superar.

Luego, si declaraste público el primer método, también declararía público el segundo, aparte de que si es privado nadie podría jugar xd

Espero que algo de esto te sirva xd

18
Hola.

Código: [Seleccionar]
a)¿Es posible llamar a un método externo de un objeto que ha sido declarado pero no creado?
Me cuesta entender qué es un objeto declarado pero no creado. Diría que es una clase no instanciada todavía.
Mientras que el método se haya declarado de acceso público, se puede. Me imagino que habrá clases con métodos pensados solo para ser invocados externamente, de uso frecuente o universal, como la clase String de java y su método substring.

Código: [Seleccionar]
b) ¿Es posible llamar a un método externo de un objeto “A” que ha sido declarado y creado pero cuyo constructor está vacío?
Justamente se podría invocar un método setter. Podría haber una clase que compile los métodos setter y getter de varios objetos, cosa de actualizar los datos con un misma clase en vez de entrar objeto por objeto.

Código: [Seleccionar]
c) Una llamada al método pow de la clase Math que hacemos dentro de un método definido en una clase ¿Es una llamada a un método interno o a un método externo? ¿La llamada al método pow se hace sobre un objeto declarado y creado o no declarado y no creado?
Llamada a método externo, sobre un objeto declarado pero no creado.


Elegir entre declarado y creado, o no declarado y no creado me confunde de nuevo sobre qué es un objeto declarado.

Aver, clase es como el modelo, o la plantilla de todo objeto creado de él. Declarar un objeto, no, no se qué es, solo se me ocurre una forma de decir crear una clase.



19
hola jaivcaba

Faltó un método que combine siempre

De paso, para compartir ideas, cito esto y comento luego

Código: [Seleccionar]
Fíjate en el resultado que ofrece el método CombinadoSiempre cuando se le pasan como parámetros dos cadenas vacías. ¿Te parece lógico el resultado?

               
Citar

    Si me parece lógico ya que al enviar cadenas vacías el método queda
    valor_texto1.substring (0,0)+" "+ valor_texto2.substring (0,0), por lo tanto lo único que devuelve el método es "". 

   

También le veo lógica, pero no le veo sentido que devuelva nada xd
para hacer algo intuitivo al programa, partiendo del ejemplo en el curso

Código: [Seleccionar]
String CombinadoSiempre (String valor_texto1, String valor_texto2) {

        int longitud_texto1 = 3;  //Si podemos extraeremos tres caracteres

        int longitud_texto2 = 3;

        String CombinadoSiempre = ""; //Cadena vacía, variable local

        if (valor_texto1.length() < 3) {          //Si hay menos de 3 caracteres extraemos los que haya

            longitud_texto1 = valor_texto1.length();

        }

        if (valor_texto2.length() < 3) { longitud_texto2 = valor_texto2.length(); }

CombinadoSiempre = valor_texto1.substring (0,longitud_texto1)+" "+ valor_texto2.substring (0, longitud_texto2);

return CombinadoSiempre;

cambiaria la ultima parte a

Código: [Seleccionar]
if (valor_texto1.equals("")&&valor_texto2.equals("")){
            CombinadoSiempre="No hay nada para combinar";
        }else{
            CombinadoSiempre = valor_texto1.substring (0,longitud_texto1)+" "+ valor_texto2.substring (0, longitud_texto2);
        }
return CombinadoSiempre;

cosa de que al no escribir nada de nada, avise

20
sí, voy entendiendo un poco mas cada vez que leo tu explicación.

pedir parámetros en un método no implica que, bueno,. como vos decís, lo tengas que usar sí o sí.

en un método pido como parámetro el objeto "x" de la clase "y"
en el cuerpo del método creo un nuevo objeto de la clase "y", que se inicializará con su constructor por defecto.

a=1
b=2
c=3
d=4

al instanciar, si quiero le paso algún valor del objeto "x"  invocando un método getter, el cual me devuelve el valor de ese objeto.

por ejemplo, getD, que me devuelve el valor de "d" en el objeto "x".



masomeno eso entendi. la idea creo que la tengo. igual es como vos decís también, seguir con el curso, seguir aprendiendo.

gracias por la ayuda, y por los zapatos.

xd

Páginas: [1] 2

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