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 - lobo

Páginas: [1]
1
Aprender a programar desde cero / Re:Insertar imagen en foros
« en: 16 de Octubre 2014, 12:03 »
Gracias de nuevo Mario.

Tras pelearme un rato con ello, al fin lo he conseguido desde photobucket.

Me han funcionado dos métodos:

1) Clic con botón derecho sobre la imagen a compartir --> Abrir enlace en una ventana / pestaña nueva --> Clic con botón derecho sobre la imagen (en la nueva ventana / pestaña) --> Copiar URL de imagen.

La dirección a copiar entre las etiquetas de insertar imagen es http://i1377.photobucket.com/albums/ah51/auuuu/DiagramadeClases_zps8764e4c7.png?t=1413451996



2) Clic con botón izquierdo en el icono superior derecho de la imagen (en su ventana raíz) --> En el desplegable seleccionar Share Links --> Direct (copia a portapapeles).

La dirección a copiar entre las etiquetas de insertar imagen es
http://i1377.photobucket.com/albums/ah51/auuuu/DiagramadeClases_zps8764e4c7.png


Sin duda, la mejor cualidad de un informático es la tenacidad. ;D

Nos vemos por aquí...

Saludos.

2
Aprender a programar desde cero / Re:Insertar imagen en foros
« en: 16 de Octubre 2014, 00:22 »
Gracias Mario por tu didáctica respuesta. Voy a probar en este post si me funciona.

inserto la imagen de captura del DIAGRAMA DE CLASES de Bluej correspondiente al ejercicio de repaso que he publicado hoy.

Me he registrado en Dropbox y he subido la imagen a mi cuenta.
El enlace a la imagen es el siguiente:

https://www.dropbox.com/s/bq9972gvnu7gkxt/Diagrama%20de%20Clases.PNG?dl=0

Veamos si funciona.

Inserto este enlace entre las etiquetas ,


...pero la imagen no se ve.

El formato de la imagen es .PGN, ¿será válido?.

Pruebo con una imagen .jpg:


Tampoco se ve...

El Dropbox lo tengo configurado (por defecto) para que Cualquiera que tenga el enlace puede verlo

Saludos.

3
Gracias de nuevo toni_apr por tomarte la molestia de probar e inspeccionar mi código, así como por tu crítica tan estimulante.

Sí, realmente he creado aplicaciones de gran complejidad, además con programación procedimental (sobre todo en VB6). Tal vez algún día consiga traducir este código a java y podríais verlo. Una de estas aplicaciones es para simular y resolver, analítica, numérica y gráficamente todos los problemas posibles en DISPERSIÓN COMPTON (efecto cuántico de la dispersión de fotón y electrón).

Pero en POO soy absolutamente novato y me cuesta un poco entender algunos conceptos. No obstante, el proceso de cualquier aprendizaje es así, paulatino; no se puede pretender entenderlo todo el primer día.

Observo que estudias el código con mucho rigor, y no es ninguna temeridad predecirte un gran futuro como programador,

Gracias por tu colaboración. Seguiremos en contacto.

Te deseo mucho éxito en los estudios y en la vida.

Un cordial saludo.

4
Aprender a programar desde cero / Insertar imagen en foros
« en: 15 de Octubre 2014, 11:14 »
En el editor de mensajes del foro hay un icono para INSERTAR IMAGEN, el cual simplemente añade un par de etiquetas, . ¿Alguien sabe qué hay que escribir entre éstas?. ¿Será el path a la imagen que se desea cargar?. Lo he intentado así en mi post anterior en el que deseaba insertar el DIAGRAMA DE CLASES, pero sólo aparece un icono y no responde al intentar descargar la imagen...

Gracias.

5
Programa con 4 clases para afianzar el manejo de clases de un ArrayList y otros conceptos de la POO en Java.

Funciona a la perfección y creo que tiene un código limpio y una interface intuitiva y amigable. Lo publico por si puede ser útil a alguien. También serán bienvenidas las críticas constructivas.


DIAGRAMA DE CLASES:


CLASE QUE GESTIONA LA ENTRADA POR TECLADO:
Código: [Seleccionar]
import java.util.Scanner;

public class EntradaTec {
   
