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.


Temas - Dimitar Stefanov

Páginas: 1 ... 3 4 5 6 7 [8] 9 10 11 12 13 14
141
Buenas tardes.

Procedo a la exposición de una posible soluciones de los ejercicios de la entrega CU01163E del curso JavaScript desde cero.

Primer ejercicio:

Citar
EJERCICIO 1

Crea un script donde se calcule el tiempo en minutos entre que se formula primera petición al usuario y este responde, y entre una segunda petición al usuario y este responde. Ejemplo:

Introduzca su nombre: Alfredo >> Introduzca su país: Colombia >> Han pasado 0.122 minutos entre su primera y segunda respuesta.

Otro ejemplo: Introduzca su nombre: Juan >> Introduzca su país: Chile >> Han pasado 0.73 minutos entre su primera y segunda respuesta.

El codigo:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

window.onload = function(){

var pregunta = confirm('Al pulsar aceptar comienza a contar el tiempo. Sabes cuál es la única palabra (en español) que contiene las 5 vocales"?');

if(pregunta==true){
var primeraToma = Date.now();
}else{};

var pista = ["M","u","r","c","i","e","l","a","g","o"];
var ayuda = ' ';
i = 0;

do{
var contestacion = prompt('Pon la respuesta aquí:');
contestacion = contestacion.toLowerCase();
if(contestacion!='murcielago' && i<pista.length-1){
ayuda = ayuda+pista[i];
alert('Respuesta Incorrecta!\nEmpieza por: '+ayuda);
i++;
}else if(contestacion!='murcielago'){
alert('La respuesta es: '+ayuda+pista[i]);
i++;
}
}while(contestacion!='murcielago' && i<pista.length);

if(contestacion){
var segundaToma = Date.now();
}

resultado = (segundaToma-primeraToma)/1000;

alert("Has contestado en: "+resultado+" segundos!!!");
if(resultado<10){
alert('Eres un crack!!!');
}else if(resultado>10 && resultado<20){
alert('Eres un poco lento');
}else{
alert('Muy lento');
}
}

</script>
</head>
<body>
</body>
</html>

El segundo ejercicio:

Citar
EJERCICIO 2

Crea un script donde pida al usuario que introduzca una primera fecha (fecha1) en formato dd-mm-yyyy, y una segunda fecha en el mismo formato y calcule los días que han pasado entre las dos fechas . Ejemplo: Introduzca la fecha 1: 05-09-2076 >> Introduzca la fecha 2: 09-09-2076 >> Entre las 00:00 horas del primer día a las 00:00 del segundo hay 4 días.

El código:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<style type="text/css">
#principal{
text-align: center;
padding: 100px;
font-size: 24px;
}
</style>
<script type="text/javascript">

var primeraEntrada = prompt('Entra una fecha en formato: aaaa-mm-dd');
primeraEntrada = primeraEntrada+'T00:00:00';
primeraEntrada = Date.parse(primeraEntrada);

var segundaEntrada = prompt('Entra una segunda fecha en formato: aaaa-mm-dd');
segundaEntrada = segundaEntrada+'T00:00:00';
segundaEntrada = Date.parse(segundaEntrada);

if(segundaEntrada<primeraEntrada){
var resultado = ((((primeraEntrada - segundaEntrada)/1000)/60)/60)/24;
}else{
var resultado = ((((segundaEntrada - primeraEntrada)/1000)/60)/60)/24;
}

if(resultado == 1){
resultado = 'Entra las dos fechas ha pasado: '+resultado+' día';
}else{
resultado = 'Entra las dos fechas han pasado: '+resultado+' días';
}

window.onload = function(){
principal.innerHTML = resultado;
}

</script>
</head>
<body>
<div id="principal"></div>
</body>
</html>

Gracias.

142
Buenas noches.

Pongo una solución del ejercicio CU01162E del curso JavaScript desde cero.

Citar
EJERCICIO

Crea un documento HTML que conste de un título h1 con el texto <<Calendario>>, y un div central de 400 por 400 px con el borde marcado y márgenes de 100px en todas direcciones. Dentro del div central crea una tabla de 7 columnas por 7 filas (total 49 celdas) con ancho de tabla 300 píxeles y tamaño de fuente en la tabla 24 píxeles. La primera columna corresponderá a lunes y la última a domingo. Usa un método JavaScript para determinar el mes actual. Mediante código JavaScript, haz que aparezca dinámicamente como texto encima de la tabla el mes y año de que se trate (por ejemplo <<MAYO DE 2050>>). Haz que cada celda de la primera fila se rellene indicando el día de la semana (Lu – Ma – Mi – Ju – Vi –Sa –Do). Haz que la tabla se rellene dinámicamente (al cargar la página) con:

a) Espacio en blanco si no corresponde ningún día.

b) El número del día del mes según corresponda (28, 30 ó 31 días según de qué mes se trate).

El código JavaScript:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<style>
div{
border: solid;
width: 400px;
height: 400px;
margin: 100px;
text-align: center;
}
table{
width: 300px;
font-size: 24px;
text-align: center;
}
</style>
<script type="text/javascript">

window.onload = function(){

var rellenarDias = ["Lu","Ma","Mi","Ju","Vi","Sa","Do"];
var diasSemana = document.getElementsByTagName('th');

for(var i=0;i<diasSemana.length;i++){
diasSemana[i].textContent = rellenarDias[i];
}

var fechaAlmacenada = new Date();
var mesAlmacenado = fechaAlmacenada.getMonth();
var anyoAlmacenado = fechaAlmacenada.getFullYear();
var miFecha = new Date(anyoAlmacenado,mesAlmacenado,1)
var titulo = document.getElementsByTagName('span');
var mes = ["ENERO","FEBRERO","MARZO","ABRIL","MAYO","JUNIO","JULIO","AGOSTO","SEPTIEMBRE","OCTUBRE","NOVIEMBRE","DICIEMBRE"];

titulo[0].textContent = mes[miFecha.getMonth()]+" DE "+miFecha.getFullYear();

var mesesPares = /(ENERO)|(MARZO)|(MAYO)|(JULIO)|(AGOSTO)|(OCTUBRE)|(DICIEMBRE)/;
var mesFebrero = /FEBRERO/;
var diasDelMes;

if(mesesPares.test(titulo[0].textContent)){
diasMes = 31;
}else if(mesFebrero.test(titulo[0].textContent)){
diasMes = 29;
}else{
diasMes = 30;
}

var celdas = document.getElementsByTagName('td');

for(var i=0; i<celdas.length+1; i++){
if(i<(miFecha.getDay()-1) || (i-(miFecha.getDay()-2))>diasMes){
celdas[i].textContent = "";
}else{
celdas[i].textContent = i-(miFecha.getDay()-2);
}
}

}

</script>
</head>
<body style="text-align: center;">
<h1>Calendario</h1>
<div id="central">
<table style="border: solid;">
<span style="text-align: center;"></span>
<thead>
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>

Gracias.

143
Buenas tardes. Cuelgo una posible solución del ejercicio CU01161E del curso JavaScript desde cero.

Citar
EJERCICIO 1

Crea un documento HTML que conste de un título h1 con el texto <<Pulsa una tecla>>, y un div central de 400 por 400 px con el borde marcado y márgenes de 100px en todas direcciones. Utiliza el evento keypress para determinar el carácter que el usuario ha escrito utilizando el teclado y haz que se muestre dentro del div con un tamaño de fuente de 250px.

El código JavaScript:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

window.onload = function(){
document.onkeypress = mostrarInformacionCaracter;
}

function mostrarInformacionCaracter(evobject){
var elCaracter = String.fromCharCode(evobject.which);
central.innerHTML = elCaracter;
}

</script>
</head>
<body>
<div id="contenedor">
<h1 style="margin-left: 180px;">Pulsa una tecla</h1>
<div style="width: 400px; height: 400px; border: solid; margin: 100px; font-size: 250px; text-align: center;" id="central"></div>
</div>
</body>
</html>

Citar
EJERCICIO 2

Crea un documento HTML que conste de un título h1 con el texto <<Pulsa una flecha>>, y un div de 300 por 300 px con borde color negro, color de fondo amarillo y márgenes de 200px en todas direcciones. Utiliza el evento keypress para determinar si el usuario pulsa una tecla del cursor, y en ese caso utilizando CSS haz que el cuadrado que define el div se desplace 20px en la dirección de flecha elegida por el usuario. Por ejemplo, si el usuario pulsa la flecha derecha, el div debe desplazarse 20 px dentro de la ventana, hacia la derecha.

El código:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<style type="text/css">
div{
width: 300px;
height: 300px;
border: solid;
margin: 200px;
background: yellow;
position: relative;
}
</style>
<script type="text/javascript">

window.onload = function(){
document.onkeypress = inspeccionarTecla;
}

var desplazamiento = 20;
var desplazamientoVertical = 20;
function inspeccionarTecla(evobjet){
var elCaracter = evobjet.keyCode;
if(elCaracter == 39){
principal.style.marginLeft = (200+desplazamiento)+"px";
desplazamiento = desplazamiento +20;
}else if(elCaracter == 37){
principal.style.marginLeft = (200+(desplazamiento-20))+"px";
desplazamiento = desplazamiento - 20;
}else if(elCaracter == 40){
principal.style.marginTop = (200+desplazamientoVertical)+"px";
desplazamientoVertical = desplazamientoVertical + 20;
}else if(elCaracter == 38){
//alert(desplazamientoVertical);
principal.style.marginTop = (200+(desplazamientoVertical-20))+"px";
desplazamientoVertical = desplazamientoVertical - 20;
}else{
alert('Teclee una flecha!!!');
}

}

</script>
</head>
<body>
<h1>Pulsa una tecla</h1>
<div id="principal"></div>
</body>
</html>

Gracias.

144
Buenas noches. A continuación voy a colgar una posible solución del ejercicio CU01160E del curso JavaScript desde cero.

Citar
EJERCICIO

Crea un documento HTML que conste de un título h1 con el texto <<Posición x:  - Posición y>>, y un div con ancho 500 px y alto 400 px. Utiliza el evento onmousemove para mostrar dinámicamente en el título h1 las coordenadas del puntero del ratón a medida que se desplaza por el elemento div.

Por ejemplo, cuando el usuario coloca el ratón sobre el div se deberá mostrar:  Posición x:  244 Posición y: 188, al mover el ratón las coordenadas indicadas cambiarán a otro valor, por ejemplo Posición x:  322 Posición y: 228, y así sucesivamente.

El código:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">


function detectarMovimiento(){
var div = document.getElementsByTagName('div');
div[0].onmousemove = mostrarPosicion;
}

function mostrarPosicion(evobject){
var screenX = evobject.screenX;
var screenY = evobject.screenY;
var spans = document.getElementsByTagName('span');
spans[0].textContent = screenX+"px";
spans[1].innerHTML = screenY+"px";
}

</script>
</head>
<body>
<div style="width: 500px; height: 400px; border: solid; margin: 0;"  onmousemove="detectarMovimiento()">
<h1>Posición X:<span></span> Posición Y:<span></span></h1>
</div>
</body>
</html>

Gracias.

145
Buenas tardes.

Procedo a exponer las soluciones del ejericicio CU01159E del curso JavaScript desde cero.

Citar
EJERCICIO 1

Crea un documento HTML que conste de un título h1 con el texto <<La web para aprender programación>>, dos párrafos de texto y una imagen. Utiliza los eventos onmouseover para que la imagen original sea reemplazada por otra imagen cuando el usuario pasa el ratón sobre ella. Utiliza el evento onmouseout para hacer que cuando el usuario salga del espacio de la imagen, vuelva a aparecer la imagen original.

Código:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
window.onload = function(){

var imagen = document.querySelector('img');

imagen.addEventListener("mouseover",cambiarImagen);
imagen.addEventListener("mouseout",volverImagen);

function cambiarImagen(){
imagen.src = "https://www.aprenderaprogramar.com/images/thumbs_portada/thumbs_humor/78_futbolista_ordenador.jpg";
imagen.alt = "cargando imagen";
}

function volverImagen(){
imagen.src = "https://www.aprenderaprogramar.com/images/thumbs_portada/thumbs_humor/43_adictos_a_internet_apr2.jpg";
imagen.alt = "cargando imagen";
}
}
</script>
</head>
<body>
<div id="contenedor" style="text-align: center;">
<h1>La web para aprender programación</h1>
<p>Aquí está el texto del párrafo 1</p>
<p>Aquí está el texto del párrafo 2</p>
<img src="https://www.aprenderaprogramar.com/images/thumbs_portada/thumbs_humor/43_adictos_a_internet_apr2.jpg" alt="cargando imagen1">
</div>
</body>
</html>

Citar
EJERCICIO 2

