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

Páginas: 1 ... 43 44 45 46 47 [48] 49 50
941
El ejercicio 2 y 3 son correctos.

A ver el 4:
4. Se tiene el siguiente método, el cual asumimos correcto para nuestro propósito:
public void realizarProcesos()
{
String aux1;
double aux2;
aux1 = calcularSubTotal(0.18);
cerrarArchivos("Cerrando ....");
}
Define la firma (encabezado) para los 2 métodos que se invocan.
a)
b)

Esto has de intentarlo resolverlo tú.
Lo primero es identificar cuáles son los 2 métodos invocados:
a) calcularSubTotal()
b) cerrarArchivos()


Una vez identificados, para adivinar cuál sería su firma o encabezados, has de fijarte en:
  • qué tipo de dato están recibiendo como parámetro (entre los parentésis)
  • qué tipo de dato están devolviendo, esto se puede identificar fijándonos en el tipo de dato de la variable a la cuál le estamos asignando el valor devuelto por la función.
  • por último, ¿el método está devolviendo algún tipo de dato?. Hay métodos que no devuelven ningún dato. Simplemente hacen una serie de operaciones, las que sean, pero no devuelven ningún valor. Estos métodos al definirlos, su tipo de dato que devuelve se indica que es void (vacío)

A ver si con estas pistas logras hacerlo tú.

942
Hola,

Vamos a ver el ejercicio 1:

1. Se tiene el siguiente método, el cual asumimos correcto para nuestro propósito:

public double convertirDolaresSoles(int dolares)
{
double soles;
soles = dolares * tipoDeCambio;
return soles;
}

Identifica los siguientes elementos: (6 puntos)
a.- Nombre de la función:Public
b.- Nombre del parámetro: dolares
c.- Tipo de dato que devuelve: return
d.- Tipo de dato del parámetro: int
e.- Nombre de la variable: soles
f.- Nombre de la constante: ConvertirDolaresSoles:
Algunas respuestas están equivocadas.
a.- Nombre de la función:Public convertirDolaresSoles
b.- Nombre del parámetro: dolares
c.- Tipo de dato que devuelve: return double
d.- Tipo de dato del parámetro: int
e.- Nombre de la variable: soles
f.- Nombre de la constante: ConvertirDolaresSoles tipoDeCambio

La plabra public no es el nombre de la función. public es una palabra reservada y sirve para indicar la "visibilidad" que tendrá esta funcion.
Dicha función, llamada convertirDolaresSoles, está declarada dentro de una clase, que no se especifica como se llama, pero vamos a suponer que se llama Conversor

Pues public significa que dicha función será publica, es decir, que se podrá invocar a esta función fuera de su propia clase. Esto significa que yo en otra clase completamente diferente de esta, podré crear un objeto de la clase Conversor e invocar a este método.
Por ejemplo, imagina este código pertenece a otra clase distinta de la clase Conversor, dentro de la cual yo creo un objeto de la clase Conversor:

Código: [Seleccionar]
Conversor miConversor = new Conversor();///Creo un objeto de la clase Conversor
double dinero = miConversor.convertirDolaresSoles(500);//Invoco a la función que hace la conversión de moneda

Este código es válido si la función fue declarada como public.
En cambio, si la hubieramos declarado como private, y no public, entonces este código daría error.
Una función declarada como private hacemos que se reduzca su "visibilidad" y solo puede ser invocada dentro de su propia clase, pero no fuera. Otras clases no pueden ver esta función al ser private, no pueden utilizarla



La palabra return no es un tipo de dato, es una instrucción que da la orden de finalizar la función devolviendo el valor que se le indique a continuación.
El tipo de dato que devuelve esta función es el tipo double
Esto se identifica fácilmente viendo la "firma" de la función:

Código: [Seleccionar]
public double convertirDolaresSoles(int dolares)public ya hemos explicado lo que es.
La siguiente palabra, double, es la que indica el tipo de dato que OBLIGATORIAMENTE ha de devolver esta función. Es decir, no puede devolver un tipo de dato int, ni byte, no short, ni STring, ni char...... está obligado a devolver un valor double.
Por eso la función termina con esta instrucción:

Código: [Seleccionar]
return soles;soles es una variable de tipo double, por lo tanto es válida para ser devuelta como resultado de la función. Si no fuese de tipo double, no se podría devolver con la sentencia return

Sobre la constante.
Una constante es como una variable, pero que tendrá un valor fijo. Un valor que no va a ser alterado durante la ejecución del programa.
Identificar cual es la constante en ese código, puede no ser evidente en un principio, pero con un poquito de análisis es fácil suponer que la variable tipoDeCambio es la constante.
Las otras variables, dolares y soles... tendrán valores distintos cada vez que se ejecute el programa, porque cada vez convertiremos distintas cantidades de dinero.
Pero el tipo de cambio, es algo fijo, es un valor que no queremos que cambie bajo ningún concepto. Por eso es fácil suponer que en algún sitio del código de esta clase, esta variable estará definida como constante, al contrario que las otras.

943
Para Android se usa principalmente lenguaje Java (también sirve C++) para codificar la parte lógica y lenguaje XML para la parte del diseño.
La parte del diseño suele usarse un editor visual que va generando el XML automáticamente y puedes ir modificando el XML y usar el editor visual al mismo tiempo.
La parte del diseño puede ser tediosa hacerlo picando directamente código XML, es poco práctico, propenso a errores y una inversión de tiempo improductiva.

Pero lo que es la parte lógica, la programación en Java, no te preocupes que eso no te lo va a proporcionar ningún editor. Ha de salir de tu cerebro sí o sí.

Sobre que se necesita aprender para desarrollar por libre páginas web...no sabría decirte ya que no me decico a esto