    String entradaTec; //Declaración de objeto String para guardar la cadena tecleada
       
    public EntradaTec(){ //Constructor
        entradaTec="";         
    }
 
    public String pedirEntrada(){       
        Scanner entradaEsc = new Scanner(System.in);
        entradaTec = entradaEsc.nextLine();             
        return entradaTec;
    }       
}

CLASE QUE GESTIONA EL ArrayList:

Código: [Seleccionar]
/* CLASE PARA LA CREACCIÓN Y GESTIÓN DE UNA LISTA (ArrayList)
 * Se utiliza SOBRECARGA (3 métodos con el mismo nombre pero distintos parámetros) para el método addNombre
 */

import java.util.ArrayList;
import java.util.Iterator;

public class Lista{
   
    private String nombre;//Atributo o campo para los elementos de la lista
    private ArrayList<String> lista = new ArrayList<String>(); //Creación de un objeto array para objetos tipo String
    private String entrada;//Declaración de variable tipo String para guardar ñas entradas por teclado

    public Lista (){//Constructor vacío (se puede omitir)
    }
   
    public void addNombre(){//Método tipo procedimiento (setter) para añadir secuencialmente datos al ArrayList lista
        EntradaTec entrada = new EntradaTec();
        do {
            nombre = entrada.pedirEntrada();
            lista.add(nombre);
        }   while(nombre.length() >0);
        lista.remove("");//Borra el último elemento de la lista que es la cadena vacía de cierre 
    }
   
    public void addNombre(int i){//Método setter para insertar un datos em la posición dada por el parámetro formal i
        EntradaTec entrada = new EntradaTec();       
        System.out.println("Nombre a insertar en la lista:"); 
        nombre = entrada.pedirEntrada();
        lista.add(i, nombre);       
    }
   
    public void addNombre(String nombre){//Método setter) para añadir un solo nombre al final de la lista
        lista.add(nombre);
    }
   
    public void listado1 (){//Método setter para mostrar en fila todos los elementos de la lista 
        int i = 0;
        while(i < lista.size()){           
            String elemento = lista.get(i);
            switch (i) {
                case 0:  System.out.print("Elementos de la lista (en fila): ");System.out.print(elemento); break;               
                default: System.out.print(", " + elemento); break;
            }
            i++;
        }
        System.out.println(".");
    }
       
    public void listado2 (){//Método setter para mostrar en columna todos los elementos de la lista
        System.out.println("Elementos de la lista (en columna):");
        System.out.println("");
        for(String nombre: lista){//Bucle FOR_EACH o EXTENDIDO
            System.out.println("          " + nombre);
            System.out.println("");           
        }
    }
   
    public int getSize(){//Método tipo función (getter) que devuelve el tamaño de la lista
        return lista.size();
    }
   
    public void borraNombre(int i){//Método setter que borra el i-ësimo elemento de la lista
        lista.remove(i);
        System.out.println("Se ha borrado el elemento " + i + "ª de la lista");
    }
   
    public void borraLista(){//Método setter que borra todos los elementos de la lista
        lista.clear();
        System.out.println("Se han borrado todos los elementos de la lista");
    }

   
    public String Buscar(String nombre){//Método getter que busca un elemento en la lista
        Iterator<String> it = lista.iterator(); //Creamos el objeto it de tipo Iterator con String
            String tmpAnalizando ="";
            boolean resultado=false;
                   
            while (it.hasNext() ) { //Utilizamos el método hasNext de los objetos tipo Iterator
                 tmpAnalizando = it.next(); //Utilizamos el método next de los objetos tipo Iterator
                 System.out.println ("Analizando elemento... " + tmpAnalizando);
                 if (tmpAnalizando.contains(nombre)) {
                     resultado = true;//resultado cambia a true si y solo si nombre está en la lista                                             
                 }
                 else { } //else vacío; no hay acciones a ejecutar.
            } //Cierre del while
           
            if (resultado == true){//Condicional IF-ELSE que define el valor de la variable tmpAnalizando
                 tmpAnalizando = "El nombre " + nombre + " está en la lista";}
            else {
                 tmpAnalizando = "El nombre " + nombre + " no está en la lista";}
                   
        return tmpAnalizando;
    }

}