Crea un documento HTML que conste de un título h1 con el texto <<La web para aprender programación>>, dos párrafos de texto y un formulario con los campos nombre, apellidos, edad y correo electrónico, así como con botones enviar y cancelar. Utiliza el evento onsubmit y otras herramientas para impedir que se envíe el formulario si se produce alguna de estas circunstancias:

a) El nombre está vacío ó el correo electrónico está vacío.

b) El correo electrónico no contiene los símbolos @ (arroba) y . (punto). Por ejemplo juan arroba gmail.com no es un correo válido.

c) No existe al menos una letra precediendo el símbolo @ del correo electrónico y una letra después de este símbolo. Por ejemplo a@.com no es un correo válido.

d) No existen al menos dos letras después del punto en el correo electrónico. Por ejemplo juan@gmail.c no es un correo válido.

e) La edad es cero o menor de cero.

En caso de producirse una de estas circunstancias, debe mostrarse el campo del formulario de un color distinto y un mensaje de advertencia. El color de advertencia debe desaparecer (dinámicamente) cuando el campo que tenía un problema tome el foco (para ello usa el evento onfocus).

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

var parrent01 = /\w{1,}/;
var parrent02 = /@/;
var parrent03 = /\./;
var parrent04 = /\w@\w/;
var parrent05 = /\.\w{2,}/;
var parrent06 = /\w+@\w+(?=\w+\.\w+)/;


function verificar(){

var inputs = document.getElementsByTagName('input');
for(var i=0;i<inputs.length;i++){
inputs[i].addEventListener('focus', quitarAtencion);
}

if((document.getElementById('nombre').value).match(parrent01) == null){
document.getElementById('nombre').style.backgroundColor = "red";
alert('El campo nombre es obligatorio!!!');
return false;
}else if((document.getElementById('correo').value).match(parrent01) == null){
document.getElementById('correo').style.backgroundColor = "red";
alert('El campo correo electrónico es obligatorio!!!');
return false;
}else if((document.getElementById('correo').value).match(parrent02) == null){
document.getElementById('correo').style.backgroundColor = "red";
alert('El correo electrónico tiene que contener el símbolo "@"!!!');
return false;
}else if((document.getElementById('correo').value).match(parrent03) == null){
document.getElementById('correo').style.backgroundColor = "red";
alert('El correo electrónico tiene que contener el símbolo "."!!!');
return false;
}else if((document.getElementById('correo').value).match(parrent04) == null){
document.getElementById('correo').style.backgroundColor = "red";
alert('Antes y después del símbolo "@" tiene que haber, por lo menos, una letra!!!');
return false;
}else if((document.getElementById('correo').value).match(parrent05) == null){
document.getElementById('correo').style.backgroundColor = "red";
alert('Después del símbolo "." tiene que haber, por lo menos, dos letras!!!');
return false;
}else if((document.getElementById('correo').value).match(parrent06) == null){
document.getElementById('correo').style.backgroundColor = "red";
alert('En un correo electrónico siempre tiene que estar el "@" antes que el "."!!!');
return false;
}else if((document.getElementById('edad').value)<=0){
document.getElementById('edad').style.backgroundColor = "red";
alert('La edad tiene que ser un valor positivo!!!');
return false;
}else{
alert('Los datos han sido correctos!!!');
return true;}
}

function quitarAtencion(){
this.style.backgroundColor = "";
}

</script>
</head>
<body>
<div id="contenedor" style="text-align: center;">
<h1>La web para aprender programación</h1>
<p onclick="verificar()">Aquí está el texto del párrafo 1</p>
<p>Aquí está el texto del párrafo 2</p>
<form name="formulario01"  method="get" onsubmit="return verificar()">
<label for="nombre"><span>Nombre:</span><input type="text" name="nombre" id="nombre"></label><br><br>
<label for="apellidos"><span>Apellidos: </span><input type="text" name="apellidos" id="apellidos"></label><br><br>
<label for="edad"><span>Edad:</span><input type="text" name="edad" id="edad"></label><br><br>
<label for="mail"><span>Correo Electrónico:</span><input type="text" name="correo" id="correo"></label><br><br>
<label>
<input type="submit" value="Enviar">
<input type="reset" value="Cancelar">
</label>
</form>
</div>

</body>
</html>

Como podéis ver, en el segundo ejercicio no he utilizado tantas funciones como mis compañeros. No sé si esto es una práctica errónea por no separar cada función con su cometido. Dejo a vosotros que lo valoréis.

Quería poner atención a un asunto. Para que el formulario no se envíe, ponemos en la etiqueta del formulario "<form onsubmit="return verificar()">" si sólo hubieramos puesto "<form onsubmit="verificar()">" activaría la función pero tanto si se cumplieran como si no las condicionales el formulario se enviará. Si incluimos "return" en la función, decimos que segun lo que devuelva la función (true o false) se enviará el formulario o no.

Gracias.

146
Buenas noches.

Procedo a la exposición de la solución del ejercicio CU01158E del curso JavaScript desde cero.

Citar
EJERCICIO

Crea un documento HTML donde dentro del elemento body tengamos un div con id “principal”, dentro de principal otro div denominado “secundario”, y dentro de secundario otro div con id “terciario”. Dentro de terciario debe existir un párrafo con el texto: Ejemplo de bubbling (burbujeo). Añade eventListeners con el evento click para los párrafos y todos los elementos div, document y window, y una función de respuesta común para todos ellos que emita el mensaje de alerta <<Soy un nodo tipo NombreDelNodo y estoy burbujeando>>.

Ejemplo: al hacer click sobre el texto <<Ejemplo de bubbling (burbujeo)>> deberán empezar a aparecernos mensajes como: Soy un nodo tipo P y estoy burbujenado. Soy un nodo tipo DIV y estoy burbujeando. Soy un nodo tipo DIV y estoy burbujeando…

El código JavaScript:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
window.onload = function(){
var parrafo = document.getElementsByTagName('p');
var divTerciario = document.getElementById('terciario');
var divSecundario = document.getElementById('secundario');
var divPrincipal = document.getElementById('principal');
var body = document.getElementsByTagName('body');
var html = document.getElementsByTagName('html');

for(var i=0;i<parrafo.length;i++){
window.addEventListener("click",mensaje);
document.addEventListener("click",mensaje);
body[i].addEventListener("click",mensaje);
divPrincipal.addEventListener("click",mensaje);
divSecundario.addEventListener("click",mensaje);
divTerciario.addEventListener("click",mensaje);
parrafo[i].addEventListener("click",mensaje);
}

var contador = 1;
function mensaje(){
alert("Mensaje: "+contador+"\nSoy un nodo tipo: "+this.nodeName+" y estoy burbujeando");
contador++;
}
}
</script>
</head>
<body>
<div id="principal">
<div id="secundario">
<div id="terciario">
<p>Ejemplo de bubbling (burbujeo).</p>
</div>
</div>
</div>
</body>
</html>

He construido de tal forma el código para demostrar que aunque la primera instrucción es que se ejecute el evento referenciado a "window" realmente la ejecución del burbojeo (bubble) empieza desde dentro y acaba con el elemento más "exterior" que pueda alcanzar el navegador.

En la entrega CU01158E del curso JavaScript desde cero se dice:

Citar
Algunos eventos tienen un burbujeo especial, por ejemplo el evento load (onload, carga de un elemento) burbujea hasta el elemento document, pero no alcanza al elemento window.

pero si realmente es así, por qué cuando añadimos el evento al elemento "window"
también nos salta el mensaje? Es decir, si no puede alcanzar el elemento "window" por qué burbujea? (estoy utilizando en navegador de Firefox, versión: 44.0.2)

Graicas.

147
Bueans noches. Aqui dejo una posible solución del ejercicio CU01157E del curso JavaScript desde cero.

Citar
EJERCICIO

A partir del siguiente código HTML, crea un script que cumpla los requisitos indicados más abajo:

Código: [Seleccionar]
<!DOCTYPE html>

<html> <head><title>Portal web - aprenderaprogramar.com</title>

<meta name="description" content="Portal web aprenderaprogramar.com">

<meta name="keywords" content="aprender, programar, cursos, libros"><meta charset="utf-8">

</head>

 <body> <p><a href="principal.html" title="Página principal" >Ir a la pagina principal</a></p>

<h1>Novedades</h1>

<p>Aquí presentamos las novedades del sitio.</p>

<h3>Lanzamos el producto X-FASHION</h3>

<p>Este producto permite estirar la piel hasta dejarla como la de un bebé.</p>

<p><img src="http://i.imgur.com/tq5Bs.png" title="Imagen del producto" alt="imagen producto x-fashion" /></p>

<h3>Mejoramos el producto T-MOTION</h3>

<p>Hemos lanzado una nueva versión del producto T-MOTION</p>

<p><img src="http://i.imgur.com/SpZyc.png" title="Imagen del proudcto tmotion" alt="imagen producto tmotion" /></p>

</body>
</html>

Citar
a) Mediante el control de los eventos onmouseover y onmouseout, debemos hacer que cuando el usuario pase el ratón sobre las etiquetas h1 y h3, el color del texto pase a ser orange y cuando deje de pasarlo el texto quede en marrón.

b) Mediante el control del evento onmouseover, debemos hacer que cuando el usuario pase el ratón sobre un párrafo, el color de fondo del párrafo sea amarillo y cuando deje de pasarlo no haya color de fondo.

c) El código JavaScript debe estar situado entre las etiquetas <head> … </head

El código de la solución:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Portal web - aprenderaprogramar.com</title>
<meta name="description" content="Portal web aprenderaprogramar.com">
<meta name="keywords" content="aprender, programar, cursos, libros">
<script type="text/javascript">

window.onload = function(){

var parrafo = document.getElementsByTagName('p');
var titulos = document.getElementsByClassName('titulo');

//Un bucle con las funciones anidadas
for(var i=0;i<parrafo.length;i++){
parrafo[i].onmouseover = function cambiarAAmarillo(){
this.style.background = "yellow";
}
parrafo[i].onmouseout = function eleminarColor(){
this.style.background = "none";
}
}

//Bucle con asignación a las funciones
for(var i=0;i<titulos.length;i++){
titulos[i].onmouseover = cambiarANaranja;
titulos[i].onmouseout = cambiarAMarron;
}

function cambiarANaranja(){
this.style.color = "orange";
}

function cambiarAMarron(){
this.style.color = "brown";
}

}
</script>
</head>
<body>
<p><a href="principal.html" title="Página principal">Ir a la página principal</a></p>
<h1 class="titulo">Novedades</h1>
<p>Aquí presentamos las novedades del sitio.</p>
<h3 class="titulo">Lanzamos el producto X-FASHION</h3>
<p>Este producto permite estirar la piel hasta dejarla como la de un bebé.</p>
<p><img src="http://i.imgur.com/tq5Bs.png" alt="imagen producto x-fashion" title="Imagen del producto"></p>
<h3 class="titulo">Mejoramos el producto T-MOTION</h3>
<p>Hemos lanzado una nueva versión del producto T-MOTION</p>
<p><img src="http://i.imgur.com/SpZyc.png" alt="imagen producto tmotion" title="Imagen del producto tmotion"></p>
</body>
</html>

Gracias.

148
Buenas tardes. Procede a exponer una posible solución del ejercicio CU01156E del curso JavaScript desde cero.

Citar
EJERCICIO

Crea un script donde:

a) Se pida al usuario que introduzca un número superior a 10000000 y se muestre por pantalla ese número con tres dígitos significativos. Si el número introducido no cumple la condición, se volverá a solicitar que se introduzca.

b) Se pida al usuario que introzca un número con 4 decimales y se muestre por pantalla ese número redondeado a dos decimales. Si el número introducido no cumple la condición, se volverá a solicitar que se introduzca (para ello habrá que analizar que la cadena introducida cuente con cuatro dígitos después del carácter de punto decimal).

c) Se pida al usuario que introduzca una frase que comience por un número que puede ser entero o decimal. Para dicha frase, se devolverá el número entero que se pueda extraer, y el número decimal que se pueda extraer. Deberá analizarse la entrada con una expresión regular, de modo que si no cumple la condición, se vuelva a solicitar la introducción de la frase.

El código del JavaScript:

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
function ejemplo(){

var entrada01 = 0; //Establecemos un valor menos a 100000000, para poder entrar en el bucle "while"
while(entrada01<10000000 || isNaN(entrada01)==true){
entrada01 = Number(prompt("Introduce un número superio a: 10.000.000"));
};
alert(entrada01.toPrecision(3));

var pattern01 = /^\d{1,}\.\d{4,4}/;
do{ //Hacemos uso de un bucle "while" en el cual, si no se cumple la condición, por lo menos una vez entre en él
var entrada02 = Number(prompt("Introduce un número con 4 decimales"));
    }while(pattern01.test(entrada02)==false);
alert(entrada02.toFixed(2));

var pattern02 = /^(\d{1,}|\d{1,}\.\d{1,})\w*/;
do{
var entrada03 = prompt("Introduce una frase que comience por un número que puede ser entero o decimal. ");
}while(entrada03.match(pattern02)==null);
alert("El número entero extraido es: "+parseInt(entrada03)+"\nEl número decimal extraido es: "+parseFloat(entrada03));
}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsador" onclick="ejemplo()">Probar Ejercicio</div>
</body>
</html>

