41
Aprender a programar desde cero / Re:CU00647B Metodos abs(double a) y sqrt(double a) java.
« en: 27 de Diciembre 2014, 16:10 »
Ejercicio correcto
!
![Gui�ar ;)](https://aprenderaprogramar.com/foros/Smileys/default/wink.gif)
Aprende a programar con pseudocódigo con el libro "Aprende a programar con pseudocódigo, diagramas de flujo y ejercicios resueltos en C. 442 pgs. Editorial aprenderaprogramar.com.
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.
public class MultiplicarDieces
{
public MultiplicarDieces()
{
//Constructor vacio
}
/*A partir de la entrega CU00645B comenzaremos a conocer y a hacer uso del api de java y sus ventajas, como usar un metodo ya creado para obtener un resultado mas
* preciso al realizar esta operación*/
public double multiplicadorPorDieces(double n, int m)
{
int resultado = 1;
for(int i=1; i<=m; i++){resultado = resultado * 10;}
return Math.round(n * resultado * 100000) / 100000;//método (round(double a);) de la clase Math del api de java
}
}
Aquí usamos el método round(double a); de la clase Math de la librería de java./**
* Feliz Navidad para todos, familia de aprenderaprogramar.com
*
* @author J.lopez
* @version 24122014
*/
public class FelizNavidad
{ /**Preferiblemente ejecutar usando el IDE BlueJ, para una correcta visualización.*/
public static void main(String[] args)
{
int i = 1, j = 1, k=1;
String efecto = "*", efectoLineaFinal = "", estrella = "", completivo = "";
while(k<20)
{
if(i % 2 == 0)
{
efecto = "★"; estrella = "☆"; completivo = "!!";
}
else
{
efecto = "☆"; estrella = "★"; completivo = "";
}
while(j<19)
{
if(i % 2 == 0)
{
efecto = "★";
}
else
{
efecto = "☆";
}
efectoLineaFinal += "!" + efecto; j++;
}
try{Thread.sleep(1000);}catch(Exception e){}
k=k+1;
System.out.println("\f "+estrella+
"\n "+efecto+"Paz"+efecto+
"\n "+efecto+"Unión"+efecto+
"\n "+efecto+"Alegrías"+efecto+
"\n "+efecto+"Esperanza★"+efecto+
"\n "+efecto+"Amor✴y✪Éxito"+efecto+
"\n "+efecto+"Realizaciones★"+efecto+
"\n "+efecto+"Respeto❆armonía★"+efecto+
"\n "+efecto+"Salud☆⋆solidaridad★"+efecto+
"\n "+efecto+"Felicidad✪☆Humildad⋆★"+efecto+
"\n "+efecto+"Cofraternización☆✪Pureza"+efecto+
"\n "+efecto+"★Amistad☆Sabiduría★❆Perdón"+efecto+" █████ "+
"\n "+efecto+"Igualdad✴Libertad☆BuenaSuerte"+efecto+" █████████ "+
"\n "+efecto+"Sinceridad☆Estima✪❆Fraternidad✴"+efecto+" ████████ "+
"\n "+efecto+"Equilibrio✪☆Dignidad☆⋆Benevolencia"+efecto+" ███████ "+
"\n "+efecto+"Fé❆★Bondad☆Paciencia✴Ventura❆Fuerza"+efecto+" ████████ "+
"\n "+efecto+"Tenacidad★✪★Prosperidad☆Reconocimiento★"+efecto+" ██████████████"+
"\n "+efecto+"Son⋆mis✴★✴sinceros☆deseos★en✴estaNavidad"+efecto+" ███▒▒░░░░░░░░▒"+
"\n "+efectoLineaFinal+completivo+" ▒░░░░░ ⓤ░░ⓤ░░▒ "+
"\n [▒▒▒]"+" ╔══╗──╔╦═╗ ▒░░░░░░░░ >░░░▒"+
"\n [▒▒▒]"+" ║═╦╩╦╗╠╬═║ ██▒░░░░░·︾·░░▒"+
"\n [▒▒▒]"+" ║╔╣╩╣╚╣║═╣ ████▒░░░░░░░▒"+
"\n [▒▒▒]"+" ╚╝╚═╩═╩╩═╝ ▒▒███████████▒▒ "+
"\n [▒▒▒]"+" ▒#░░░░░▒▒▒▒█J██░░░▒"+
"\n [▒▒▒]"+" ╔═╦╗─────╔╗╔╗───╔╗ ▒░░░▒░░░░░░████░░░▒"+
"\n [▒▒▒]"+" ║║║╠═╦═╦═╬╬╝╠═╗╔╝║ ▒░░░░▒░░░░░█l███░░░▒ "+
"\n [▒▒▒]"+" ║║║║╬╚╗║╔╣║╬║╬╚╣╬║ ▒░░░░░▒░░░░█o███░░░▒"+
"\n [▒▒▒]"+" ╚╩═╩══╩═╝╚╩═╩══╩═╝ ▒░░░░▒░░░░░█p███░▒▒ "+
"\n [▒▒▒]"+" ▒#▒▒▒▒▒░###░█e██░░"+
"\n [▒▒▒]"+" ▒#▒░░░░░░░░░█z█░▒░▒ "+
"\n [FELIZ]"+" ▒░░░░░░░░░░░░░░Ѻ░░░▒ "+
"\n [NAVIDAD]"+" ▒░░░░░░░░░░░░░░░░░░░▒ "+
"\n [COMPAÑEROS☆]"+" ▒░░░░░░░░░░░░░░░Ѻ░░░░▒"+
"\n [▒▒▒☆DE▒▒▒]"+" ▒░░░░░░░░░░░░░░░░░░░▒"+
"\n [aprenderaprogramar.com]"+" #▒░░░░░░░░░░░░░Ѻ░░░░▒ "+
"\n๑۩۩.. ..۩۩๑๑۩۩.. ..۩۩๑๑۩۩.. ..۩۩๑๑۩۩..[▒▒▒▒▒▒▒▒▒▒▒▒▒▒]๑۩۩.. ..۩۩๑๑۩۩.. ..۩۩๑๑۩۩.. ..۩۩๑๑۩۩.. .##▒░░░░░░░░░░░░░░░░##..۩۩๑๑۩۩.. ..۩۩๑๑۩۩.. ..۩۩๑๑۩۩....۩۩๑๑۩۩..");
i++;
j = 1;
efectoLineaFinal = "";
}
}
}
//metodo que devuelve el resultado de multiplicar el valor de la variable base por el resultado de elevar 10 al valor de la variable exponente
public double multiplicadorPorDieces(double base, int exponente){
int resultado = 1;
for(int i=1; i<=exponente; i++){resultado = resultado * 10;}
return Math.round(base * resultado * 100000) / 100000;
}
/**
* Esta clase describe un objeto ArrayList;
* compuesto por objetos de la clase Famoso
* @div_vz
*/
import java.util.List;//No has usado este import, su correcto uso se hace declarando la variable listaCantantesFamosos del tipo dinámico "List" (polimorfismo CU00688B,91B)
import java.util.ArrayList;
import java.util.Iterator;
public class ListaCantantesFamosos
{
private List<Famoso> listaCantantesFamosos;//Declaramos la variable listaCantantesFamosos del tipo dinamico "List"
//private String nombreLista; esta variable la eliminamos
/**
* constructor:
* Crea un nuevo objeto de tipo ArrayList;
* contiene dos objetos Famoso
*/
public ListaCantantesFamosos() {
listaCantantesFamosos = new ArrayList<Famoso>();//Le asignamos como valor a la variable listaCantantesFamosos un objeto tipo ArrayList (que a su vez es tipo List)
listaCantantesFamosos.add(new Famoso("Michael Jackson", "Thriller"));
listaCantantesFamosos.add(new Famoso("Madonna", "All I want is you"));
}
//Método para añadir un objeto de tipo Famoso al objeto listaCantantesFamosos
public void addFamoso()
{
Famoso cantante = new Famoso();//Objeto Famoso
EntradaPalabras entrada = new EntradaPalabras();//Instancia manejadora de entradas de datos por teclado.
System.out.println("\nPor favor! Introduzca el nombre del cantante: ");
cantante.setNombre(entrada.pedirPalabra());//Le pasamos como parámetro un método de la clase EntradaPalabras que pide una entrada por teclado y devuelve un String
System.out.println("\nPor favor! Introduzca el nombre del disco del cantante: ");
cantante.setDiscoMasVendido(entrada.pedirPalabra());
listaCantantesFamosos.add(cantante);//Agregamos el objeto Famoso a la lista, con sus atributos por defecto previamente modificados por métodos setters.
}
//Método para imprimir los objetos de la lista usando Iterator
public void imprimirLista() {
Iterator<Famoso> it = listaCantantesFamosos.iterator();
Famoso tmpCantante;
int i = 0;
while (it.hasNext()) { //usamos while para recorrer todos los elementos de la lista
//Aprovecho el metodo getTamaño para poder imprimir el orden numerado//No es necesario usar el bucle for aquí, el mismo while cumple la tarea que necesitas
tmpCantante = it.next();
System.out.println("\n" + (i+1) + " - Nombre: " + tmpCantante.getNombre() +
"\n Disco más vendido: " + tmpCantante.getDiscoMasVendido());
i++;
}
}
//Método que devuelve el tamaño del objeto listaCantantesFamosos
public int getTamaño() {//Este metodo es opcional, yo en su lugar usaría directamente el metodo size();
return listaCantantesFamosos.size();
}
}
/**
* Esta clase describe el metodo main;
* dirige el programa que relaciona las clases:
* Famoso y ListaCantantesFamoso
* @div_vz
*/
public class TestCantantesFamosos
{
public static void main(String[] args) {
ListaCantantesFamosos lista = new ListaCantantesFamosos();
EntradaPalabras entrada = new EntradaPalabras();
System.out.println("________________________________________________________\nEsta es una lista de cantantes famosos y sus superventas\nLa lista inicial esta compuesta por " +
lista.getTamaño() + " cantantes famosos.\n________________________________________________________\n\n------- CANTANTES FAMOSOS -------\n");
String confirmador = "";
lista.imprimirLista();
System.out.println("\n\n________________________________________________________\nAgregue otro cantante mas a nuestra lista.\n________________________________________________________");
lista.addFamoso();
System.out.println("\fEsta es su lista actualizada compuesta por " + (lista.getTamaño()) + " cantantes");
lista.imprimirLista();
//utilizo while para crear un bucle que me permita añadir todas las referencias que se deseen
boolean lanzador = true;
while (lanzador) { //No es necesaria la sentencia: lanzador == true, como se muestra ahora es igual y es mas apropiado, donde lanzador siempre sera evaluado como true
System.out.println("\n¿Desea añadir un nuevo cantante a la lista?(y/n)");
confirmador = entrada.pedirPalabra();
if (confirmador.equalsIgnoreCase("y")) {
lista.addFamoso();
System.out.println("\f________________________________________________________\nEsta es su lista actualizada compuesta por " + (lista.getTamaño()) +
" cantantes\n________________________________________________________");
lista.imprimirLista();
} else {
lanzador = false;
System.out.println("\nEspero que haya disfrutado del programa.\n\nDesarrollado por @dib_vz");
}
}
}
}
import java.util.Scanner;
public class EntradaPalabras
{
//Eliminamos la variable: private String palabra, una clase que sirve como entrada de teclado no necesariamente debe de guardar lo que se escriba,
//el String ingresado por teclado puede ser guardado directamente en la variable tipo string deseada, incluso si esta variable es de otra clase.
//constructor general
public EntradaPalabras()
{
//Constructor vació, no llamamos al método pedirPalabra en el constructor para evitar tener que crear un nuevo objeto para cada entrada de datos.
}
//método para pedir una entrada de teclado, modificamos de tipo procedimiento (void) a tipo funcion (String);
public String pedirPalabra() {
Scanner entradaEscaner = new Scanner(System.in);
return entradaEscaner.nextLine();
}
}
He intentado compilarlo y me salta una exceción "package javazoom.jl.decoder does not exist"Ciertamente el proyecto usa librerías extras que incorporan packages como javazoom que no incluí en el archivo.rar del proyecto. Aquí dejo las librerías adicionales necesarias y las instrucciones de como incorporarlas al proyecto. Link: http://www.mediafire.com/download/p7p7tabxzab1cxc/McAppExtrasLibraries.rar
en la clase "ReproductorMp3" línea import javazoom.jl.decoder.JavaLayerException;
¿Falta el código de este paquete?
Si pulso sobre el disco para abrir otro mp3 mientras está sonando el que he abierto, desaparece la imagen. Si le doy a cancelar, la sigue sonando la música pero no aparece la imagen.Esto se debe a una linea de codigo (if(!"".equals(songTitle)){songTitle=""; estado.setIcon(null);})en la clase McApp en el método musicMouseClicked, esta linea la declare tratando de buscar una solucion al bug ya mencionado, pero es fácil de corregir.
Ahí parece que tienes algún problema en el control de esa imagen, supongo que no debería desaparecer así porque sí.
Si pulso en el icono del disco, desaparece la imagen.Cada vez que se pulse el icono de música (evento mouseClicked) , la imagen de estado desaparecerá debido a la instrucción music.setIcon(null); pero como te comente, esto es fácil de corregir.
Además, mientras está sonando la canción de mely, en ocasiones la música se para y se sigue viendo la imagen.Aquí me descuide, creo que tengo que agregar una instrucción que desaparezca la imagen de estado si la música a terminado de reproducirse.
Hay una cosa que es extraña: la imagen de mely parece un vídeo ¿qué tamaño tiene? ¿puede ser que sea demasiado tamaño? ¿has probado a poner una imagen de pequeño tamaño de archivo?La imagen de mely es un archivo.gif con tamaño de 514kb, creada a partir de escenas cortas de un vídeo, es 400kb mayor que el gif por defecto para las canciones normales. Si, eh probado usar una imagen de menor tamaño y de formato.png en lugar de la imagen mely pero el bug continua.
Aunque no he podido compilarlo pienso que si tuviera que depurar empezaría por separar el código de la calculadora y el código del reproductor mp3, es decir, crear dos programas. Tal y como lo tienes puede resultar complicado depurar y ver hasta qué punto te está influyendo una cosa y otra.En la versión 6 del proyecto, aplicare estas y cualquier otra recomendación que me puedas o me puedan dar de cara a mejorar la eficiencia del programa.
Y finalmente felicitarte por el buen nivel de programación que se puede apreciar!!!Muchas gracias,
Lo compilo y va bien pero creo que tengo algo mal porque al probar los objetos creados no me relacionan las clases.
En algunas circunstancias BlueJ puede mantener
erróneamente indicadores de relación que no son ciertos. En estos casos, las flechas pueden eliminarse
seleccionándolas y con botón derecho eligiendo la opción Remove. También pueden crearse eligiendo
el botón ----> en la parte superior izquierda de la pantalla y a continuación pulsando primero el icono de
la “clase que usa” y luego el icono de la “clase que es usada”.
public class Taxi
{
private String matricula;
/**Esto es un comentario de constructor.
*Si creas un objeto Taxi usando este constructor (constructor general) se mostrara este mensaje en la ventana de asignación de nombre para objetos:
Asignación de contenido, inicialización de una variable
Es importante y recomendado para un buen estilo de programación
En conclusión,se mostrara todo lo aquí escrito.*/
public Taxi()//Constructor general
{
matricula = "Desconocida";
}
//Si creas un objeto Taxi usando este constructor (Constructor que recibe un parámetro) no se mostrara ningún mensaje en la ventana de asignación de nombre de objetos
//Esto se debe a que estos comentarios no están asociados a este constructor (para asociarlo debe de estar escrito así: /**aquí el mensaje*/)
public Taxi(String valorMatricula)//Constructor que recibe un parámetro
{
matricula = valorMatricula;
}
}
import java.util.List;//Importamos las clases necesarias
import java.util.ArrayList;
public class TestArrayList
{
public static void main(String[] args)
{
List<String> lista = new ArrayList<String>();/*Declaramos la lista del tipo dinámico "List" y creamos el objeto que contendrá la variable lista
(un ArrayList de String)*/
lista.add("Azul");//Agregamos elementos (objetos tipo String) a la lista
lista.add("Rojo");
lista.add("Blanco");
lista.add("Amarillo");
lista.add("Negro");
System.out.println("Estos son los " + lista.size() + " colores que contiene la lista:\n");//Mensaje opcional
for(String color: lista)//Usamos un for each (for extendido) para recorrer la lista y analizar su contenido
{
System.out.println("\t\t " + color);//Cada elemento que se encuentre durante la ejecución del for each sera mostrado por pantalla
}
}
}
O bien podríamos usar el método iterator(); de la clase Iterator para realizar la misma tarea, como se muestra en el siguiente codigo:import java.util.List;//Importamos las clases necesarias
import java.util.ArrayList;
import java.util.Iterator;
public class TestArrayList
{
public static void main(String[] args)
{
List<String> lista = new ArrayList<String>();/*Declaramos la lista del tipo dinámico "List" y creamos el objeto que contendrá la variable lista
(un ArrayList de String)*/
lista.add("Azul");//Agregamos elementos (objetos tipo String) a la lista
lista.add("Rojo");
lista.add("Blanco");
lista.add("Amarillo");
lista.add("Negro");
System.out.println("Estos son los " + lista.size() + " colores que contiene la lista:\n");//Mensaje opcional
Iterator<String> it = lista.iterator();//Creamos un objeto tipo Iterator que contendrá una especie de copia de cada elemento que contenga la lista
while(it.hasNext())/*Usamos un ciclo while combinado con métodos propios de la clase Iterator invocados sobre el objeto it previamente creado, para recorrer la lista
y analizar su contenido*/
{
System.out.println("\t\t " + it.next());//Cada elemento que se encuentre durante cada ciclo del bucle while sera mostrado por pantalla
}
}
}
Iterator<CantanteFamoso> it = lista.iterator();
CantanteFamoso tmpObjetoCantante;
while(it.hasNext())
{
tmpObjetoCantante = it.next();
System.out.println("Nombre: " + tmpObjetoCantante.getNombre() + ". Disco con mas ventas: " + tmpObjetoCantante.getDiscoConMasVentas() + ".");
}
Hola Rodrigo_avia.
Realmente no afecta al funcionamiento del programa donde situas los métodos setters y getters. Sin embargo es recomendable ponerlos juntos. Dependiendo de tus gustos o preferencias, o de lo te exijan en un puesto de trabajo, se pueden colocar antes o después del resto de métodos o funciones de la clase. No importa si pones antes los getters y después los setters o lo haces al revés. También puedes poner un método set y a continuación su método get, y así sucesivamente con cada atributo de la clase.
Personalmente yo normalmente establezco los métodos setters y getters tras la declaración de los constructores de la clase (salvo algún caso particular). Y suelo intercalarlos: establezco el set y el get para un atributo, después el del siguiente, etc etc. Todo ello con el fin de facilitar la lectura y comprensión del código.
Una vez dicho esto... sientete libre de hacerlo como prefieras.
Un saludo!
El nombre de un método set o un método get ha de ser exactamente el mismo nombre de la variable relacionada a este, mas el prefijo get o set ante puesto a el nombre de dicha variable.
Me surgió la duda, puedo hacer que el programa SE DETENGA, en caso de que durante el "For", en la pregunta 3 o 4 o cual sea, yo escriba "Salir" ? Lo intenté y fracasé alguien me ayuda?Para tu bucle finalizar es necesario que la variable i alcance un valor mayor a 10, para lograr lo que quieres bastaría con igualar el valor de i a (un numero mayor que 10) 11 mediante un condicional if usando como condición que el valor de la variable palabraEscrita sea igual a el String "Salir".
import java.util.Scanner;
public class AnalizarPalabra
{
public static void main (String [] args)
{
String palabraEscrita = "";
for (int i=0;i<10;i++){//Indicamos el tipo dinámico (int) de i en el mismo bucle for
System.out.println("Introduzca una palabra: ");
Scanner palabra = new Scanner(System.in);
palabraEscrita = palabra.next();
if(!palabraEscrita.equals("salir"))//El operador ! antes de la condición, niega el valor de esta, se leería: Si la palabra escrita NO ES IGUAL a salir.
{
System.out.println("La palabra \"" + palabraEscrita + "\" " + "ha sido introducida");
}
int largo = palabraEscrita.length();
boolean inicio = false;
if(palabraEscrita.substring(0,1).equalsIgnoreCase("a")){inicio = true;}/*Usamos el método subString para analizar la primera letra de la palabra escrita
y usamos el método equalsIgnoreCase(String str); para que el programa ignore diferencia de mayúsculas y minúsculas ("a" o "A")*/
if(palabraEscrita.equals("salir"))//Este condicional finalizaría el bucle en caso de cumplirse, puesto que asignara a "i" un valor mayor que 10.
{
i += 11; System.out.println("\fPrograma finalizado...");//Usar el operador += en esta linea es lo mismo que decir: i = i + 11;
}
else if (largo<5 && inicio){System.out.println("Tiene menos de 5 caracteres y empieza por la letra: " + palabraEscrita.substring(0,1));/*Extraemos
la primera letra de la palabra escrita, podria ser "a" o "A"*/
}else if (largo<5 && !inicio){System.out.println("Tiene menos de 5 caracteres y NO empieza por la letra a/A");//Usamos el operador ! en lugar de == false/true
}else if (largo<=15 && inicio){System.out.println("Tiene entre 5 y 15 caracteres y empieza por la letra: " + palabraEscrita.substring(0,1));
}else if (largo<=15 && !inicio){System.out.println("Tiene entre 5 y 15 caracteres y NO empieza por la letra a/A");
}else if (largo>15 && inicio){System.out.println("Tiene más de 15 caracteres y empieza por la letra: " + palabraEscrita.substring(0,1));
}else if (largo>15 && !inicio){System.out.println("Tiene más de 15 caracteres y NO empieza por la letra a/A");
}
}
}
}
Espero que encuentres algo útil.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