CLASE PARA LA ELECCIÓN DE OPCIONES (MENÚ):

Código: [Seleccionar]
/* CLASE PARA EL MENÚ DE OPCIONES EN LA GESTIÓN DE UNA LISTA (ArrayList)
 * El "número" de opción se carga como String mediante el método pedirEntrada() de la clase Entrada Tec
 * Para poder utilizar el "número" (cadena) de opción n como variable de condición en un switch
 * se convierte éste a Integer mediante el método parseInt(n) de la clase Integer */
 
public class OptList{
     
     Lista obLista = new Lista();//Creación de una instancia (objeto) de la clase Lista     

     public void opList(){   
         
        System.out.println("**************************************************************");
        System.out.println("* Elija una acción:                                          *");
        System.out.println("* 1 --> \"Añadir nombres al final de la obLista\"              *");
        System.out.println("* 2 --> \"Añadir un nombre en el n-ésimo lugar de la obLista\" *");
        System.out.println("* 3 --> \"Buscar un nombre\"                                   *");
        System.out.println("* 4 --> \"Listar nombres\"                                     *");
        System.out.println("* 5 --> \"Borrar un nombre\"                                   *");
        System.out.println("* 6 --> \"Borrar todos los nombres de la obLista\"             *");
        System.out.println("**************************************************************");
        EntradaTec op = new EntradaTec();//Creación de un objeto op como instancia de la clase EntradaTec       
        System.out.println("Escriba el número de opción y pulse ENTER");
        String n = op.pedirEntrada();//Asignación al String n la cadena solicitada por la clase pedirEntrada() del objeto op       
        int numOp = Integer.parseInt(n);//Conversión de la cadena n a entero (objeto String --> objeto Integer)   
        int sup = obLista.getSize();//Obtención del índice superior de la obLista
       
        switch (numOp){
            case 1:
                    System.out.println("Escriba un nombre, o nada para terminar, y pulse ENTER");
                    obLista.addNombre();                   
                    break;
            case 2:
                    System.out.print("Posición del nombre a insertar en la obLista (no superior a " + sup + "):");
                    String s = op.pedirEntrada();                   
                    int i = Integer.parseInt(s);                   
                    if (i <= sup){obLista.addNombre(i);}
                    else {System.out.println("La posición no debe ser superior a " + sup);                   
                    }
                    break;
            case 3:
                    System.out.print("¿Nombre a buscar en la obLista?:");
                    String nombre = op.pedirEntrada();
                    String respuesta = obLista.Buscar(nombre);
                    System.out.println(respuesta);
                    break;
            case 4:
                    System.out.println("\n\n");                   
                    System.out.println("*********************************");
                    System.out.println("");                   
                    System.out.println("¿Cómo desea presentar la lista, en fila (1) o en columna (2)?");
                    String formato = op.pedirEntrada();
                    if (formato.equals("1")){obLista.listado1();} else {obLista.listado2();}                     
                    break;
            case 5:
                    System.out.print("Posición del nombre a borrar de la obLista (inferior a " + sup + "):");
                    String t = op.pedirEntrada();                   
                    int j = Integer.parseInt(t);
                    obLista.borraNombre(j);       
                    break;                                           
            case 6:
                    obLista.borraLista();
                    break;
            default:
            }
        }   
 }

CLASE QUE CONTIENE EL MÉTODO main PARA INICIAR EL PROGRAMA:

Código: [Seleccionar]
/**************************************************
 *      POO en Java - PROGRAMA CON 4 CLASES       *
 *      ===================================       *
 * EJERCICIO SOBRE MÉTODOS DE LA CLASE ArrayList  *
 *           Autor: Jesús Álvarez Lobo            *
 *        Versión: 0.001 - Fecha: 14/1014         *
 **************************************************/

public class ManejoLista{
   
    public static void main (String [] args){
     
       OptList manejoLista = new OptList();       
       EntradaTec pregunta = new EntradaTec();
       String respuesta;
       
       do{
          manejoLista.opList();
          System.out.println("Desea volver al menú (s) o terminar (n)?");         
          respuesta = pregunta.pedirEntrada();         
          System.out.print('\u000C');}//Borra la consola respetando el menú de opciones         
       while(respuesta.equals("s"));     
    }
}