Gracias.

149
Buenas noches. Aquí dejo el ejercicio CU00697B del curso Java desde cero.

Citar
EJERCICIO

Se plantea desarrollar un programa Java que permita representar la siguiente situación. Una instalación deportiva es un recinto delimitado donde se practican deportes, en Java interesa disponer de un método int getTipoDeInstalacion(). Un edificio es una construcción cubierta y en Java interesa disponer de un método double getSuperficieEdificio(). Un polideportivo es al mismo tiempo una instalación deportiva y un edificio; en Java interesa conocer la superficie que tiene y el nombre que tiene. Un edificio de oficinas es un edificio; en Java interesa conocer el número de oficinas que tiene.

Definir dos interfaces y una clase que implemente ambas interfaces para representar la situación anterior. En una clase test con el método main, crear un ArrayList que contenga tres polideportivos y dos edificios de oficinas y utilizando un iterator, recorrer la colección y mostrar los atributos de cada elemento.

El código de la interfaz "InstalacionDeport":

Código: [Seleccionar]
public interface InstalacionDeport{
   
    int getTipoDeInstalacion();
}

El código de la inteface "Edificio":

Código: [Seleccionar]
public interface Edificio{
   
    double getSuperficieEdificio();
}

El código de la clase "Polideportivo":

Código: [Seleccionar]
public class Polideportivo implements InstalacionDeport, Edificio{
    private String nombre;
    private int tipoDeInstalacion;
    private double largo;
    private double ancho;
   
    public Polideportivo(String nombre, int tipoDeInstalacion, double largo, double ancho){
        this.nombre = nombre;
        this.tipoDeInstalacion = tipoDeInstalacion;
        this.largo = largo;
        this.ancho = ancho;
    }
   
    public String getNombre(){return nombre;}
    public int getTipoDeInstalacion(){return tipoDeInstalacion;} //Sobreescribir el método abstracto de la interface
    public double getLargo(){return largo;}
    public double getAncho(){return ancho;}
   
    public double getSuperficieEdificio(){ //Sobreescribir el método abrastracto de la interface
        double area = 0;
        area = largo*ancho;
        return area;
    }
   
    public String toString(){ //Sobreescribimos el método "toStirng" de la superclase "Object"
        Integer tmp01 = tipoDeInstalacion;
        Double tmp02 = getSuperficieEdificio();
        return "El polideportivo: "+nombre+" es de tipo de instalacion: "+tmp01.toString()+" y una superficie de: "+tmp02.toString();
    }
}   

El código de la clase "EdificioOficinas":

Código: [Seleccionar]
public class EdificioOficinas implements Edificio{
    private int numeroOficinas;
    private double largo;
    private double ancho;
   
    public EdificioOficinas(int numeroOficinas){
        this.numeroOficinas = numeroOficinas;
        largo = 0;
        ancho = 0;
    }
   
    public void setLargo(double largo){
        this.largo = largo;
    }
   
    public void setAncho(double ancho){
        this.ancho = ancho;
    }
   
    public int getNumeroOficinas(){return numeroOficinas;}
   
    public double getSuperficieEdificio(){ //Implementamos el método "getSuperficieEdificio()"
        double area = 0;
        area = largo*ancho;
        return area;
    }
   
    public String toString(){ //Sobreescribimos el método "toString()"
        Double tmp = getSuperficieEdificio();
        return "El edificio tiene: "+numeroOficinas+" oficinas.";
    }
}

El código de la clase main "TestInterface":

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

public class TestInteface{
    public static void main(String []Args){
    Edificio polideportivo1 = new Polideportivo("Marbella",2,250,125);
    Edificio polideportivo2 = new Polideportivo("Sant Josep",1,200,90);
    Edificio polideportivo3 = new Polideportivo("Argentina",4,370,190);
    Edificio edificioOficinas1 = new EdificioOficinas(10);
    Edificio edificioOficinas2 = new EdificioOficinas(420);
    ArrayList<Edificio> listaEdificios = new ArrayList<Edificio>();
    listaEdificios.add(polideportivo1);
    listaEdificios.add(polideportivo2);
    listaEdificios.add(polideportivo3);
    listaEdificios.add(edificioOficinas1);
    listaEdificios.add(edificioOficinas2);
    Iterator<Edificio> it = listaEdificios.iterator();
    while(it.hasNext()){
        System.out.println(it.next().toString());
    }
}
}

Citar
¿Entre qué clases existe una relación que se asemeja a la herencia múltiple?

Entre la clase "Polideportivo" con las interfeces "InstalacionDeport" y "Edificio".

Tenía una duda, por qué no puedo acceder desde la clase "TestInterface" a los métodos de los objetos creados? Es decir, añadiendo esta línea en la clase "TestInterface":

Código: [Seleccionar]
edificioOficinas1.setLargo(29);
y el código se quedaría así:

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

public class TestInteface{
    public static void main(String []Args){
    Edificio polideportivo1 = new Polideportivo("Marbella",2,250,125);
    Edificio polideportivo2 = new Polideportivo("Sant Josep",1,200,90);
    Edificio polideportivo3 = new Polideportivo("Argentina",4,370,190);
    Edificio edificioOficinas1 = new EdificioOficinas(10);
    edificioOficinas1.setLargo(29);
    Edificio edificioOficinas2 = new EdificioOficinas(420);
    ArrayList<Edificio> listaEdificios = new ArrayList<Edificio>();
    listaEdificios.add(polideportivo1);
    listaEdificios.add(polideportivo2);
    listaEdificios.add(polideportivo3);
    listaEdificios.add(edificioOficinas1);
    listaEdificios.add(edificioOficinas2);
    Iterator<Edificio> it = listaEdificios.iterator();
    while(it.hasNext()){
        System.out.println(it.next().toString());
    }
}
}

no me reconoce el método. Será porque el método main es "static" y por eso?

Gracias.

150
Buenas tardes. A continuación procedo a la exposición de una posible solución del ejercicio CU00695B del curso Java.

Citar
EJERCICIO

Declara una clase abstracta Legislador que herede de la clase Persona, con un atributo provinciaQueRepresenta (tipo String) y otros atributos. Declara un método abstracto getCamaraEnQueTrabaja. Crea dos clases concretas que hereden de Legislador: la clase Diputado y la clase Senador que sobreescriban los métodos abstractos necesarios. Crea una lista de legisladores y muestra por pantalla la cámara en que trabajan haciendo uso del polimorfismo.

El código de la clase "Persona":

Código: [Seleccionar]
public class Persona{
    private String nombre;
    private String apellidos;
    private int edad;

    public Persona(String nombre, String apellidos, int edad){
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.edad = edad;
    }
   
    public Persona(){
   
    }
   
    public String getNombre(){return nombre;}
    public String getApellidos(){return apellidos;}
    public int getEdad(){return edad;}
   
    //Sobreescribimos el método toString()
    public String toString(){
        Integer datoEdad = edad;
        return "Nombre: "+nombre+" "+apellidos+". Edad: "+datoEdad.toString();
    }
}

El código de la clase "Legislador":

Código: [Seleccionar]
//Creamos una clase de tipo "abstract"
public abstract class Legislador extends Persona{
    private String provinciaQueRepresenta;
    private int anyosParlamento;
    protected String camara;
   
    public Legislador(String nombre, String apellidos, int edad, String provinciaQueRepresenta, int anyosParlamento, String camara){
        super(nombre, apellidos, edad);
        this.anyosParlamento = anyosParlamento;
        this.provinciaQueRepresenta = provinciaQueRepresenta;
        this.camara = camara;
    }
   
    public String getProvinciaQueRepresenta(){return provinciaQueRepresenta;}
    public int getAnyosParlamento(){return anyosParlamento;}
   
    //Creamos un método "abstract" el que no podremos invocar si no lo sobreescribamos en las subclases
    abstract public String getCamaraEnQueTrabaja();
   
    public String toString(){
        Integer datoAnyosParlamento = anyosParlamento;
        return super.toString()+"\nProvincia que representa: "+getProvinciaQueRepresenta()+", años que lleva en el parlamento: "+datoAnyosParlamento.toString()+", cámara en la que trabaja: "+camara;
    }

}

El código de la clase "Diputado":

Código: [Seleccionar]
public class Diputado extends Legislador{
   
    public Diputado(String nombre, String apellidos, int edad, String provinciaQueRepresenta, int anyosParlamento, String camara){
        super(nombre, apellidos, edad, provinciaQueRepresenta, anyosParlamento, camara);
    }
   
    public String getCamaraEnQueTrabaja(){return camara;} //Método abstracto sobreescrito en la clase
}

El código de la clase "Senador":

Código: [Seleccionar]
public class Senador extends Legislador{
   
    public Senador(String nombre, String apellidos, int edad, String provinciaQueRepresenta, int anyosParlamento, String camara){
        super(nombre, apellidos, edad, provinciaQueRepresenta, anyosParlamento, camara);
    }
   
    public String getCamaraEnQueTrabaja(){return camara;}
}

El código de la clase "ListinLegisladores":

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

public class ListinLegisladores{
   
    private ArrayList<Legislador> listinLegisladores;
   
    public ListinLegisladores(){
        listinLegisladores = new ArrayList<Legislador>();
    }
   
    public void addLegislador(Legislador legislador){
        listinLegisladores.add(legislador);
    }
   
    public void imprimirListinLegisladores(){
        System.out.println("VAMOS A PROCEDER A LA IMPRESION DE LA LISTA DE LOS LEGISLADORES: ");
        for(Legislador tmp: listinLegisladores){
            System.out.println(tmp.toString());
        }
        System.out.println("\nAHORA MOSTRAREMOS SOLO LAS CAMARAS EN LAS QUE TRABAJAN LOS SEÑORES LEGISLADORES:");
        for(Legislador tmp: listinLegisladores){
            System.out.println("El legislador: "+tmp.getApellidos()+" trabaja en cámara: "+tmp.getCamaraEnQueTrabaja());
        }
    }
}

El código de la clase "TestClasesYMetodosAbstractos":

Código: [Seleccionar]
public class TestClasesYMetodosAbstractos{
    public static void main(String []Args){
        Diputado diputado1 = new Diputado("Juan","Bigotes",45,"Tarragona",10,"baja");
        Diputado diputado2 = new Diputado("Antonio","Riopérez",40,"Valencia",5,"baja");
        Diputado diputado3 = new Diputado("Eusebio","Tiritón",56,"Castellón",27,"baja");
        Senador senador1 = new Senador("Jose","Trigolimpio",50,"Madrid",15,"alta");
        Senador senador2 = new Senador("Jorge","Lupiañez",67,"Badajóz",40,"alta");
        Senador senador3 = new Senador("Alberto","Pascual",53,"Murcia",19,"alta");
        ListinLegisladores listinLegisladores = new ListinLegisladores();
        listinLegisladores.addLegislador(diputado1);
        listinLegisladores.addLegislador(diputado2);
        listinLegisladores.addLegislador(diputado3);
        listinLegisladores.addLegislador(senador1);
        listinLegisladores.addLegislador(senador2);
        listinLegisladores.addLegislador(senador3);
        listinLegisladores.imprimirListinLegisladores();
    }
}

Tenía una duda. Quería crear un método llamado mostrarCamara() en la clase "Legislador" e invocarlo desde la clase "TestClasesYMetodosAbstractos", pero no funciona del todo bien.

Los dos mencionados códigos anteriormente quedarían así modificados:

El código de la clase "Legislador":

Código: [Seleccionar]
//Creamos una clase de tipo "abstract"
public abstract class Legislador extends Persona{
    private String provinciaQueRepresenta;
    private int anyosParlamento;
    protected String camara;
   
    public Legislador(String nombre, String apellidos, int edad, String provinciaQueRepresenta, int anyosParlamento, String camara){
        super(nombre, apellidos, edad);
        this.anyosParlamento = anyosParlamento;
        this.provinciaQueRepresenta = provinciaQueRepresenta;
        this.camara = camara;
    }
   
    public String getProvinciaQueRepresenta(){return provinciaQueRepresenta;}
    public int getAnyosParlamento(){return anyosParlamento;}
   
    //Creamos un método "abstract" el que no podremos invocar si no lo sobreescribamos en las subclases
    abstract public String getCamaraEnQueTrabaja();
   
    public String toString(){
        Integer datoAnyosParlamento = anyosParlamento;
        return super.toString()+"\nProvincia que representa: "+getProvinciaQueRepresenta()+", años que lleva en el parlamento: "+datoAnyosParlamento.toString()+", cámara en la que trabaja: "+camara;
    }
   