Pero digamos que HTML, CSS, PHP y JavaScript es la base, que por cierto, profundizar en PHP y JavaScript es un proceso mucho más largo que con HTML y CSS, los cuales se pueden "dominar" en pocas semanas.
Pero también se necesitan otros conocimientos, aunque sean nociones, como por ejemplo SQL para gestionar bases de datos, SEO para posicionamiento web, JQuery que es un framework de JavaScript (aunque me parece que ahora hay otros frameworks más en boga...), retoque y diseño fotográfico pues no siempre nos van a dar las imagenes ya hechas para simplemente ponerlas en el HTML...

Vamos, que nunca se sabe "todo" y siempre hay cosas que aprender. Tiempo y paciencia son las claves...

944
Tengo javascript superoxidado...

Creo que el script podría ser este:
Código: [Seleccionar]
<script type="text/javascript">
function compruebaNumero(numero) {
    if (numero <0 || numero >99999999)
        alert("Numero no valido");
}
</script>

Esta funcion espera recibir un numero para realizar la comprobación.

Lo escribes dentro del documento HTML, hay quien lo pone dentro del <body> al final de todo.
Otros lo ponemos dentro del <head>, aunque cuando se usa mucho javascript lo ideal es cear un archivo .js por separado y luego importarlo


Luego llamas a la funcion javascript dentro del formulario, puedes hacer que se ejecute justo cuando el usuario ha terminado de introducir el numero en el campo de texto <input type="text"> mediante el atributo onchange
Al llamar la funcion, hay que pasarle el valor que tenga ese campo input, se hace fácil usando la palabra clave this.value
this hace referencia al elemento desde el cual llamamos la funcion javascript, en este caso, el campo input.
value, obviamente, hace referencia al valor de dicho elemento.
Así que con this.value, estamos pasando el "valor" que contiene el campo de texto, es decir, lo que haya tecleado el usuario.

Recuperando el mismo HTML que propuso el otro compañero....aunque dejando vacio el atributo action del formulario porque en este caso no lo necesitamos.
Verás que el mensaje de alerta sale, en cuanto el campo de texto "pierde el foco", ya sea pinchando en otro elemento como el boton, o también si usas el tabulador para mover "el foco".


Código: [Seleccionar]
<html>
    <head>       
        <title>Comprobar números</title>
        <meta charset="utf-8">
<script type="text/javascript">
            function compruebaNumero(numero) {
                  if (numero <0 || numero >99999999)
                        alert("El numero proporcionado no es valido");
            }
</script>
    </head>
<body>
<form action="" method="post">
<p>
<label for="numero">Introduce un número para comprobar: </label>
<input type="text" name="numero" onchange="compruebaNumero(this.value)">
<input type="submit" value=“Comprobar” name="comprobar">
</p>
</form>
</body>
</html>

945
Si el CSS lo aplicas a la etiqueta div, dicho CSS se aplicará todos los elementos div.

Lo suyo es que apliques el CSS al id o bien mediante una clase.


946
Se pueden, y están pensados para combinarse, ya que cada cosa se ocupa de cosas distintas. Ninguna sustituye a la otra.

PHP y JavaScript son cosas completamente distintas a HTML y CSS.

PHP y JavaSCript son lenguajes de programación (HTML y CSS no).

JavaScript sirve para dar funcionalides a la página web, en modo local. Es decir, el programa se ejecuta en el ordenador de la persona que accede a la página.
Ofrece un montón de funcionalidades, las más comunes es dar funcionalidad a botones de formularios pero las posibilidades pueden ir muchísimo más allá, incluso programar videojuegos.

PHP en cambio, no se ejecuta en el ordenador del usuario que entra en la web, se ejecuta en el servidor que alberga dicha página web. También ofrece muchísimas posibildades, la más habitual y "básica" es usarlo para comunicarse con bases de datos.

Mira, para ver mejor las diferencias. Ahora mismo, mientras escribo este mensaje en el area de texto, tengo debajo dos botones, uno llamado Publicar que será el que utilizaré  para publicar este mensaje aquí en el foro.

Para este botón se necesita combinar TODAS las "ciencias" que hemos mencionado.

HTML se encarga de indicar a la página que quiere crear un botón con un determiando texto, usando la etiqueta HTML:
<input type="submit" value="Publicar" onclick="nombreDeFuncionJavaSCript()"/>

CSS se encarga de indicar a la página, donde colocarlo y que aspecto tendrá: tamaño, color, como alterar su aspecto cuando el mouse pasa por encima...

JavaSCript se encarga de indicar a la página que va a ocurrir cuando hagamos click en este botón. Para ello, en el atributo onclick de la etiqueta HTML <input/>, se pone el nombre de la función (programita JavaScript escrito por separado) que queremos ejecutar al pulsar el botón.
Esta función lo que hará es coger el texto escrito por el usuario y enviarlo donde el programador haya decidido.

PHP, en algún momento, recibirá este texto y lo que hará será construir una query (consulta MySQL) para enviar dicho texto a la base de datos que guarda todos los mensajes del foro.
Una vez enviado, PHP volverá a utilizar otras query para recuperar el mensaje que se ha guardado en la base de datos y mostrarlo en la web para que todo el mundo pueda verlo

Como ves, todos trabajan en equipo, ninguna "ciencia" sustituye a la otra. Todas tienen unas funciones concretas y es al trabajar en equipo, cuando se crea una sinergia que hace que las páginas web posean funcionalidades increibles, a pesar de que en su momento, hace ya algunas decadas, fueron concebidas para mostrar texto y poco más...  ;)

947
Prueba a poner Luis entre comillado.