El siguiente objetivo en la escalada de complejidad sería transformar este programa de forma que en lugar de trabajar con objetos tipo String lo hiciese con un ArrayList<String>, donde el array que sustituye al String (nombres de la lista) del programa actual fuese, por ejemplo, de dimensión 3, con estos datos: (nombre de un piloto de F1, su escudaría, su puntuación en la clasificación general). ¿Alguien se anima?.  ;D

Saludos y mucho ánimo.

6
Gracias toni_apr por tu exhaustivo análisis del ejercicio. Tomo nota de tus observaciones.

Si he decidido ir un poco por libre en este ejercicio ha sido, en parte, por el echo de que ya se habían presentado diversas soluciones ajustadas al enunciado.

Como variantes más notables yo destacaría:

1) Posibilidad de introducir cualquier número de nombres en el ArrayList indicando el final de las entradas con un ENTER "en blanco". Esto creo que es importante pues el ArrayList se caracteriza por su carácter dinámico en cuanto a dimensión.

2) Mostrar el listado formateado.

Espero no sea considerado como un menosprecio de los ejercicios propuestos en el curso, el cual me parece excelente dentro de su nivel. Yo soy nuevo en java (aunque no en programación, pues he creado aplicaciones de cierta envergadura en Visual Basic y en Logo), y he elegido este curso (entre la inmensa cantidad de materiales accesibles por Internet) para aprender a dar los primeros pasos en java.

Me he tomado la libertad de no seguir estrictamente el enunciado para aportar algo al foro, con el que me siento en deuda, porque sobre este ejercicio, reitero, ya se habían presentado soluciones perfectas. Para comprobar si yo sería capaz de hacerlo por mi mismo, decidí hacer una versión algo distinta, y al ver que funcionaba bien me pareció oportuno publicarla, Eso es todo.

Saludos a todos.

7
Esta en una solución al ejercicio C00665B con ligeras variantes que he introducido para ir explorando un poco las posibilidades.



CLASE QUE PIDE LA ENTRADA POR TECLADO DE LOS ELEMENTOS DE UNA LISTA DINÁMICA:


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

public class EntradaTec {
   
    String entradaTec; //Declaración de objeto String para guardar la cadena tecleada
       
    public EntradaTec(){ //Constructor
        entradaTec="";         
            }
 
    public String pedirEntrada(){
        System.out.println("Escriba un nombre (o nada para terminar) y pulse ENTER");
        Scanner entradaEsc = new Scanner(System.in);
        entradaTec = entradaEsc.nextLine();             
        return entradaTec;
    }
       
        public String getEntradaTec(){
        return entradaTec;
    }
}



CLASE QUE CREA UN ArrayList CON LOS String INTRODUCIDOS MEDIANTE LA CLASE ANTERIOR Y MUESTRA SU LISTADO FORMATEADO:

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

public class Lista{
   
    private String nombre;//Atributo o campo para los elementos de la lista
    private ArrayList<String> lista = new ArrayList<String>(); //Creación de un objeto array para objetos tipo String
    private String entrada;

    public Lista (){
    }
   
    public void addNombre(){
        EntradaTec entrada = new EntradaTec();
        do {
            nombre = entrada.pedirEntrada();
            lista.add(nombre);
        }   while(nombre.length() >0);
        lista.remove("");//Borra el último elemento de la lista que es la cadena vacía de cierre 
        System.out.print("Se ha cerrado la lista");       
    }
   
    public void addNombre(String nombre){
        lista.add(nombre);
    }
   
    public void listado (){
        int i = 0;
        while(i < lista.size()){           
            String elemento = lista.get(i);
            switch (i) {
                case 0:  System.out.print("Elementos de la lista: ");System.out.print(elemento); break;               
                default: System.out.print(", " + elemento); break;
            }
            i++;
        }
        System.out.println(".");
    }
}



CLASE main QUE INICIA LA EJECUCIÓN DEL PROGRAMA Y AÑADE FORMATO A LA SALIDA POR CONSOLA:


Código: [Seleccionar]
public class ManejoLista{
   
    public static void main (String [] args){
        Lista lista = new Lista();
        System.out.println("");
        lista.addNombre();
        System.out.println("");
        System.out.println("");
        System.out.println("*********************************");
        System.out.println("");
        lista.listado();               
    }
}