    public void mostrarCamara(Legislador legislador){
        String tmp = "";
        if(legislador instanceof Senador){
            tmp = "Senador ";
        }else{tmp = "Diputado ";}
        System.out.println("El "+tmp+getApellidos()+" trabaja en la cámara: "+camara);
    }
}

en añadido sólo:

Código: [Seleccionar]
public void mostrarCamara(Legislador legislador){
        String tmp = "";
        if(legislador instanceof Senador){
            tmp = "Senador ";
        }else{tmp = "Diputado ";}
        System.out.println("El "+tmp+getApellidos()+" trabaja en la cámara: "+camara);
    }

del código "ListinLegisladores" modificaríamos la parte del método "imprimirListinLegisladores()" de modo que se quedaría así:

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

public class ListinLegisladores{
   
    private ArrayList<Legislador> listinLegisladores;
   
    public ListinLegisladores(){
        listinLegisladores = new ArrayList<Legislador>();
    }
   
    public void addLegislador(Legislador legislador){
        listinLegisladores.add(legislador);
    }
   
    public void imprimirListinLegisladores(){
        System.out.println("VAMOS A PROCEDER A LA IMPRESION DE LA LISTA DE LOS LEGISLADORES: ");
        for(Legislador tmp: listinLegisladores){
            System.out.println(tmp.toString());
        }
        System.out.println("\nAHORA MOSTRAREMOS SOLO LAS CAMARAS EN LAS QUE TRABAJAN LOS SEÑORES LEGISLADORES:");
    }
}

y el código de la clase "TestClasesYMetodosAbstractos" sería así:

Código: [Seleccionar]
public class TestClasesYMetodosAbstractos{
    public static void main(String []Args){
        Diputado diputado1 = new Diputado("Juan","Bigotes",45,"Tarragona",10,"baja");
        Diputado diputado2 = new Diputado("Antonio","Riopérez",40,"Valencia",5,"baja");
        Diputado diputado3 = new Diputado("Eusebio","Tiritón",56,"Castellón",27,"baja");
        Senador senador1 = new Senador("Jose","Trigolimpio",50,"Madrid",15,"alta");
        Senador senador2 = new Senador("Jorge","Lupiañez",67,"Badajóz",40,"alta");
        Senador senador3 = new Senador("Alberto","Pascual",53,"Murcia",19,"alta");
        ListinLegisladores listinLegisladores = new ListinLegisladores();
        listinLegisladores.addLegislador(diputado1);
        listinLegisladores.addLegislador(diputado2);
        listinLegisladores.addLegislador(diputado3);
        listinLegisladores.addLegislador(senador1);
        listinLegisladores.addLegislador(senador2);
        listinLegisladores.addLegislador(senador3);
        listinLegisladores.imprimirListinLegisladores();
        diputado1.mostrarCamara(diputado1);
        diputado1.mostrarCamara(diputado2);
        diputado1.mostrarCamara(diputado3);
        diputado1.mostrarCamara(senador1);
        diputado1.mostrarCamara(senador2);
        diputado1.mostrarCamara(senador3);
    }
}

Pero el resultado no es el que yo esperaba. A la hora de imprimir por pantalla la variable "camara" cojo sólo el valor del primer objeto creado (de los objetos "Diputado" y "Senador"). No entiendo por qué la variable no cambia de valor. Es como si no funcionara, como si fuera una constante.

Gracias

151
Buenas tardes. Aquí propongo una solución del ejercicio CU00694B del curso Java desde cero.

Citar
EJERCICIO

Define una clase Figura de la que hereden otras dos clases denominadas Cuadrado y Círculo. La clase figura debe tener al menos el campo dimensionPrincipal. Las clases Cuadrado y Círculo deben tener al menos un método calcularArea que permita calcular el área a partir de la dimensión principal, utilizando la fórmula matemática correspondiente. Además, sobreescribe el método equals para que dos cuadrados sean iguales si tienen igual dimensión principal, y dos círculos idem. A continuación crea un programa test donde crees varios círculos y cuadrados y hagas comprobaciones de igualdad usando el método equals.

El código de la clase "Figura":

Código: [Seleccionar]
public class Figura{
   
    private float dimensionPrincipal;
   
    public Figura(){
        this.dimensionPrincipal = 0;
    }
   
    public Figura(float dimensionPrincipal){
        this.dimensionPrincipal = dimensionPrincipal;
    }
   
    public void setDimensionPrincipal(float dimensionPrincipal){
        this.dimensionPrincipal = dimensionPrincipal;
    }
   
    public float getDimensionPrincipal(){return dimensionPrincipal;}
   
}

El código de la clase "Cuadrado":

Código: [Seleccionar]
public class Cuadrado extends Figura{
   
    public Cuadrado(float dimensionPrincipal){
        super(dimensionPrincipal);
    }
   
    public float calcularArea(){
        float area;
        area = getDimensionPrincipal()*getDimensionPrincipal();
        return area;
    }
   
    public boolean equals(Object obj){
        if(obj instanceof Cuadrado){
            Cuadrado tmpCuadrado = (Cuadrado) obj;
            if(getDimensionPrincipal()==tmpCuadrado.getDimensionPrincipal()){
            return true;}else{return false;}
        }else{return false;}
    }
}

El código de la clase "Circulo":

Código: [Seleccionar]
public class Circulo extends Figura{
       
    private final float Pi = 3.14f;
   
    public Circulo(float dimensionPrincipal){
        super(dimensionPrincipal);
    }
   
    public float calcularArea(){
        float area;
        area = Pi*((getDimensionPrincipal()/2)*(getDimensionPrincipal()/2));
        return area;
    }
   
    public boolean equals(Object obj){
        if(obj instanceof Circulo){
            Circulo tmpCirculo = (Circulo) obj;
            if(getDimensionPrincipal()==tmpCirculo.getDimensionPrincipal()){
            return true;}else{return false;}
        }else{return false;}
    }
}

El código de la clase "TestSobreescribirMetodos":

Código: [Seleccionar]
public class TestSobreescribirMetodos{
    public static void main(String []Args){
        //Crear los objetos
        Cuadrado cuadrado1 = new Cuadrado(20);
        Cuadrado cuadrado2 = new Cuadrado(30);
        Cuadrado cuadrado3 = new Cuadrado(20);
        Circulo circulo1 = new Circulo(40);
        Circulo circulo2 = new Circulo(40);
        Circulo circulo3 = new Circulo(50);
        //Comparar los objetos
        System.out.println("Son iguales el objeto cuadrado1 y el objeto cuadrado3: "+(cuadrado1.equals(cuadrado3)));
        System.out.println("Son iguales el objeto cuadrado1 y el objeto cuadrado2: "+(cuadrado1.equals(cuadrado2)));
        System.out.println("Son iguales el objeto cuadrado2 y el objeto cuadrado3: "+(cuadrado2.equals(cuadrado3)));
        System.out.println("Son idénticos el objeto cuadrado1 y el objeto cuadrado3: "+(cuadrado1==cuadrado3));
        System.out.println();
        System.out.println("Son iguales el objeto circulo1 y el objeto circulo3: "+(circulo1.equals(circulo3)));
        System.out.println("Son iguales el objeto circulo1 y el objeto circulo2: "+(circulo1.equals(circulo2)));
        System.out.println("Son iguales el objeto circulo2 y el objeto circulo3: "+(circulo2.equals(circulo3)));
        System.out.println("Son idénticos el objeto circulo1 y el objeto circulo2: "+(circulo1==circulo2));
    }
}

He intentado sobreescribir también el método "toString" de la siguiente manera:

Código: [Seleccionar]
public String toString(){
        return getDimensionPrincipal();
    }

Pero me da el siguiente error:

Citar
incompatible types: float cannot be converted to java.lang.String

vamos, que no puede convertir un tipo "float" en un objeto "String". Pero en el tutorial ponía de ejemplo:

Citar
Supongamos que en nuestra clase Persona redefinimos toString() de la siguiente manera:

public String toString() { return nombre.concat(" "). concat(apellidos); }

 

En la clase profesor, que hereda de Persona, podríamos tener:

public String toString() { return super.toString().concat(" con Id de profesor: ").concat ( getIdProfesor() ); }

public void mostrarDatos() { System.out.println ("Los datos disponibles son: " + this.toString() ); }

y el método "getIdprofesor()" devuelve tipo "int". No entiendo por qué en el ejemplo funciona con "int" y en mi código con "float" no.

Gracias.

152
Buenas. Hago entrega del ejericicio CU00693B del curso Java desde cero.

Citar
EJERCICIO

Considera que estás desarrollando un programa Java donde trabajas con la superclase Profesor y la subclase ProfesorEmerito. Crea el código para estas clases que cumpla los requisitos que indicamos.

Como atributos de la superclase tendremos nombre (String), edad (int) y añosConsolidados (int) declarados como protected.

En la subclase se trabajará con el campo adicional añosEmerito declarado como private.

Un método de la subclase será double obtenerSalarioBase () que obtendrá el salario base como (925 + añosConsolidados * 33.25 + 47.80 * añosEmerito).

Intenta acceder directamente al campo añosConsolidados desde la subclase (como si fuera un campo más de la subclase) para implementar este método. ¿Es posible sin utilizar una invocación a super ni un método get? ¿Qué ocurre si el atributo en la superclase lo declaras private?

Código de la clase "Profesor":

Código: [Seleccionar]
public class Profesor{
    protected String nombre;
    protected int edad;
    protected int anyosConsolidados;
   
    public Profesor(String nombre, int edad, int anyosConsolidados){
        this.nombre = nombre;
        this.edad = edad;
        this.anyosConsolidados = anyosConsolidados;
    }
   
    public Profesor(){
        nombre = "";
        edad = 0;
        anyosConsolidados = 0;
    }
   
    public void setNombre(String nombre){
        this.nombre = nombre;
    }
   
    public void setEdad(int edad){
        this.edad = edad;
    }
   
    public void setAnyosConsolidados(int anyosConsolidados){
        this.anyosConsolidados = anyosConsolidados;
    }
   
    public String getNombre(){return nombre;}
    public int getEdad(){return edad;}
    public int getAnyosConsolidados(){return anyosConsolidados;}
   
    public double obtenerSalarioBase(){
        double salarioBase;
        salarioBase = 725+(anyosConsolidados*33.25);
        return salarioBase;
    }
   
    public void mostrarInfoProfesor(){
        System.out.println("El profesor: "+getNombre()+" de: "+getEdad()+" años tiene: "+getAnyosConsolidados()+" y años consolidados y no tiene años de emérito.\nPor lo tanto le corresponde un salario de: "+obtenerSalarioBase()+" euros.");
    }
   
}

Código de la clase "ProfesorEmerito":

Código: [Seleccionar]
public class ProfesorEmerito extends Profesor{
    private int anyosEmerito;
   
    public ProfesorEmerito(String nombre, int edad, int anyosConsolidados, int anyosEmerito){
        super(nombre, edad, anyosConsolidados);
        this.anyosEmerito = anyosEmerito;
    }
   
    public ProfesorEmerito(){
        super();
        anyosEmerito = 0;
    }
   
    public void setAnyosEmerito(int anyosEmerito){
        this.anyosEmerito = anyosEmerito;
    }
   
    public int getAnyosEmerito(){return anyosEmerito;}
   
    public double obtenerSalarioBase(){
        double salarioBase;
        salarioBase = 925+(anyosConsolidados*33.25)+(47.80*anyosEmerito);
        return salarioBase;
    }
   
    public void mostrarInfoProfesor(){
        System.out.println("El profesor: "+getNombre()+" de: "+getEdad()+" años tiene: "+getAnyosConsolidados()+" años consolidados y "+getAnyosEmerito()+" años de emérito.\nPor lo tanto le corresponde un salario de: "+obtenerSalarioBase()+" euros.");
    }
}

Código de la clase "TestDeclaracionProtected":

Código: [Seleccionar]
public class TestDeclaracionProtected{
    public static void main(String []Args){
        ProfesorEmerito profesorEmerito = new ProfesorEmerito("Juan",65,45,5);
        profesorEmerito.mostrarInfoProfesor();
    }
}

Si en la superclase "Profesor" los campos a los que queremos acceder desde la subclase están declaradas como "protected" podríamos hacerlo como si de un campo propio de la clase "ProfesorEmerito" se tratase.

En caso contrario, si estuvieran declaradas como "private" no podríamos acceder desde las subclases.

Gracias.

153
Buenas tardes.

Os dejo una posible solución del ejercicio CU00692B del curso Java desde cero.

Citar
EJERCICIO

Considera que estás desarrollando un programa Java donde trabajas con la superclase Profesor y la subclase ProfesorEmerito. Crea el código para estas clases que cumpla los requisitos que indicamos.

Como atributos de la superclase tendremos nombre (String), edad (int) y añosConsolidados (int). Un método de la superclase será double obtenerSalarioBase () que obtendrá el salario base como (725 + el número de años consolidados multiplicado por 33.25).