Es decir, el error que te da es que interpreta que Luis es una variable.
Si lo entrecomillas --> "Luis" , entonces supongo que entenderá que le estás pasando un String.

Los valores String van con doble comilla --> "Pedro"

Los valores char, van con comilla simple --> 'K'

No uso BlueJ, pero supongo que el problema viene por esto que comento.

948
Pues eso, tras haber actualizado a Windows Creator Update, me he dado cuenta de que cuando lanzo alguna aplicacion Java que use Swing, se produce un error y no funciona.

Ocurre igual si la lanzo desde Eclipse que desde un .jar ejecutable.

Al hacerlo, la app no funciona y se crea un .log de error donde el JRE advierte de problemas con frame problemático y la libreria D3d que ha fallado.

No soy el único, veo gente reportando el mismo problema que yo, tanto con libreria D3d como con OpenGl, pero sin respuesta útil.

¿Alguien sabe algo?
He probado a actualizar el JDK (y el JRE) pero sin éxito.

**************
Copón, acabo de postear el problema y ya he dado con la solución...
Me ocurría porque tenía activo en segundo plano el MSI Afterburner+RivaTurner... ha sido cerrarlos y ya funciona..., el caso es que antes no me ocurría, algo ha cambiado este Creator Update respecto a la aceleración 3D en el escritorio.
Por ejemplo también me he percatado que si abro LibreOffice, me muestra en pantalla lel overlay de estadisticas de RivaTurner como si se tratase de un juego 3D..., cuando estoy abriendo un simple Excel por ejemplo..

949
Esto es como todo, hay que empezar por lo más básico...
Supongamos alquien que quiera aprender a construir un avion con sus propias manos... tendrá que aprender matemáticas desde el nivel más básico para que al menos el diseño del avión tenga dos alas de la misma medida....hasta el nivel más avanzadoaplicadas a las leyes de la física para calcular la inclinacion de la alas de manera que den un empuje adecuado para sostenerse en el aire según el peso del avión.
Tendrá que aprender mecánica para accionar palancas, química para el combustible y los sistemas hidráulicos, electrónica para los sistemas aviónicos, telecomuniaciones para la radio y sistemas de radar,....

Pero antes de aprender todo eso....si quiere armar el avión con sus propias manos...., lo primero que tendrá que aprender será como apretar tornillos, como pelar cables eléctricos, como cortar paneles de madera y usar cola para pegarlos....

A lo que voy es que si queremos aprender a crear nuestros propios programas...hay conceptos avanzados que comprender como polimorfismo, herencias de clases.... pero antes de eso, hay que comprender conceptos básicos: que es una variable, que es una constante, que es una estructura condicional, un bucle,...que tipos de datos básicos hay: enteros, reales, booleanos,...

Así que obviamente, hay que empezar desde el principio, y lo ideal es empezar practicando con pseudocódigo.
PSeudocódigo es una forma de "simular" un lenguaje de programación, sin tener que aprender las normas, sintaxis y peculiaridades de un lenguaje "real" como puede ser Java, C, Pascal...
PSeudocódigo es útil para iniciarse en la lógica de la programación y aunque al principio puede resultar aburrido ya que no te proporciona nada funcional porque no es un código que puedas ejecutar en un ordenador sino tan solo texto (aunque existen programas que interpretan pseudocódigo), es necesario para coger uan base mínima con la cuál ya si luego encarar a escribir código real.

Esta web tiene un curso de pseudocódigo
Por supuesto lo recomendable es leerlo desde el principio hasta el final, pero en el caso de que los primeros temas te resulten demasiado abstractos y te hagan sentir impaciente...

... puedes empezar desde la entrega num 22 que ya entra un poco más directamente en materia....y más adelante no dejar de leer los temas anteriores pues son igualmente valiosos.

Cuando gracias a practicar con pseudocódigo tengas claro que es una variable, los tipos de datos, el flujo del programa, una estructura condicional, un bucle...
entonces puedes empezar a usar esa misma lógica aprendida, pero ya codificada en un lenguaje de programación real.

950
Hola

El nombre de la variable/objeto que ponemos entre parentesis, puede ser un nombre cualquiera. No tiene porque coincidir con el nombre del atributo/variable/objeto perteneciente a otra clase.
Es un nombre que tú eliges en el momento de escribir el código de ese método, y dicho nombre solo afecta al código que hay dentro de ese método, no tienen nada que ver con como se llame ese objeto/variable en otras partes del código.

Ese nombre que ponemos entre parentesis, es algo así como un "alias".
Cuando decimos...

Código: [Seleccionar]
public void setMatricula (String valorMatricula)
...lo que estamos diciendo es que este método ha de recibir un objeto de tipo String, el cuál no tenemos ni idea de como se llama en la parte del código donde se haya creado originalmente..., pero dentro de este método lo vamos a llamar "valorMatricula" y ese será el nombre que usaremos para operar con él, repito, dentro de este método.

Por eso el código compila y funciona exactamente igual con cualquiera de estas declaraciones:
Código: [Seleccionar]
public void setMatricula (String valorMatricula)
Código: [Seleccionar]
public void setMatricula (String a)
Código: [Seleccionar]
public void setMatricula (String tururu)
Repito, no importa como se llame ese objeto en otras partes del código, tú le pones un nombre esocgido por tí, un "alias", y con ese nombre operas con él dentro de ese método.

ESto no es solo ventajoso, sino necesario... ya que lo habitual en realidad es que un programador escriba métodos que vayan a ser usados en decenas de programas distintos.
Sería absurdo, y costoso, si para cada programa concreto hubiera que reescribir el método para adecuar los nombres de las variables/objetos ha dicho programa.