8
Disculpa Aleexx1724, te contesté sin fijarme bien ni analizar tu código (interpreté que obtenías como resultado 255 y no era eso lo que esperabas).

Un código correcto es:

public class MultiplicadorDieces{

    public MultiplicadorDieces(){
    // Constructor vacio
    }

    public double MultiplicarDieces(double n, int m){
    double resultado=n;
    for(int i=1; i<=m;i++){
    resultado=resultado*10;   
    }
   
    System.out.println(resultado);
    return resultado;
    }

}


En tu código hay varios errores; los pongo en negrita y en rojo y los comento a continuación:

public class MultiplicadorDieces{

    public MultiplicadorDieces(){
    // Constructor vacio
    }

    public double MultiplicarDieces(double n, int m){
    double resultado=10;
    for(int i=1; i<m;i++){
    resultado=resultado*10;
    System.out.println(resultado);
    }
   
    resultado=resultado*n;
   
    return resultado;
    }

}

ERROR 1: double resultado=10;

Si inicializas resultado con 10, para n = 1 el bucle no deberia ejecutarse y para n = 0 no tendrías solución correcta. Lo lógico parece ser inicializar con n, que es el valor primitivo del número que vas a multiplicar por dieces.

ERROR 2º: for(int i=1; i<m;i++)

Inicializando resultado como resultado = n, el número de ciclos que debe ejecutar el bucle debe ser m, pero si pones el límite superior del índice i como i<m tienes un ciclo menos, o sea, para m = 2 solo multiplaría una vez por 10; has de poner i <= m.


ERROR 3º:

 resultado=resultado*n;

Esta línea sobra si se ha incializado resultao = n (que es lo correcto).

ERROR 4º:

System.out.println(resultado);

Esta instrucción, que has escrito a modo de debugger, debería estar al final de la clase y no dentro del bucle (en ese caso solo obtienes múltiplos de diez pero no el resultado).

Para ver por qué no se obtiene el resultado esperado lo que debes hacer es e¡seguir el flujo del programa, (como si tú mismo fueses el programa), observando qué valor tiene el resultado en cada paso.


Saludos.

9
Hola aleexx1724.

El código es correcto... y el resultado también: cuando pones MultiplicarDieces(2.55,2) lo que debes obtener es 2.55 multiplicado por 10 dos veces, es decir, 2.55 x 100 = 255. Es simplemente 255 expresado en notación científica.

Me he sentido obligado moralmente a responderte aunque yo no soy soy experto en java, pero sí en Matemáticas, pues soy profe de Mates.

A todos nos ocurre que en algún momento nos obcecamos y no conseguimos ver algo que está muy claro. En estos casos te recuerdo el consejo de Einstein: "Si deseas resultados diferentes no hagas siempre lo mismo", o sea, no pienses solo que hay un error paradójico de programación, piensa también sí realmente existe ese error.

Un cordial saludo.

10
Aprender a programar desde cero / Re:Variables tipo objeto
« en: 29 de Septiembre 2014, 12:33 »
Gracias Javi por tu rápida y exhaustiva respuesta.

También quiero expresar mi agradecimiento a todos los miembros del FORO, ya que todos aportan algo (se aprende no solo de las respuestas sino también de las preguntas pues te lleva a reflexionar sobre algo que tal vez nunca te habías planteado), en particular a sus creadores, y felicitarles por su buen funcionamiento.

11
En primer lugar SALUDOS a todos, pues soy nuevo en el FORO.

También soy nuevo en POO (aunque he programado en otros lenguajes, como VB6 y LOGO).

Considero esencial sentar bien las bases conceptuales para construir sobre seguro, de ahí la siguiente pregunta:

¿Se puede decir que un OBJETO es una variable (tipo objeto) cuyo tipo es la CLASE (las clases definen tipos) de la que deriva el objeto?.

De ser así, ya que una variable es un espacio reservado en memoria, ¿que espacio ocuparía una variable tipo objeto?. Supongo dependerá de la complejidad del objeto, pero ¿se puede evaluar el tamaño en memoria?.

Muchas gracias.

Páginas: [1]

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