En la subclase se trabajará con el campo adicional añosEmerito. Queremos hacer lo siguiente: sobreescribir el método obtenerSalarioBase () en la subclase para calcular el salario base del profesor emérito invocando mediante la palabra clave super al cálculo del salario base de Profesor y añadiéndole la cantidad de (47.80 * añosEmerito).

Código de la clase "Profesor":

Código: [Seleccionar]
public class Profesor{
    private String nombre;
    private int edad;
    private int anyosConsolidados;
   
    public Profesor(String nombre, int edad, int anyosConsolidados){
        this.nombre = nombre;
        this.edad = edad;
        this.anyosConsolidados = anyosConsolidados;
    }
   
    public Profesor(){
        nombre = "";
        edad = 0;
        anyosConsolidados = 0;
    }
   
    public void setNombre(String nombre){
        this.nombre = nombre;
    }
   
    public void setEdad(int edad){
        this.edad = edad;
    }
   
    public void setAnyosConsolidados(int anyosConsolidados){
        this.anyosConsolidados = anyosConsolidados;
    }
   
    public String getNombre(){return nombre;}
    public int getEdad(){return edad;}
    public int getAnyosConsolidados(){return anyosConsolidados;}
   
    public double obtenerSalarioBase(){
        double salarioBase;
        salarioBase = 725+(anyosConsolidados*33.25);
        return salarioBase;
    }
   
    public void mostrarInfoProfesor(){
        System.out.println("El profesor: "+getNombre()+" de: "+getEdad()+" años tiene: "+getAnyosConsolidados()+" y años consolidados y no tiene años de emérito.\nPor lo tanto le corresponde un salario de: "+obtenerSalarioBase()+" euros.");
    }
   
}

Código de la clase "ProfesorEmerito":

Código: [Seleccionar]
public class ProfesorEmerito extends Profesor{
    private int anyosEmerito;
   
    public ProfesorEmerito(String nombre, int edad, int anyosConsolidados, int anyosEmerito){
        super(nombre, edad, anyosConsolidados);
        this.anyosEmerito = anyosEmerito;
    }
   
    public ProfesorEmerito(){
        super();
        anyosEmerito = 0;
    }
   
    public void setAnyosEmerito(int anyosEmerito){
        this.anyosEmerito = anyosEmerito;
    }
   
    public int getAnyosEmerito(){return anyosEmerito;}
   
    public double obtenerSalarioBase(){
        double salarioBase;
        salarioBase = super.obtenerSalarioBase()+(47.80*anyosEmerito);
        return salarioBase;
    }
   
    public void mostrarInfoProfesor(){
        System.out.println("El profesor: "+getNombre()+" de: "+getEdad()+" años tiene: "+getAnyosConsolidados()+" años consolidados y "+getAnyosEmerito()+" años de emérito.\nPor lo tanto le corresponde un salario de: "+obtenerSalarioBase()+" euros.");
    }
}

Código de la clase "TestPalabraClaveSuper":

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

public class TestPalabraClaveSuper{
    public static void main(String []Args){
       
        //Creamos dos objetos de tipo "Profesor" y de tipo "ProfesorEmerito"
        Profesor profesor = new Profesor("José",65,45);
        ProfesorEmerito profesorEmerito = new ProfesorEmerito("Juan",65,45,5);
       
        //Creamos una lista de los objetos(profesores) creados.
        ArrayList<Profesor> listadoProfesores = new ArrayList<Profesor>();
        listadoProfesores.add(profesor);
        listadoProfesores.add(profesorEmerito);
       
        /*Invocamos sus métodos "mostrarInfoProfesor()".
        Como el objeot "ProfesorEmerito" también dispone de dicho método se ejecuta éste. En caso contrario se ejecutaría de su padre, es decir, del objeto "Profesor".
        Pero como también esté sobreescrito el método "obtenerSalarioBase()" el salario base del ojbeto "profesorEmerito" no varia.
        Podéis hacer la prueba eleminando de la clase "ProfesorEmerito" el método "mostrarInfoProfesor()".*/
        for(Profesor tmp: listadoProfesores){
            tmp.mostrarInfoProfesor();
        }
    }
}

Gracias.

154
Buenas tardes, compañeros.

Aquí dejo una posible solución del ejercicio CU00690B del curso Java desde cero.

Citar
EJERCICIO

Responde a las siguientes preguntas:

Supongamos la superclase Vehiculo que representa a cualquier tipo de vehículo y la subclase Taxi que representa a un tipo de vehículo concreto.

c) Escribe el código de una clase Vehiculo con los atributos matricula (String) y numeroDeRuedas (int), constructor, métodos getters y setters y método toString() para mostrar la información de un vehículo.

Código de la clase "Vehiculo":

Código: [Seleccionar]
public class Vehiculo{
    private String matricula;
    private int numeroDeRuedas;
   
    public Vehiculo(String matricula, int numeroDeRuedas){
        this.matricula = matricula;
        this.numeroDeRuedas = numeroDeRuedas;
    }
   
    public void setMatricula(String matricula){
        this.matricula = matricula;
    }
   
    public void setNumeroDeRuedas(int numeroDeRuedas){
        this.numeroDeRuedas = numeroDeRuedas;
    }
   
    public String getMatricula(){return matricula;}
    public int getNumeroDeRuedas(){return numeroDeRuedas;}
   
    public String toString(){
        return "El vehículo dispone de: "+getNumeroDeRuedas()+" ruedas y tiene una matrícula: "+getMatricula();
    }
}

Citar
d) Escribe el código de una clase Taxi que herede de vehículo y que además de los atributos de Vehiculo lleve un atributo adicional nombreDelConductor (String) y numeroDePlazas (int), constructor, métodos getters y setters y método toString() para mostrar la información de un Taxi.

Código de la clase "Taxi":

Código: [Seleccionar]
public class Taxi extends Vehiculo{
    private String nombreDelConductor;
    private int numeroDePlazas;
   
    public Taxi(String matricula, int numeroDeRuedas, String nombreDelConductor, int numeroDePlazas){
        super(matricula, numeroDeRuedas);
        this.nombreDelConductor = nombreDelConductor;
        this.numeroDePlazas = numeroDePlazas;
    }
   
    public void setNombreDelConductor(String nombreDelConductor){
        this.nombreDelConductor = nombreDelConductor;
    }
   
    public void setNumeroDePlazas(int numeroDePlzas){
        this.numeroDePlazas = numeroDePlazas;
    }
   
    public String getNombreDelConductor(){return nombreDelConductor;}
    public int getNumeroDePlazas(){return numeroDePlazas;}
   
    public String toString(){
        return "El vehículo dispone de: "+getNumeroDeRuedas()+" ruedas, tiene una matrícula: "+getMatricula()+
        " y el conductor se llama: "+getNombreDelConductor()+". El taxi dispone de: "+getNumeroDePlazas()+" plazas.";
    }
}

Citar
a) ¿Un objeto de tipo estático declarado Taxi puede contener a un objeto Vehiculo en tiempo de ejecución?

Este código no funcina:

Código: [Seleccionar]
public class TestEnmascaramiento01{
    public static void main(String []Args){
        Vehiculo vehiculo1 = new Vehiculo("8379 DRT",4);
        Taxi taxi1 = new Taxi("2039 DWQ",9,"Jose",20);
        taxi1 = vehiculo1;
    }
}

Y este, en cambio, sí:

Código: [Seleccionar]
public class TestEnmascaramiento01{
    public static void main(String []Args){
        Vehiculo vehiculo1 = new Vehiculo("8379 DRT",4);
        Taxi taxi1 = new Taxi("2039 DWQ",9,"Jose",20);
        taxi1 = (Taxi) vehiculo1;
    }
}

La explicación de esto la encontramos en la entrega CU00689B y precisamente aquí:

Citar
2. Conversión hacia abajo

Se trataría de poner lo que está arriba abajo, por ejemplo poner un Profesor como ProfesorInterino. Esto no siempre es posible. El supertipo admite cualquier forma (es polimórfico) de los subtipos: si el supertipo almacena el subtipo al que queremos realizar la conversión, será posible usando lo que se denomina “Enmascaramiento de tipos” o “Hacer Casting” (cast significa “moldear”). Si el supertipo no almacena el subtipo al que queremos convertirlo, la operación no es posible y saltará un error. Ejemplo:

Profesor p1; //p1 es tipo Profesor. Admite ser Profesor, ProfesorTitular o ProfesorInterino.

ProfesorInterino p44 = new ProfesorInterino(); //p44 es ProfesorInterino.

p1 = p44; // Conversión hacia arriba: sin problema. Ahora p1 que es tipo profesor, almacena un profesor interino

p44 = p1 // ERROR en la conversión hacia abajo. El compilador no llega tan lejos como para saber si p1 almacena un profesor interino u otro tipo de profesor y ante la incertidumbre salta un error. La forma de forzar al compilador a que “comprenda” que p1 está almacenando un profesor interino y por tanto puede asignarse a una variable que apunta a un profesor interino se llama “hacer casting”. Escribiríamos lo siguiente: p44 = (ProfesorInterino) p1;

Citar
b) ¿Un objeto de tipo estático declarado Vehiculo puede contener a un objeto Taxi en tiempo de ejecución?

Código: [Seleccionar]
public class TestEnmascaramiento02{
    public static void main(String []Args){
        Vehiculo vehiculo1 = new Vehiculo("8379 DRT",4);
        Taxi taxi1 = new Taxi("2039 DWQ",9,"Jose",20);
        vehiculo1 = taxi1;
    }
}

Vemos que el código compila.

Citar
1. Conversión hacia arriba

Se trataría por ejemplo de poner lo que está a un nivel inferior en un nivel superior, por ejemplo poner un profesor interino como profesor. Posible código: profesor43 = profesorinterino67;

Ponemos lo que está abajo (el profesor interino) arriba (como profesor). Esto es posible, pero dado que lo que está abajo generalmente contiene más campos y métodos que lo que está arriba, perderemos parte de la información. Sobre el objeto profesor43 ya no podremos invocar los métodos propios de los profesores interinos.

Citar
e) Escribe el código de una clase test con el método main que cree un objeto cuyo tipo es Vehiculo, instanciado como Taxi. Establece valores para sus atributos y usa el método toString(). ¿Qué método toString() resulta de aplicación, el propio de la clase Vehiculo o el propio de la clase Taxi? ¿Por qué?

Código de la clase "Test":

Código: [Seleccionar]
public class Test{
    public static void main(String []Args){
        Vehiculo vehiculo = new Taxi("4389 BTN",4,"Juan",8);
        System.out.println(vehiculo.toString());
    }
}

La respuesta a la pregunta "e" la encontramos al final de la entrega CU00690B y precisamente aquí:

Citar
el compilador se basa en el tipo estático para su trabajo, podríamos pensar que si invocamos a un objeto de tipo estático “superclase” y tipo dinámico “subclase” con un método sobreescrito, el método que se utilice sería el propio de la superclase. Pero sin embargo, esto no es así: el control de tipos del compilador se basa en los tipos estáticos pero en tiempo de ejecución los métodos que se ejecutan dan preferencia al tipo dinámico. Es decir, en tiempo de ejecución Java está constantemente “buscando” (“ligando” o “despachando”) el método que corresponda en función del tipo dinámico al que apunta una variable.

Ampliación de la información:

Citar
Si el método invocado no se encuentra definido en el tipo dinámico de que se trate, Java busca el método en la superclase para tratar de ejecutarlo. Si no lo encuentra en la superclase, continúa subiendo niveles de clase hasta alcanzar a la clase Object. Si en la clase Object tampoco se encontrara un método con ese nombre, el programa no llegaría a compilar. Decimos que los métodos en Java son polimórficos porque una misma llamada en un programa puede dar lugar a la ejecución de distintos métodos según el tipo dinámico de una variable.

Gracias.

155
Buenas noches.

Mediante la siguiente respuesta autocorrigo mi ejercicio.

Quiero decir que me ha servido de gran ayuda el siguiente hilo:

https://www.aprenderaprogramar.com/foros/index.php?topic=2342.0

El ejercicio pedía:

Citar
EJERCICIO

Amplía el código del programa Java que planteamos como ejercicio en la entrega CU00687 de este curso, relativo a la gestión de una empresa agroalimentaria, teniendo en cuenta que la empresa gestiona envíos a través de diferentes medios, y un envío puede contener cierto número de productos frescos, refrigerados o congelados. Añade al código:

a) Una clase EnvioDeProductos que represente un envío de productos como colección de objetos que admite el polimorfismo.

b) Crear una clase testHerencia4 con el método main donde se creen: dos productos frescos, tres productos refrigerados y cinco productos congelados (2 de ellos congelados por agua, otros 2 por aire y 1 por nitrógeno). Crear un envío que represente la agrupación de los anteriores productos. Mostrar por pantalla la información del número de productos que componen el envío y recorrer los productos del envío usando iterator para mostrar la información (valor de los atributos) de cada uno de ellos.