Es más, un método es habitual que, dentro de un mismo programa, reciba objetos del mismo tipo pero con distintos nombres
Por ejemplo, imágina un método que reciba objetos de una clase llamada Circulo y calcule el area..
Código: [Seleccionar]
public double calcularArea(Circulo c)Este sería un método que se puede usar en distintos programas y que además en un mismo programa puede estar recibiendo objetos Circulo con distintos nombres:
Circulo c1;
Circulo c2;
Circulo c3;
.....
Circulo c10;
...
Imagina que tenemos 10 objetos circulos, o 100, o 10000....¿debería escribir 10000 métodos cada uno con el nombre del objeto Circulo correspondiente entre parentesis?
Sería demencial..
Lo escribo una sola vez, le pongo el nombre que a mi me de la gana, ya sea "c", ya sea "circulin"....
y me vale para cualquier objeto Circulo, se llame como se llame,...porque no me importa como se llame, solo me importa el "alias" que yo le he puesto dentro de mi método.

**************

Sobre tu segunda pregunta..

Citar
Y por que no se iguala con el parametro como veniamos haciendolo??

Creo que te refieres a por qué no usamos el operador "=" en esta linea.
Código: [Seleccionar]
public void setMatricula (String valorMatricula) { vehiculoTaxi.setMatricula(valorMatricula); }
Y si no es a esto a lo que te refieres, igualmente lo explico un poco por si a alguien le puede servir.