A continuación los códigos de las clases necesarias para poder funcionar el programa.

El código de la clase "Producto":

Código: [Seleccionar]
public class Producto{
    private String fechaCaducidad;
    private int numeroLote;
    private String fechaEnvase;
    private String paisOrigen;
   
    public Producto(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen){
        this.fechaCaducidad = fechaCaducidad;
        this.numeroLote = numeroLote;
        this.fechaEnvase = fechaEnvase;
        this.paisOrigen = paisOrigen;
    }
   
    public void setFechaCaducidad(String fechaCaducidad){
        this.fechaCaducidad = fechaCaducidad;
    }
   
    public void setNumeroLote(int numeroLote){
        this.numeroLote = numeroLote;
    }
   
    public void setFechaEnvase(String fechaEnvase){
        this.fechaEnvase = fechaEnvase;
    }
   
    public void setPaisOrigen(String paisOrigen){
        this.paisOrigen = paisOrigen;
    }
   
    public String getFechaCaducidad(){return fechaCaducidad;}
    public int getNumeroLote(){return numeroLote;}
    public String getFechaEnvase(){return fechaEnvase;}
    public String getPaisOrigen(){return paisOrigen;}
   
    public void mostrarInfoProducto(){
        System.out.print("El producto: "+getNumeroLote()+" con fecha de envase: "+getFechaEnvase()+" y fecha de caducidad: "+getFechaCaducidad()+" proviene de: "+getPaisOrigen());
    }
}

El código de la clase "ProductoFresco":

Código: [Seleccionar]
public class ProductoFresco extends Producto{
   
    public ProductoFresco(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen);
    }
   
    public void mostrarInfoProductoFresco(){
         mostrarInfoProducto();
         System.out.println();
    }
}

El código de la clase "ProductoRefrigeradoYCongelado" (es una clase "intermedia"):

Código: [Seleccionar]
public class ProductoRefrigeradoYCongelado extends Producto{
    private float temperaturaMantenemientoRecom;
   
    public ProductoRefrigeradoYCongelado(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen);
        this.temperaturaMantenemientoRecom = temperaturaMantenemientoRecom;
    }
   
    public void setTemperaturaMantenemientoRecom(float temperaturaMantenemientoRecom){
        this.temperaturaMantenemientoRecom = temperaturaMantenemientoRecom;
    }

    public float getTemperaturaMantenemientoRecom(){return temperaturaMantenemientoRecom;}
   
    public void mostrarInfoProductoRefrigeradoYCongelado(){
        mostrarInfoProducto();
        System.out.print(" y tiene una temperatura de mantenemiento recomendad de: "+getTemperaturaMantenemientoRecom()+"C");
    }
}

El código de la clase "ProductoRefrigerado":

Código: [Seleccionar]
public class ProductoRefrigerado extends ProductoRefrigeradoYCongelado{
    private int codigoOrganismoSupervision;
   
    public ProductoRefrigerado(String fechaCaducidad, int numeroLote, String fechaEnvase,  String paisOrigen, float temperaturaMantenemientoRecom, int codigoOrganismoSupervision){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.codigoOrganismoSupervision = codigoOrganismoSupervision;
    }
   
    public void setCodigoOrganismoSupervision(int codigoOrganismoSupervision){
        this.codigoOrganismoSupervision = codigoOrganismoSupervision;
    }
   
    public int getCodigoOrganismoSupervision(){return codigoOrganismoSupervision;}
   
    public void mostrarInfoProductoRefrigerado(){
        mostrarInfoProductoRefrigeradoYCongelado();
        System.out.print(" y un código de Organismo de Supervisión: "+getCodigoOrganismoSupervision()+"\n");
    }
}

El código de la clase "ProductoCongelado":

Código: [Seleccionar]
public class ProductoCongelado extends ProductoRefrigeradoYCongelado{
   
    public ProductoCongelado(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
    }
   
    public void mostrarInfoProductoCongelado(){
        mostrarInfoProductoRefrigeradoYCongelado();
        System.out.println();
    }
}

El código de la clase "ProductoCongeladoPorAire":

Código: [Seleccionar]
public class ProductoCongeladoPorAire extends ProductoCongelado{
    private float nitrogeno;
    private float oxigeno;
    private float co2;
    private float vaporAgua;
   
    public ProductoCongeladoPorAire(String fechaCaducidad, int numeroLote,  String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom, float nitrogeno, float oxigeno, float co2, float vaporAgua){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.nitrogeno = nitrogeno;
        this.oxigeno = oxigeno;
        this.co2 = co2;
        this.vaporAgua = vaporAgua;
    }
   
    public void setNitrogeno(float nitrogeno){
        this.nitrogeno = nitrogeno;
    }
   
    public void setOxigeno(float oxigeno){
        this.oxigeno = oxigeno;
    }
   
    public void setCo2(float co2){
        this.co2 = co2;
    }
   
    public void setVaporAgua(float vaporAgua){
        this.vaporAgua = vaporAgua;
    }
   
    public float getNitrogeno(){return nitrogeno;}
    public float getOxigeno(){return oxigeno;}
    public float getCo2(){return co2;}
    public float getVaporAgua(){return vaporAgua;}
   
    public void mostrarInfoProductoCongeladoPorAire(){
        mostrarInfoProductoRefrigeradoYCongelado();
        System.out.print(" y tiene una composición de aire como sigue: ");
        System.out.println("Nitrógeno: "+getNitrogeno()+"%");
        System.out.println("Oxígeno: "+getOxigeno()+"%");
        System.out.println("Dióxido de carbono: "+getCo2()+"%");
        System.out.println("Vapor de agua: "+getVaporAgua()+"%");
    }
}

El código de la clase "ProductoCongeladoPorAgua":

Código: [Seleccionar]
public class ProductoCongeladoPorAgua extends ProductoCongelado{
    private float salinidadAgua;
   
    public ProductoCongeladoPorAgua(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom ,float salinidadAgua){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.salinidadAgua = salinidadAgua;
    }
   
    public void setSalinidadAgua(float salinidadAgua){
        this.salinidadAgua = salinidadAgua;
    }
   
    public float getSalinidadAgua(){return salinidadAgua;}
   
    public void mostrarInfoProductoCongeladoPorAgua(){
        mostrarInfoProductoRefrigeradoYCongelado();
        System.out.print(" y tiene un porcentaje de salinidad: "+getSalinidadAgua()+"gr sal por litro de agua\n");
    }
}

El código de la clase "ProductoCongeladoPorNitrogeno":

Código: [Seleccionar]
public class ProductoCongeladoPorNitrogeno extends ProductoCongelado{
    private String metodoCongelacion;
    private int tiempoExposicion;
   
    public ProductoCongeladoPorNitrogeno(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom, String metodoCongelacion, int tiempoExposicion){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.metodoCongelacion = metodoCongelacion;
        this.tiempoExposicion = tiempoExposicion;
    }
   
    public void setMetodoCongelacion(String metodoCongelacion){
        this.metodoCongelacion = metodoCongelacion;
    }
   
    public void setTiempoExposicion(int tiempoExposicion){
        this.tiempoExposicion = tiempoExposicion;
    }
   
    public String getMetodoCongelacion(){return metodoCongelacion;}
    public int getTiempoExposicion(){return tiempoExposicion;}
   
    public void mostrarInfoProductoCongeladoPorNitrogeno(){
        mostrarInfoProductoRefrigeradoYCongelado();
        System.out.print(" y tuvo un método de congelación: "+getMetodoCongelacion()+" y estuvo expuesto al nitrógeno: "+getTiempoExposicion()+"s\n");
    }
}

El código de la clase "EnvioDeProductos":

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

public class EnvioDeProductos{
    //Definimos una variable de clase "ArrayList" de tipo "Producto"
    private ArrayList<ProductoFresco> productosFrescos;
    private ArrayList<ProductoRefrigerado> productosRefrigerados;
    private ArrayList<ProductoCongeladoPorAgua> productosCongeladosPorAgua;
    private ArrayList<ProductoCongeladoPorAire> productosCongeladosPorAire;
    private ArrayList<ProductoCongeladoPorNitrogeno> productosCongeladosPorNitrogeno;
   
    //Inicializamos la variable como un objeto nuevo de clase "ArrayList" de tipo "Producto"
    public EnvioDeProductos(){
        productosFrescos = new ArrayList<ProductoFresco>();
        productosRefrigerados = new ArrayList<ProductoRefrigerado>();
        productosCongeladosPorAgua = new ArrayList<ProductoCongeladoPorAgua>();
        productosCongeladosPorAire = new ArrayList<ProductoCongeladoPorAire>();
        productosCongeladosPorNitrogeno = new ArrayList<ProductoCongeladoPorNitrogeno>();
    }
   
    //Creación y inclusión de los objetos objetos
    public void crearPedido(){
        productosFrescos.add(new ProductoFresco("23-06-2016",1234, "05-01-2016","Argentina"));
        productosFrescos.add(new ProductoFresco("22-06-2016",987,"09-10-2016","España"));
        productosRefrigerados.add(new ProductoRefrigerado("10-10-2016",345,"01-03-2016","Ecuador",5, 3452));
        productosRefrigerados.add(new ProductoRefrigerado("11-10-2016",346,"02-03-2016","Colombia",5, 5421));
        productosRefrigerados.add(new ProductoRefrigerado("12-10-2016",347,"03-03-2016","Marruecos",5, 1231));
        productosCongeladosPorAgua.add(new ProductoCongeladoPorAgua("13-06-2016",908,"12-05-2016","Argentina",-18,40));
        productosCongeladosPorAgua.add(new ProductoCongeladoPorAgua("13-08-2016",988,"11-06-2016","España",-15,35));
        productosCongeladosPorAire.add(new ProductoCongeladoPorAire("11-08-2016",354,"02-03-2016","Puerto Rico",-22,20,20,30,30));
        productosCongeladosPorAire.add(new ProductoCongeladoPorAire("11-11-2016",428,"08-08-2016","Francia",-10,10,20,30,40));
        productosCongeladosPorNitrogeno.add(new ProductoCongeladoPorNitrogeno("10-08-2016",846,"05-05-2016","Suiza",-20,"Tradicional",200));
    }
   
    //Invocación de los métodos de cada objeto.
    public void imprimirPedido(){
        System.out.println("Productos Frescos:");
        for(ProductoFresco producto: productosFrescos){
            producto.mostrarInfoProductoFresco();
        }
        System.out.println("Productos Refrigerados:");
        for(ProductoRefrigerado producto: productosRefrigerados){
            producto.mostrarInfoProductoRefrigerado();
        }
        System.out.println("Productos Congelados por Agua:");
        for(ProductoCongeladoPorAgua producto: productosCongeladosPorAgua){
            producto.mostrarInfoProductoCongeladoPorAgua();
        }
        System.out.println("Productos Congelados por Aire:");
        for(ProductoCongeladoPorAire producto: productosCongeladosPorAire){
            producto.mostrarInfoProductoCongeladoPorAire();
        }
        System.out.println("Productos Congelados por Nitrógeno:");
        for(ProductoCongeladoPorNitrogeno producto: productosCongeladosPorNitrogeno){
            producto.mostrarInfoProductoCongeladoPorNitrogeno();
        }
    }
}

El código de la clase main  "TestHerencia4":

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

public class TestHerencia4{
    public static void main(String []Args){
       
        //Creamos un objeto de tipo "EnvioDeProductos"
        EnvioDeProductos envioDeProductos = new EnvioDeProductos();
       
        //Creamos el pedido (los objetos) mediante la invocación del método crearPedido() del objeto "envioDeProductos" de tipo "EnvioDeProductos"
        envioDeProductos.crearPedido();
       
        //Invocamos el método "imprimirPedido()" para mostrar por pantalla el pedido completo
        envioDeProductos.imprimirPedido();
       
        //Mediante el objeto "Calendar" de Java y con el método "getTime()" hacemos visible la hora actual.
        Calendar hora = GregorianCalendar.getInstance();
        System.out.println("La hora y el día en el cual fue hecho el pedido: "+hora.getTime());
    }
}

Espero que se entienda todo y que esté en lo acierto :)

Recomiendo, de verdad, el estudio detallado del programa del hilo: (a mí me ayudo bastante)

https://www.aprenderaprogramar.com/foros/index.php?topic=2342.0

Gracias

PD: Incluyo el esquema como foto.

156
Hola.

Aquí expongo una posible solución del ejercicio CU00687B del curso Java desde cero.

Citar
EJERCICIO

Se plantea desarrollar un programa Java que permita la gestión de una empresa agroalimentaria que trabaja con tres tipos de productos: productos frescos, productos refrigerados y productos congelados. Todos los productos llevan esta información común: fecha de caducidad y número de lote. A su vez, cada tipo de producto lleva alguna información específica. Los productos frescos deben llevar la fecha de envasado y el país de origen. Los productos refrigerados deben llevar el código del organismo de supervisión alimentaria, la fecha de envasado, la temperatura de mantenimiento recomendada y el país de origen. Los productos congelados deben llevar la fecha de envasado, el país de origen y la temperatura de mantenimiento recomendada.

Hay tres tipos de productos congelados: congelados por aire, congelados por agua y congelados por nitrógeno. Los productos congelados por aire deben llevar la información de la composición del aire con que fue congelado (% de nitrógeno, % de oxígeno, % de dióxido de carbono y % de vapor de agua). Los productos congelados por agua deben llevar la información de la salinidad del agua con que se realizó la congelación en gramos de sal por litro de agua. Los productos congelados por nitrógeno deben llevar la información del método de congelación empleado y del tiempo de exposición al nitrógeno expresada en segundos.

Crear el código de las clases Java implementando una relación de herencia siguiendo estas indicaciones:

a) En primer lugar realizar un esquema con papel y bolígrafo donde se represente cómo se van a organizar las clases cuando escribamos el código. Estudiar los atributos de las clases y trasladar a la superclase todo atributo que pueda ser trasladado.

b) Crear superclases intermedias (aunque no se correspondan con la descripción dada de la empresa) para agrupar atributos y métodos cuando sea posible. Esto corresponde a “realizar abstracciones” en el ámbito de la programación, que pueden o no corresponderse con el mundo real.

c) Cada clase debe disponer de constructor y permitir establecer (set) y recuperar (get) el valor de sus atributos y tener un método que permita mostrar la información del objeto cuando sea procedente.

Crear una clase testHerencia3 con el método main donde se creen: dos productos frescos, tres productos refrigerados y cinco productos congelados (2 de ellos congelados por agua, otros 2 por agua y 1 por nitrógeno). Mostrar la información de cada producto por pantalla.

El código de la clase "Producto":

Código: [Seleccionar]
public class Producto{
    private String fechaCaducidad;
    private int numeroLote;
   
    public Producto(String fechaCaducidad, int numeroLote){
        this.fechaCaducidad = fechaCaducidad;
        this.numeroLote = numeroLote;
    }
   
    public void setFechaCaducidad(String fechaCaducidad){
        this.fechaCaducidad = fechaCaducidad;
    }
   
    public void setNumeroLote(int numeroLote){
        this.numeroLote = numeroLote;
    }
   
    public String getFechaCaducidad(){return fechaCaducidad;}
    public int getNumeroLote(){return numeroLote;}
   
    public void mostrarInfoProducto(){
        System.out.println("El producto: "+getNumeroLote()+" tiene una fecha de caducidad: "+getFechaCaducidad());
    }
}

El código de la clase "ProductoFresco":

Código: [Seleccionar]
public class ProductoFresco extends Producto{
    private String fechaEnvase;
    private String paisOrigen;
   
    public ProductoFresco(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen){
        super(fechaCaducidad, numeroLote);
        this.fechaEnvase = fechaEnvase;
        this.paisOrigen = paisOrigen;
    }
   
    public void setFechaEnvase(String fechaEnvase){
        this.fechaEnvase = fechaEnvase;
    }
   
    public void setPaisOrigen(String paisOrigen){
        this.paisOrigen = paisOrigen;
    }
   
    public String getFechaEnvase(){return fechaEnvase;}
    public String getPaisOrigen(){return paisOrigen;}
   
    public void mostrarInfoProductoFresco(){
        System.out.println("El producto: "+getNumeroLote()+" con fecha de envase: "+getFechaEnvase()+" y fecha de caducidad: "+getFechaCaducidad()+" proviene de: "+getPaisOrigen());
    }
}

El código de la clase "ProductoRefrigerado":

Código: [Seleccionar]
public class ProductoRefrigerado extends ProductoFresco{
    private int codigoOrganismoSupervision;
    private float temperaturaMantenemientoRecom;
   
    public ProductoRefrigerado(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen);
        this.temperaturaMantenemientoRecom = temperaturaMantenemientoRecom;
    }
   
    public ProductoRefrigerado(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, int codigoOrganismoSupervision, float temperaturaMantenemientoRecom){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen);
        this.codigoOrganismoSupervision = codigoOrganismoSupervision;
        this.temperaturaMantenemientoRecom = temperaturaMantenemientoRecom;
    }
   
    public void setCodigoOrganismoSupervision(int codigoOrganismoSupervision){
        this.codigoOrganismoSupervision = codigoOrganismoSupervision;
    }
   
    public void setTemperaturaMantenemientoRecom(float temperaturaMantenemientoRecom){
        this.temperaturaMantenemientoRecom = temperaturaMantenemientoRecom;
    }
   
    public int getCodigoOrganismoSupervision(){return codigoOrganismoSupervision;}
    public float getTemperaturaMantenemientoRecom(){return temperaturaMantenemientoRecom;}
   
    public void mostrarInfoProductoRefrigerado(){
        System.out.println("El producto: "+getNumeroLote()+" con fecha de envase: "+getFechaEnvase()+" y fecha de caducidad: "+getFechaCaducidad()+" proviene de: "+getPaisOrigen()+". Tiene un código de Organismo de Supervisión: "+getCodigoOrganismoSupervision()+" y su temperatura de mantinemiento recomendada es de: "+getTemperaturaMantenemientoRecom()+"C");
    }
}

El código de la clase "ProductoCongelado":

Código: [Seleccionar]
public class ProductoCongelado extends ProductoRefrigerado{
   
    public ProductoCongelado(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
    }
   
    public void mostrarInfoProductoCongelado(){
        System.out.println("El producto: "+getNumeroLote()+" envasado en fecha: "+getFechaEnvase()+" y con fecha de caducidad: "+getFechaCaducidad()+" proviene de: "+getPaisOrigen()+" y tiene una temperatura de mantenemiento recomendad de: "+getTemperaturaMantenemientoRecom()+"C");
    }
}

El código de la clase "ProductoCongeladoPorAire":

Código: [Seleccionar]
public class ProductoCongeladoPorAire extends Producto{
    private float nitrogeno;
    private float oxigeno;
    private float co2;
    private float vaporAgua;
   
    public ProductoCongeladoPorAire(String fechaCaducidad, int numeroLote, float nitrogeno, float oxigeno, float co2, float vaporAgua){
        super(fechaCaducidad, numeroLote);
        this.nitrogeno = nitrogeno;
        this.oxigeno = oxigeno;
        this.co2 = co2;
        this.vaporAgua = vaporAgua;
    }
   
    public void setNitrogeno(float nitrogeno){
        this.nitrogeno = nitrogeno;
    }
   
    public void setOxigeno(float oxigeno){
        this.oxigeno = oxigeno;
    }
   
    public void setCo2(float co2){
        this.co2 = co2;
    }
   
    public void setVaporAgua(float vaporAgua){
        this.vaporAgua = vaporAgua;
    }
   
    public float getNitrogeno(){return nitrogeno;}
    public float getOxigeno(){return oxigeno;}
    public float getCo2(){return co2;}
    public float getVaporAgua(){return vaporAgua;}
   
    public void mostrarInfoProductoCongeladoPorAire(){
        System.out.println("El producto: "+getNumeroLote()+" con fecha de caducidad: "+getFechaCaducidad()+" tiene una composición de aire como sigue: ");
        System.out.println("Nitrógeno: "+getNitrogeno()+"%");
        System.out.println("Oxígeno: "+getOxigeno()+"%");
        System.out.println("Dióxido de carbono: "+getCo2()+"%");
        System.out.println("Vapor de agua: "+getVaporAgua()+"%");
    }
}

El código de la clase "ProductoCongeladoPorAgua":

Código: [Seleccionar]
public class ProductoCongeladoPorAgua extends Producto{
    private float salinidadAgua;
   
    public ProductoCongeladoPorAgua(String fechaCaducidad, int numeroLote, float salinidadAgua){
        super(fechaCaducidad, numeroLote);
        this.salinidadAgua = salinidadAgua;
    }
   
    public void setSalinidadAgua(float salinidadAgua){
        this.salinidadAgua = salinidadAgua;
    }
   
    public float getSalinidadAgua(){return salinidadAgua;}
   
    public void mostrarInfoProductoCongeladoPorAgua(){
        System.out.println("El producto: "+getNumeroLote()+" con fecha de caducidad: "+getFechaCaducidad()+" tiene un porcentaje de salinidad: "+getSalinidadAgua()+"gr sal por litro de agua");
    }
}

El código de la clase "ProductoCongeladoPorNitrogeno":

Código: [Seleccionar]
public class ProductoCongeladoPorNitrogeno extends Producto{
    private String metodoCongelacion;
    private int tiempoExposicion;
   
    public ProductoCongeladoPorNitrogeno(String fechaCaducidad, int numeroLote, String metodoCongelacion, int tiempoExposicion){
        super(fechaCaducidad, numeroLote);
        this.metodoCongelacion = metodoCongelacion;
        this.tiempoExposicion = tiempoExposicion;
    }
   
    public void setMetodoCongelacion(String metodoCongelacion){
        this.metodoCongelacion = metodoCongelacion;
    }
   
    public void setTiempoExposicion(int tiempoExposicion){
        this.tiempoExposicion = tiempoExposicion;
    }
   
    public String getMetodoCongelacion(){return metodoCongelacion;}
    public int getTiempoExposicion(){return tiempoExposicion;}
   
    public void mostrarInfoProductoCongeladoPorNitrogeno(){
        System.out.println("El producto: "+getNumeroLote()+" con fecha de caducidad: "+getFechaCaducidad()+" tuvo un método de congelación: "+getMetodoCongelacion()+" y estuvo expuesto al nitrógeno: "+getTiempoExposicion()+"s");
    }
}

El código de la clase main "TestHerencia3":

Código: [Seleccionar]
public class TestHerencia3{
    public static void main(String []Args){
        ProductoFresco productoFresco1 = new ProductoFresco("23-06-2016",1234, "05-01-2016","Argentina");
        ProductoFresco productoFresco2 = new ProductoFresco("22-06-2016",987,"09-10-2016","España");
        ProductoRefrigerado productoRefrigerado1 = new ProductoRefrigerado("10-10-2016",345,"01-03-2016","Ecuador",5);
        ProductoRefrigerado productoRefrigerado2 = new ProductoRefrigerado("11-10-2016",346,"02-03-2016","Colombia",5);
        ProductoRefrigerado productoRefrigerado3 = new ProductoRefrigerado("12-10-2016",347,"03-03-2016","Marruecos",5);
        ProductoCongeladoPorAgua productoCongeladoPorAgua1 = new ProductoCongeladoPorAgua("13-06-2016",908,40);
        ProductoCongeladoPorAgua productoCongeladoPorAgua2 = new ProductoCongeladoPorAgua("13-08-2016",988,35);
        ProductoCongeladoPorAire productoCongeladoPorAire1 = new ProductoCongeladoPorAire("11-08-2016",354,20,20,30,30);
        ProductoCongeladoPorAire productoCongeladoPorAire2 = new ProductoCongeladoPorAire("11-11-2016",428,10,20,30,40);
        ProductoCongeladoPorNitrogeno productoCongeladoPorNitrogeno1 = new ProductoCongeladoPorNitrogeno("10-08-2016",846,"Tradicional",200);
        productoFresco1.mostrarInfoProductoFresco();
        productoFresco2.mostrarInfoProductoFresco();
        productoRefrigerado1.mostrarInfoProductoRefrigerado();
        productoRefrigerado2.mostrarInfoProductoRefrigerado();
        productoRefrigerado3.mostrarInfoProductoRefrigerado();
        productoCongeladoPorAgua1.mostrarInfoProductoCongeladoPorAgua();
        productoCongeladoPorAgua2.mostrarInfoProductoCongeladoPorAgua();
        productoCongeladoPorAire1.mostrarInfoProductoCongeladoPorAire();
        productoCongeladoPorAire2.mostrarInfoProductoCongeladoPorAire();
        productoCongeladoPorNitrogeno1.mostrarInfoProductoCongeladoPorNitrogeno();
    }
}

Gracias.

157
Buenas tardes.

Aquí os propongo una posible solución del ejercicio CU0686B del curso Java desde cero.

Citar
EJERCICIO

Se plantea desarrollar un programa Java que permita la gestión de una empresa agroalimentaria que trabaja con tres tipos de productos: productos frescos, productos refrigerados y productos congelados. Todos los productos llevan esta información común: fecha de caducidad y número de lote. A su vez, cada tipo de producto lleva alguna información específica. Los productos frescos deben llevar la fecha de envasado y el país de origen. Los productos refrigerados deben llevar el código del organismo de supervisión alimentaria. Los productos congelados deben llevar la temperatura de congelación recomendada. Crear el código de las clases Java implementando una relación de herencia desde la superclase Producto hasta las subclases ProductoFresco, ProductoRefrigerado y ProductoCongelado. Cada clase debe disponer de constructor y permitir establecer (set) y recuperar (get) el valor de sus atributos y tener un método que permita mostrar la información del objeto. Crear una clase testHerencia2 con el método main donde se cree un objeto de cada tipo y se muestren los datos de cada uno de los objetos creados.