El objeto vehiculoTaxi, al ser de la clase Taxi, tiene un atributo matricula declarado así:
private String matricula;
Al estar declarado como private, cuando estamos escribiendo código "dentro" de su clase, sí podemos acceder directamente a su atributo y usar el operador de asignacion "=".
Código: [Seleccionar]
matricula = valorMatricula;
Pero en este caso, estamos escribiendo código "fuera" de su clase, pues estamos codificando la clase TaxiCond.
Esto significa que no podemos acceder directamente al atributo matricula del objeto vehiculoTaxi.
La única forma de acceder a este atributo, es mediante su set (vehiculoTaxi.setMatricula(String)) para modificarlo y mediante su get ((vehiculoTaxi.getMatricula()) para recuperar su valor.

Si en vez de private, hubieramos declarado el atributo matricula como public:
public String matricula;

entonce si podríamos acceder directamente a este atributo desde cualquier otra clase y utilizar el operador de asignacion "=". Sería así:
Código: [Seleccionar]
vehiculoTaxi.matricula = valorMatricula;
Si quisiéramos, podríamos hacerlo así... pero no es buen apráctica hacer esto.
Lo recomendable, lo ideal, es declarar los atributos como private y acceder a ellos mediante sus setters y getters.

La intención de esto es proteger y controlar el acceso a los atributos y además permite dotar de más funcionalidades.
En estos ejercicios, son código sencillos para ir aprendiendo y a veces no se percibe todo el potencial.
Pero por ejemplo, imagina que nosotros queremos controlar que solo entren matriculas que sean válidas, es decir que tengan un formato concreto.
Por ejemplo la matricula 1234-BFN sería valida según el formato europeo, pero la matricula 12-B-34-FN no sería válida para un vehiculo en Europa.
Entonces, en nuestro método setMatricula(String valorMatricula), podemos añadir todo el código que creamos necesario para comprobar que el String que hay dentro de valorMatricula tiene un formato válido.
Si lo tiene, entonces lo aceptamos y se lo asignamos al atributo matricula de nuestro objeto Taxi.
Pero si no lo tiene, entonces lo podemos rechazar y lanzar un mensaje al usuario advirtiendo que la matricula introducida, no es válida y no ha sido aceptada.

Esto no podríamos hacerlo mediante una simple asignación con "=", así que declarar el atributo como public es abrir la puerta a que luego otro programador no haga un validación de datos correcta antes de aceptarlos.
Declarando como private y obligando a utilizar nuestros setters, los cuáles si hemos incluido código para validar la "calidad" de los datos recibidos, evitamos que otro programador pueda aceptar datos no válidos.

Cuando se avance en programación, habrá ciertas situaciones donde no nos convenga declarar un atributo como private y tengamos que "relajar" la restricción declarandolo como "protected" o tal vez incluso como "public".

Pero será en casos muy concretos. La "norma" es declararlos siempre como private, y luego si se presenta la necesidad, pues subir el nivel de acceso, si no queda más remedio.

951
Aprender a programar desde cero / Re:Ejercicio (CU00665B)
« en: 19 de Marzo 2017, 00:44 »
Hola Luis.
Supongo que ya sabes que este programa no funciona porque no creo que ningún compilador lo haya dado por bueno.
Vamos por partes

Sobre los atributos, a parte del ArrayList has incluido un String para el nombre de la lista.
Este atributo no se pide en el enunciado del ejercicio y no es necesario crearlo. Si quieres añadirlo tú, por voluntad propia, pues bueno... pero sobre todo que tengas claro que no es necesario para este ejercicio.
Podría ser útil en otra situación, por ejemplo un programa que gestionase varias listas de cantantes, entonces si sería útil un atributo que las identificase para distinguirse unas de otras.

Sobre el constructor...
la tercera línea donde llamas al método .size(), además de erronea (no existe el atributo listadenombresList) es innecesaria.
Primero porque si la lista está recien inicializada, su size (tamaño) es obviamente "cero" elementos.
Sea cero o no, en ese momento no necesitamos saber su size().
Y además, tal y como llamas al método, te está devolviendo un valor que no estás recogiendo en ningún sitio, con lo cuál, ese valor desaparece en la siguiente línea.
Este metodo tiene sentido llamarlo en un bucle, en un if o bien guardando su valor en una variable de tipo int, por ejemplo:
Código: [Seleccionar]
int tamanoLista = listadenombres.size();
Así que no es necesaria esa tercera línea del constructor.
Por cierto, aunque a muchos compiladores les dará igual y como mucho se quejarán un poquito..., acostumbrate a usar las convenciones Java a la hora de poner nombres a variables y clases.
Es de uso y costumbre usar la notacíon CamelCase, es decir, los nombres de variables o clases compuestas de varias palabras, cada palabra se distingue de la otra poniendo la primera letra en mayúsculas.
Esto es así tanto para las clases como para las variables (lo cual incluye a objetos y atributos de clases, que son en realidad variables)
La diferencia es que las clases empiezan por mayusculas y las variables en minuscula, aunque el resto de palabras que componen el nombre si empiezan en mayúscula.
Ejemplo.
Nombre de clase ---> EstoEsUnaClase
Nombre de variable, atributo u objeto ----> estoEsUnaVariable

Se desaconseja usar abreviaturas o guiones bajos para separar palabras, por ejemplo:
lista_de_nombres;
Este tipo de notación si se usa en C/C++, pero no es costumbre usarla en Java...aunque funcionar, funcionará...


Siguiendo con el constructor, fíjate que el enunciado indica que al inicializarse el objeto de la clase ListaCantantesFamosos, ya ha de incluir tres nombres  (Miguel Bose, Rafael, Juanes).
Esto pues, ha de realizarse también en el constructor.
Es decir, después de la segunda línea donde incializar el ArrayList, deberías incluir tres líneas más, cada una llamando al método .add("nombre de un famoso"); para incluir esos tres nombres que solicita el enunciado.

También puedes inicializar el ArrayList pasandole a su constructor un Collection que contenga esos tres nombres. Ver documentacion Java.
Pero ahora no vale la pena complicarse la vida con esto.


Vale, terminado el constructor, hay que pensar que métodos necesitará la clase ListaCantantesFamosos para cumplir lo que se nos pide en el enunciado.

Tu método para añadir un nuevo nombre a  la lista es correcto y no necesita ser modificado. (excepto lo de usar la notación CamelCase que es estila en Java)


El enunciado además pide que, tras añadir dos nombres más a la lista, se muestre un listado con todos lo nombres.
Tú has hecho una movida rara dentro del main()..  :o creando un nuevo objeto Listadenombres lista1...el cuál es imposible porque listanombres es un atributo de la clase ListaCantantesFamosos, no es una clase con la que poder crear nuevos objetos.

Luego veo objetos entrada1, entrada2, entrada3..  que no se sabe de donde salen...y que poseen un supuesto método getEntrada()...

Así que olvida todo eso que has hecho. Lo ideal es crear otro método más llamado por ejemplo:
public void listarNombres()
...que se encargará de recorrer uno a uno los elementos del ArrayList mediante un bucle for (o un while, pero un for quizás sea más apropiado) y escribiendolos en pantalla.
Intenta codificar tú este método, si no te sale lo corregimos aquí en el foro.


Tras esto, ya en el main(), solo quedaría:

inicializar el objeto ListaCantantesFamosos, por ejemplo:
Código: [Seleccionar]
ListaCantantesFamosos listaCantantes = new ListaCantantesFamosos("Nombre de Lista);
//Recordemos que el nombre de lista es un atributo que lo añades tú, si lo deseas...
//no forma parte del enunciado original

pedir dos nombres por teclado que agregaremos a la lista mediante el método
Código: [Seleccionar]
listaCantantes.addNombre(String)
Para pedir los nombres solo necesitas crear un objeto Scanner y un objeto String para guardar el nombre que introduzca por teclado.
Aunque pediremos dos nombres, no necesitas dos objetos String. Te basta con uno:
pides nombre y lo guardas en el String..., lo añades al arraylist,
... pides otro nombre y lo guardas en el mismo String (ya no importa que se borre el nombre anterior).. lo añades...

De hecho, se puede hacer sin usar ningún objeto String, pero hazlo usando un objeto String, y luego veremos como se puede hacer sin tener que usarlo.

y por último mostrar el listado llamando al método:
Código: [Seleccionar]
listaCantantes.listarNombres();


Como ves, hay bastante que corregir en tu ejercicio. Pero oye, no te desesperes, debemos poner en valor que lo has intentado y te has esforzado en escribir bastante código según te suponías como iba a funcionar.
Conozco gente que lleva tiempo estudiando esto en el institituo...y aún se quedan en blanco sin saber qué escribir en ejercicios similares.

Esto de la programación resulta algo confuso al principio, pero en poco tiempo y cometiendo errores inevitables...acaba resultando tan lógico y sencillo casi como el hablar diario je je

952
Tienes que crear una clase Atleta con los atributos indicados en el ejercicio.

Luego, otra clase será Competencia la cuál uno de sus atributos ha de ser un arreglo para almacenar objetos de la clase Atleta.

Puesto que una de las opciones que se han de dar al usuario es la de "Registrar Atletas", interesaría que el arreglo fuera por ejemplo un ArrayList, al cuál se le pueden ir añadiendo nuevos elementos de forma dinámica y no hay que establecerle un tamaño fijo (puesto que no sabemos cuantos atletas vamos a registrar)
Así que la clase Competencia, uno de los métodos que tendrá, ha de permitir recibir un objeto Atleta y añadirlo a este arreglo.

La clase Principal simplemnte tendría que inicializar una objeto de la clase Competencia y mostrar un menú con las distintas opciones que pide el ejercicio.

Básicamente solo hay que saber definir clases y recorrer arreglos para extraer las distintas informaciones.


Comienza posteando aquí la clase Atleta, que es la sencilla.
Luego propón la clase Competencia y podemos ir comentando que métodos y atributos necesitará para cumplir los objetivos del ejercicio.



953
Para determinar si un campo de texto esta vacío yo suelo preguntarlo así:

Código: [Seleccionar]
if (campoTexto.getText().isEmpty())
{
     //El campo esta vacio,
}
else
{
    //El campo tiene texto
}

954
Usa un array de String de 4 elementos, que son los 4 datos que necesitas.
Cada elemento del array tiene un número de indice, en este caso al tener 4 elementos, los indices serían: 0, 1, 2 y 3
En el elemento 0 puedes meter el nombre, en el elemento 1 los apellidos, en el 2 la educación y en el 3 los años.

A dichos elementos puedes acceder, tanto para leerlos como para escribirlos, indicando directamente el numero de indice deseado o bien usando un bucle.

Empieza a escribir código, postealo aquí y vamos viendolo.

955
De todo un poco... / Re:Consulta de HTML
« en: 15 de Noviembre 2016, 12:17 »
Supongo que la pregunta es si Dreamweaver es una buena herramienta para aprender HTML.

Pues la verdad, no lo sé, porque nunca lo he usado. Supongo que sí sirve, pues a parte de su entorno y facilidades visuales, se puede teclear código HTML.

Sin embargo, no es necesario usar una suite tan completa.
Yo, tanto para aprender en el pasado como hoy dia para hacer mis paginitas, uso editores de texto plano como: Notepad++, BlueFish o Brackets (este último es mi favorito)

Todos son más que suficiente para teclear HTML y CSS u otros lenguajes de marcas (XML), así como también lenguajes de programación (C, PHP, Java, JavaScript, Python....)

Yo también recomiendo empezar con un editor de texto plano como los que he enumerado.

956
Me temo que no puedes hacer eso en un switch.

El principal problema es que solo preguntas por una variable, por "multi" y esta solo puede almacenar un valor. No hay forma de que solo con "multi"el programa pueda saber que un numero es multiplo de 2 y de 5, como es el caso de cuando introducimos un 10

Yo creo que lo ideal sería darle otro enfoque al código, de hecho, se puede hacer lo mismo sin necesidad de switch ni tantas variables.

Se puede preguntar directamente el resultado de la operacion modulo y lanzar mensajes segun corresponda.
En todo caso, podemos usar una variable booleana para controlar si el numero introducido es multiplo de alguno de los vaores 2,5 y/o 7
Algo así:

Código: [Seleccionar]
main()

{
   char w='S';
   boolean sinMultilpos = true;
   
   while ((w=='S')||(w=='s'))
   {
   system ("cls");   
   cout <<"introduzca un numero para determinar si";
   cout <<"\n es multiplo de 2 , 5 o 7: ";
   cin >>a;
   
      if (a%2 == 0)
      {
         sinMultiplos=false;
         cout<<"\t \n el numero " <<a << " es multiplo de 2";
       }
      if (a%5 == 0)
      {
         sinMultiplos=false;
         cout<<"\t \n el numero " <<a << " es multiplo de 5";
       }
      if (a%7 == 0)
      {
         sinMultiplos=false;
         cout<<"\t \n el numero " <<a << " es multiplo de 7";
       }

       if (sinMultiplos)//Si esto es true, es que no se han encontrado multiplos
         cout << "\n el numero no es multiplo de 2, 5 o 7...";

      cout << "\n\ndesea continuar (s o S para si)\n";
      cout << "cualquier otra tecla para salir... ";
      cin >> w;
    }
}


No lo he ejecutado, pero supongo que funcionaría...o al menos sirve para dar una idea de como simplificar el proceso.

Si por algún motivo estuvieras obligado a usar un switch o una estructura determinada (posibles exigencias del profesor...) ya habría que pensar algo más elaborado

957
Simplemente añade un else final sin ninguna condición a evaluar.

Es decir, viendolo en pseudocódigo cutre, que por cierto suele servir para entender mejor lo que hacemos en lugar de pensar en sentencias Java en concreto....

Si se ha introducido Java ---> hago lo que corresponda con Java
si no --> (no es Java, voy a preguntar por otra posibilidad)
si se ha introducido PHP  ---> hago lo que corresponda con PHP
si no --> (no es Java ni PHP, voy a preguntar por otra posibilidad)
si se ha introducido MySQL  ---> hago lo que corresponda con MySQL
si no --> (no es Java ni PHP ni MySQL, no quedan posibilidades por preguntar, asi que...)
indico mensaje de error --> porque el curso introducido no existe


O sea, que basta con que pongas un else final que ejecuta un showMessageDialog de error o lo que necesites hacer si no se ha encontrado un curso coincidente con el introducido.


Por cierto, hacerlo con if... else es perfectámente válido y correcto.
Pero imagina que en lugar de 3 posibilidades, tuvieras que preguntar por unas cuantas más.
Tanto if..else sería un peñazo escribirlos y el código quedaría feo...
Pero en Java, desde la versión JDK 7, se puede usar la sentencia switch...case para comparar Strings (antes solo admitía numeros y chars..)
Este cambio es muy útil para no volverse loco con tantos if..else y que el código quede más legible.
Puedes ver un ejemplo en la web de documentación de Oracle

958
Lo primero es entender que es la Sucesión de Fibonacci...que no es nada complicado.
Simplemente es una sucesión de números en la que cada cifra, es la suma de sus dos anteriores.

Entonces, tienes que escribir un método que reciba un número por teclado y escriba la sucesión hasta el número indicado.
La sucesión siempre empieza por : 0,1,1,...
y terminará cuando alcance una cifra igual o menor, a la cifra indicada por teclado.

Es decir, si por teclado introducen el número 13, la sucesión será...
0,1,1,2,3,5,8,13.

Si introducen el número 15, la sucesión será exactamente la misma, porque la cifra siguiente a 13, en Fibonacci, sería el 21 (13 + 8 = 21) y por lo tanto supera la cifra indicada por teclado.

Sabiendo ahora en que consiste la sucesión de Fibonacci y que resultado ha de realizar el método fibo en tu código Java, ahora te toca a tí, pensar y proponer una solución para lograrlo.

Con lo que propongas la gente del foro te ayudará a mejorarlo, corregir lo que falle o explicar lo que sea....pero escribir el código para que lo copies y ya está...., no, simplemente porque eso no te ayudará para nada.
De hecho, si buscas por Google, encontrarás este ejercicio ya resuelto en multitud de sitios, pero mejor primero intentarlo por tu cuenta.

959
Aprender a programar desde cero / Re:Vectores en Java #2
« en: 31 de Agosto 2016, 12:12 »
Este es mi codigo de la clase vector, ,me presenta problemas con los metodos, eliminar, buscar un valor, reemplazar o buscar una posición pues soy nueva en este tema. Gracias por la ayuda,

Hola...
Primero, el atributo "posicion" creo que no es necesario. Se puede hacer todo lo que se pide sin su ayuda.

Segundo, no hay ningún método eliminar().... ni podría haberlo ya que no podemos eliminar elementos de un vector una vez creado. Podemos cambiar el valor de los elementos, pero no añadir o eliminar. (Para esto se usan clases más avanzadas como los ArrayList)
Lo de cambiar el valor, podría ser lo del método reemplazar().... pero en el enunciado que pusiste no veo que esto se esté pidiendo.

Sobre el método buscarValor()
Código: [Seleccionar]
public void buscarValor(int valorDado)
  {
    int posicion=-1;
  for(int i=0;i<vector.length; i++)
    {
  valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
      if(vector[i]==valorDado)
      {
      posicion=i+1;
      JOptionPane.showMessageDialog(null,"El valor "+valorDado+" está en la posición "+posicion);
    }
      else
      {
     JOptionPane.showMessageDialog(null,"El valor "+valorDado+" no está en el vector");   
      }
   }     
  }

Si lo declaras así...
Citar
public void buscarValor(int valorDado)
...implica que cuando en el código hagamos la llamada a este método, obligatoriamente habrá que pasarle un valor entero, ya que hemos indicado que tiene un parámetro llamado "valorDado", es decir, el valor que queremos buscar.
Esto sería una forma válida de hacerlo, pero dentro del método resulta que estamos pidiendo de nuevo ese valor mediante diálogos de texto.
Por lo tanto es incongruente, así que hay que elegir de una manera u otra. Si vamos a usar diálogos texto para pedir el valor, lo mejor es declarar el método sin indicar parámetros y dentro del método, declarar una nueva variable para recoger el valor que introduzca el usuario mediante los diálogos:

Citar
public void buscarValor()
{
      int valorDado;

Luego, la línea:
Citar
int posicion=-1;

Hemos dicho que el atributo posicion no lo vamos a necesitar, asi que esta línea se puede borrar.
De hecho, lo que en realidad estabas haciendo en esa línea era declarar una nueva variable llamada "posicion", que nada tiene que ver con el atributo llamado "posicion".
Se llaman igual, pero son dos elementos distintos y Java los diferencia perfectamente.
En cuando pones int delante de una variable (int, o byte, o char, o float, o lo que sea...) la estás declarando como nueva, sin que tenga nada que ver con cualquier otra variable ya creada.
Si quisieramos haber utilizado el atributo "posicion" de la clase Vector, te habría bastado con poner su nombre tal cual:
Citar
posicion=-1;
O también para asegurarte y que quede bien clarito que te estás refiriendo al atributo de clase y no a otra variable, se puede usar también la palabra "this"
Citar
this.posicion=-1;
Pero en cualquier caso, no necesitamos este atributo para nada...así que simplemente eliminamos dicha línea.

Ahora viene el bucle for
Código: [Seleccionar]
for(int i=0;i<vector.length; i++)
    {
  valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
      if(vector[i]==valorDado)
      {
      posicion=i+1;
      JOptionPane.showMessageDialog(null,"El valor "+valorDado+" está en la posición "+posicion);
    }
      else
      {
     JOptionPane.showMessageDialog(null,"El valor "+valorDado+" no está en el vector");   
      }
   }   

El for en principio está bien declarado, que vaya desde el principio hasta el final del vector ya que querremos buscar el valor que nos indique el usuario. Usaremos la variable "contador" del bucle for (la variable "i") como indice para señalar cada elemento del vector. Por eso no necesitamos ningún atributo "posicion".

Pero hay un error de lógica, estamos pidiendo al usuario el valor a buscar DENTRO del bucle for.
Esto implica que vamos a pedir este valor tantas veces como mida el vector. Si el vector tiene dos elementos, lo pediremos dos veces.
Si tiene 100 elementos, pediremos el valor 100 veces....
Esto no es nada lógico. Lo que queremos es pedir el valor UNA sola vez, y luego buscar en el vector a ver si existe.
Por lo tanto, la línea donde pedimos el valor a buscar, tiene que ir antes del bucle for

Código: [Seleccionar]
valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
for(int i=0;i<vector.length; i++)
    {
      if(vector[i]==valorDado)
      {
      posicion=i+1;
      JOptionPane.showMessageDialog(null,"El valor "+valorDado+" está en la posición "+posicion);
    }
      else
      {
     JOptionPane.showMessageDialog(null,"El valor "+valorDado+" no está en el vector");   
      }
   }

Ok, ya tenemos el valor y ahora recorremos el vector, elemento a elemento, a ver si coincide con el valorDado.
Vamos a eliminar las líneas en donde estábamos usando la variable/atributo "posicion" y a modificar el código para hacer lo mismo, pero sin este atributo.
Código: [Seleccionar]
valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
for(int i=0;i<vector.length; i++)
    {
      if(vector[i]==valorDado)
      {
      JOptionPane.showMessageDialog(null,"El valor "+valorDado+" está en la posición "+(i+1));
    }
      else
      {
     JOptionPane.showMessageDialog(null,"El valor "+valorDado+" no está en el vector");   
      }
   }

Ahora parece que está todo correcto, PERO, si ejecutasemos este programa nos encontraríamos con un comportamiento extraño.
El bucle for, no se va a detener si encuentra una coincidencia en el vector con el elemento dado, seguirá buscando.
De hecho, tal y como está escrito, nos enseñará un mensaje por cada elemento del vector, pues cada vez que compara lanza un mensaje u otro.
Si tuvieramos 50 elementos en el vector y el valor que hemos introducido coincide con dos de ellos, este programa nos mostraría 50 mensajes: 2 diciendo que ha encontrado coincidencia y otros 48 diciendo que no se encuentra el valor dado.
Pruébalo para que veas como ocurre esto. (No hace falta 50 elementos, hazlo con 5 ó 10 como mucho...)

Este comportamiento no es lógico y hay que modificarlo. Y para modificarlo, antes tenemos que decidir qué queremos que haga este método.

¿Queremos que el bucle se detenga en cuánto encuentre una coincidencia y deje de buscar?De este modo no sabremos si otros elementos del vector también coinciden.

¿O queremos que siga buscando y nos siga avisando si encuentra más coincidencias? Porque el valor dado podría coincidir con varios elementos del vector y de este modo tendremos un mensaje por cada coincidencia.

¿O queremos que solo salga un único mensaje cuando termine de buscar, pero informando de todas las posiciones que coinciden con el valor dado, ya sea 1 posicion, 5 o las que sean....

El enunciado no especifica esto y por lo tanto podemos escoger nosotros cómo queremos hacerlo.
A mi me gusta más la última opción, un único mensaje final con todas las coincidencias que se hayan podido encontrar. (tu luego elige la posibilidad que prefieras)


Para hacer esto, podemos crear una variable de tipo String donde cada vez que encontremos una coincidencia, le añadimos la posición donde se ha encontrado el valor dado.
Y así al final de todo, cuando el bucle termine, mostramos este String en pantalla con todas las coincidencias.
Ponemos ya el código completo:
Código: [Seleccionar]
public void buscarValor()
{
    int valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
    String resultado = "El valor " + valorDado + " se ha encontrado en posiciones: ";
    for(int i=0;i<vector.length; i++)
    {
        if(vector[i]==valorDado)
        {
    resultado += (i+1) + " ";//Concatenamos posicion encontrada y un espacio en blanco por si se concatenan más valores
}
    }
    JOptionPane.showMessageDialog(null, resultado);
  }

Y con este código, ya deberíamos obtener un único mensaje con todas las posibles posiciones donde hayamos encontrado el valor, ya sea solo 1 vez, o 5 o 100000 veces...
Pero aún queda un detalle...¿qué pasa si no encontramos ninguna coincidencia?
Si esto ocurre, saldrá en pantalla el contenido del String resultado pero sin ninguna posicion que mostrar, y esto no queda elegante....
Tendríamos que preparar un segundo mensaje para este caso y mostrar un mensaje u otro según si se encontró alguna coincidencia o no.

Código: [Seleccionar]
public void buscarValor()
{
    int valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
    String resultado = "El valor " + valorDado + " se ha encontrado en posiciones: ";
    for(int i=0;i<vector.length; i++)
    {
        if(vector[i]==valorDado)
        {
    resultado += (i+1) + " ";//Concatenamos posicion encontrada y un espacio en blanco por si se concatenan más valores
}
    }
    if (...)
        JOptionPane.showMessageDialog(null, resultado);
    else
         JOptionPane.showMessageDialog(null,"El valor "+valorDado+" no está en el vector");
  }

Con este if, según si se cumple una condición o no, mostraremos un mensaje u otro.
¿Y qué condición se ha de cumplir? Esto de momento te lo dejo para que lo pienses tú, a ver que se te ocurre...a ver de que manera puedes controlar el hecho de si se ha encontrado algo, o no se ha encontrado nada.
Puede que necesites añadir más lineas u otras variables de apoyo...

Sobre el siguiente método, el de buscarPosicion(), tu código tiene más o menos problemas que el anterior: se usa una variable/atributo "posicion" que no es necesaria, indicamos que el método recibe como parámetro la posición a buscar pero luego igualmente la pedimos al usuario con un diálogo de texto, y dicha petición está dentro del bucle y por lo tanto la petición se repetirá muchas veces, cuando solo queremos pedir el dato una única vez.

Intenta corregirlo con lo que he explicado y comparte por aquí de nuevo tu código y tus dudas.
Un saludo.

960
Aprender a programar desde cero / Re:Vectores en Java
« en: 28 de Agosto 2016, 00:01 »
Hola y bienvenido.

Este foro es para presentaciones, te sugiero que publiques tu duda en esta sección.

El ejercicio que te han propuesto parece lioso porque el enunciado es extenso y pide muchas cosas, pero en realidad no es tan complicado.

Eso sí, hay que ir por partes y de momento céntrate solo en crear la clase Vector.

Crea un nuevo tema en la otra sección y publica ahí el código que lleves escrito para la clase Vector y especifica qué problemas estás encontrando.
Tras eso, le podremos meter mano a las siguientes clases.

Páginas: 1 ... 43 44 45 46 47 [48] 49 50

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