El código de la clase "ProductoFresco":

Código: [Seleccionar]
public class ProductoFresco extends Producto{
    private String fechaEnvase;
    private String paisOrigen;
   
    public ProductoFresco(){
        super();
        fechaEnvase = "Desconocido";
        paisOrigen = "Desconocido";
    }
   
    public ProductoFresco(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen){
        super(fechaCaducidad, numeroLote);
        this.fechaEnvase = fechaEnvase;
        this.paisOrigen = paisOrigen;
    }
   
    public void setFechaEnvase(String fechaEnvase){
        this.fechaEnvase = fechaEnvase;
    }
   
    public void setPiasOrigen(String paisOrigen){
        this.paisOrigen = paisOrigen;
    }
   
    public String getFechaEnvase(){return fechaEnvase;}
    public String getPiasOrigen(){return paisOrigen;}
   
    public void mostrarInfoProductoFresco(){
        System.out.println("El producto: "+getNumeroLote()+" con fecha de envase: "+getFechaEnvase()+
        " y fecha de caducidad: "+getFechaCaducidad()+" es de país de origen: "+getPiasOrigen());
    }
}

El código de la clase "ProductoRefrigerado":

Código: [Seleccionar]
public class ProductoRefrigerado extends Producto{
    private int codigoOrganismoSupervision;
   
    public ProductoRefrigerado(){
        super();
        codigoOrganismoSupervision = 0;
    }
   
    public ProductoRefrigerado(String fechaCaducidad, int numeroLote, int codigoOrganismoSupervision){
        super(fechaCaducidad, numeroLote);
        this.codigoOrganismoSupervision = codigoOrganismoSupervision;
    }
   
    public void setCodigoOrganismoSupervision(int codigoOrganismoSupervision){
        this.codigoOrganismoSupervision = codigoOrganismoSupervision;
    }
   
    public int getCodigoOrganismoSupervision(){return codigoOrganismoSupervision; }
   
    public void mostrarInfoProductoRefrigerado(){
        System.out.println("El producto: "+getNumeroLote()+" y con código de Organismo de Supervisión: "+
        getCodigoOrganismoSupervision()+" tiene fecha de caducidad: "+getFechaCaducidad());
    }
}

El código de la clase "ProductoCongelado":

Código: [Seleccionar]
public class ProductoCongelado extends Producto{
    private float temperaturaCongelacionRecom;
   
    public ProductoCongelado(){
        super();
        temperaturaCongelacionRecom = 0;
    }
   
    public ProductoCongelado(String fechaCaducidad, int numeroLote, float temperaturaCongelacionRecom){
        super(fechaCaducidad, numeroLote);
        this.temperaturaCongelacionRecom = temperaturaCongelacionRecom;
    }
   
    public void setTemperaturaCongelacionRecom(float temperaturaCongelacionRecom){
        this.temperaturaCongelacionRecom = temperaturaCongelacionRecom;
    }
   
    public float getTemperaturaCongelacionRecom(){return temperaturaCongelacionRecom;}
   
    public void mostrarInfoProductoCongelado(){
        System.out.println("El producto: "+getNumeroLote()+" con fecha de caducidad: "+getFechaCaducidad()+
        " tiene una temperatura de congelación recomendada de: "+getTemperaturaCongelacionRecom()+"C");
    }
}

El código de la clase "Producto":

Código: [Seleccionar]
public class Producto{
    private String fechaCaducidad;
    private int numeroLote;
   
    public Producto(){
        fechaCaducidad = "Desconocida";
        numeroLote = 0;
    }
   
    public Producto(String fechaCaducidad, int numeroLote){
        this.fechaCaducidad = fechaCaducidad;
        this.numeroLote = numeroLote;
    }
   
    public void setFechaCaducidad(String fechaCaducidad){
        this.fechaCaducidad = fechaCaducidad;
    }
   
    public void setNumeroLote(int numeroLote){
        this.numeroLote = numeroLote;
    }
   
    public String getFechaCaducidad(){return fechaCaducidad;}
    public int getNumeroLote(){return numeroLote;}
}

El código de la clase main "TestHerencia2":

Código: [Seleccionar]
public class TestHerencia2{
    public static void main(String []Args){
        //Crear objetos nuevos con constructores con parámetros
        ProductoFresco productoFresco1 = new ProductoFresco("20-10-2016", 3409, "20-08-2016", "España");
        ProductoRefrigerado productoRefrigerado1 = new ProductoRefrigerado("30-10-2016", 784, 1200);
        ProductoCongelado productoCongelado1 = new ProductoCongelado("20-11-2016", 7345, -10);
        System.out.println("Productos(objetos) creados con constructores con parámetros:");
        productoFresco1.mostrarInfoProductoFresco();
        productoRefrigerado1.mostrarInfoProductoRefrigerado();
        productoCongelado1.mostrarInfoProductoCongelado();
        //Crear objetos nuevos con constructores sin parámetros
        ProductoFresco productoFresco2 = new ProductoFresco();
        ProductoRefrigerado productoRefrigerado2 = new ProductoRefrigerado();
        ProductoCongelado productoCongelado2 = new ProductoCongelado();
        System.out.println("Productos(objetos) creados con constructores sin parámetros:");
        productoFresco2.mostrarInfoProductoFresco();
        productoRefrigerado2.mostrarInfoProductoRefrigerado();
        productoCongelado2.mostrarInfoProductoCongelado();
       
    }
}

Gracias.

158
Hola compañeros.

Expongo una posible solución del ejercicio CU00682B del curso Java.

Citar
EJERCICIO

Declara una clase que represente el tipo enumerado que define tipos de piedra con los valores CALIZA, MARMOL, PIZARRA, CUARZITA. Si sus pesos específicos son de 1200, 1423.55, 1325 y 1466.22, crea un programa que muestre el peso de los palets de cada uno de los tipos de piedra.

El código de la clase "TipoDePiedra":

Código: [Seleccionar]
public enum TipoDePiedra{
    CALIZA(1200),
    MARMOL(1423.55),
    PIZARRA(1325),
    CUARZITA(1466.22);
   
    private final double pesoEspecifico;
   
    TipoDePiedra(double pesoEspecifico){
        this.pesoEspecifico = pesoEspecifico;
    }
   
    public double getPesoEspecifico(){return pesoEspecifico;}
}

El código de la clase "TestTipoDePiedra":

Código: [Seleccionar]
public class TestTipoDePiedra{
    public static void main(String []Args){
        TipoDePiedra piedraElegida = TipoDePiedra.CALIZA;
        System.out.println("Peso de los palets de cada piedra:");
        for(TipoDePiedra tmp : piedraElegida.values()){
            System.out.println("El palet de: "+tmp.toString()+" pesa: "+(2.27f*(float)tmp.getPesoEspecifico())+"kg");
        }
    }
}

Gracias

159
Buenas noches.

Dejo aquí una solución del ejercicio CU00681B del curso Java desde cero.

Citar
EJERCICIO

Crea una clase Vehiculo donde definas un tipo enumerado MarcaDeVehiculo cuyos valores posibles serán FORD, TOYOTA, SUZUKI, RENAULT, SEAT. Establece como atributos de la clase matricula (tipo String) y marca (tipo MarcaDeVehiculo) y crea los métodos getters (para obtener) y setters (para establecer el valor) de los atributos. Escribe un pequeño programa de prueba donde verifiques que los métodos funcionan correctamente.

El código de la clase "Vehiculo":

Código: [Seleccionar]
/**
 * Clase para crear objetos "Vehiculo" de tipo "enum" con atributos "matricula" y "marca".
 * @author: Dimitar S. Stefanov
 * version: 11/03/2016/A
 *  @see <a href="http://aprenderaprogramar.com">aprenderaprogramar.com - Didáctica en programación</a>
 */
public class Vehiculo{
    enum MarcaDeVehiculo {FORD, TOYOTA, SUZUKI, RENUALT, SEAT};
   
    private String matricula;
    private MarcaDeVehiculo marca;
   
    /**
     * Constructor del objeto que define los atributos.
     */
    public Vehiculo(){
        matricula = "";
        marca = null;
    }
   
    /**
     * Mediante un parámetro se establece la matrícula del vehículo
     * @param matricula El valor del parámetro que se introduzca será el valor de la matrícula. 
     */
    public void setMatricula(String matricula){
        this.matricula = matricula;
    }
   
    /**
     * Mediante un parámetro se establece la matrícula del vehículo
     * @param marca El valor del parámetro que se introduzca será el valor de la marca. 
     */
    public void setMarca(MarcaDeVehiculo marca){
        this.marca = marca;
    }
   
    /**
     * Método para obtener la matrícula del Objeto
     * @param Devuelve el valor de la matrícula.
     */
    public String getMatricula(){return matricula;}
   
    /**
     * Método para obtener la marca del Objeto.
     * @param Devuelve el valor de la marca.
     */
    public MarcaDeVehiculo getMarca(){return marca;}
}

El código de la clase "Test":

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

public class Test{
    public static void main(String []Args){
        String entradaTeclado;
        Vehiculo vehiculo = new Vehiculo();
        Scanner sc = new Scanner(System.in);
        System.out.println("\f");
        System.out.print("Entra matrícula: ");
        entradaTeclado = sc.nextLine();
        vehiculo.setMatricula(entradaTeclado);
        System.out.println("La matrícula del vehícuo es: "+vehiculo.getMatricula());
        System.out.println("Entra alguna de las siguentes marcas de vechículos: Ford, Toyota, Suzuki, Renault, Seat ");
        entradaTeclado = sc.nextLine();
        if(entradaTeclado.equalsIgnoreCase("Ford")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.FORD);
       }else if(entradaTeclado.equalsIgnoreCase("Toyota")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.TOYOTA);
        }else if(entradaTeclado.equalsIgnoreCase("Suzuki")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.SUZUKI);
        }else if(entradaTeclado.equalsIgnoreCase("Renault")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.SUZUKI);
        }else if(entradaTeclado.equalsIgnoreCase("Seat")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.SEAT);
        }
        else{
            System.out.println("No has elegido ninguna de las marcas enumaradas.");
        }
       
        if(entradaTeclado.equalsIgnoreCase("Ford") || entradaTeclado.equalsIgnoreCase("Toyota") || entradaTeclado.equalsIgnoreCase("Suzuki") || entradaTeclado.equalsIgnoreCase("Renault") || entradaTeclado.equalsIgnoreCase("Seat")){
        System.out.println("La marca es: "+vehiculo.getMarca());
       }else{
        System.out.println("Inténtalo de nuevo :)");
        }
    }
}

Gracias

160
Buenas tardes.

Propongo una solución del ejercicio CU00680B del curso Java desde cero.

Citar
EJERCICIO

Crea una clase denominada miniCalculadoraEjemplo que tenga dos métodos (basados en el uso de métodos de la clase Math): un método valorAbsoluto que recibe un número de tipo double y devuelva su valor absoluto, y otro método raizCuadrada que reciba un número de tipo double y devuelva su raíz cuadrada. Documenta esta clase conforme a los estándares JavaDoc y comprueba cómo se visualiza la documentación.

El código de la clase "MiniCalculadoraEjemplo":

Código: [Seleccionar]
import java.lang.Math;

/**
 * Esta clase no define objetos, simplemente contiene dos métodos que devuelven el valor absoluto y la raíz cuadrada partiendo del parámetro que se ha ingresado.
 * @author: Dimitar S. Stefanov
 * @version: 11/03/2016/A
 * @see <a href="http://aprenderaprogramar.com">aprenderaprogramar.com - Didáctica en programación</a>
 */
public class miniCalculadoraEjemplo{
   
    /**
     * Esta clase carece de constructor
     */
    public miniCalculadoraEjemplo(){
        //Nada que construir
    }
   
     /**
      * Método que devuelve el valor absoluto a partir del parámetro ingresado.
      * @param El número al que se le devolverá su valor absoluto.
      * @return El valor absoluto del número pasado como parámetro.
      */
     public static double valorAbsoluto(double valor_numero){
         return Math.abs(valor_numero);
     }
     
     /**
      * Método que calcula la raíz cuadrada de un número de tipo decimal doble (double) que se pasa como parámetro.
      * @param Número, de tipo double (decimal doble), al que se le calculará su raíz cuadrada
      * @return La raíz cuadrada del parámetro (que debe ser un número tipo double)
      */
     public static double raizCuadrada(double valor_numero){
         return Math.sqrt(valor_numero);
     }
}

Gracias.

Páginas: 1 ... 3 4 5 6 7 [8] 9 10 11 12 13 14

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