- ¿ Cuál es la palabra clave empleada en Java SE 8 (y otras versiones), si se quiere que una clase herede (inheritance) variables y métodos de otra clase ?
- Suponga que se tienen dos clases: Option (instrumento financiero) y Equity_Option (opción sobre acciones). La clase Equity_Option hereda (inheritance) variables y métodos de la clase Option si tienen control de acceso:
- ¿ Cuantas superclases se puede especificar para cada sub-clase ?
-
¿ Cuál es el resultado del siguiente código ?
public class A {
private int val1;
public int val2;
public A(int val1, int val2){
this.val1 = val1;
this.val2 = val2;
}
}
public class B extends A {
public B(int val1, int val2){
super(val1,val2);
}
public void print(){
System.out.println("A.val1++ :" + val1++);
System.out.println("A.val2++ : " + val2++);
}
}public class Certification1 {
public static void main(String[] args) {
try{
B b1 = new B(2,3);
b1.print();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
} - Es verdadera / falsa la siguiente afirmación: "Los miembros de una clase declarados privados son sólo visibles dentro de la misma clase. No se puede acceder a ellos desde ningún otro sitio, incluido las subclases".
- ¿Cómo puedo acceder a la variable val1 de la clase A del ejercicio 4?
- ¿ Cómo se puede llamar el método print() de la clase A desde main ?
- Razona si la siguiente afirmación es verdadera/falsa:" Una clase es Abstracta, si y solo si, todos sus métodos son abstractos."
-
¿ Qué usos tiene la palabra final en Java ?
Monday, July 31, 2017
Ejercicio 2
Ejercicio 1
Defina la clase Persona con las siguientes variables:
- nombre
- apellido
- sexo
- edad
- Grado (tipo enum con las siguientes opciones: Contadurías, Sistemas, Medicina)
- Semestre (tipo int [0-10])
En este ejercicio, desarrolle el diagrama UML (busque en internet) de las clases y su relación. Todas las variables son privadas, por lo tanto implemente los setters y getters necesarios para poder desarrollar el resumen solicitado.
package certification1;
public class persona {
public enum sex{H,M};
protected final String nombre;
protected final String apellido;
protected final int edad;
protected final persona.sex sexo;
public persona(String nombre, String apellido, int edad, Object sexo){
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
this.sexo = (sex)sexo;
}
}
package certification1;
public class estudiante extends persona {
private final grado grad;
public enum grado{Medicina, Contaduria, Sistemas};
public estudiante(String nombre, String apellido, int edad, sex sexo, Object estudio){
super(nombre,apellido,edad,sexo);
grad = (grado)estudio;
}
public void print(){
System.out.println(super.nombre + " " + super.apellido + " de sexo: " + super.sexo + ", tiene " + super.edad + " años y estudia: " + grad);
}
}
package certification1;
public class Certification1 {
public static void main(String[] args) {
try{
estudiante e1 = new estudiante("Mauricio","Bedoya",37,persona.sex.H,estudiante.grado.Contaduria);
e1.print();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Ejercicio 13
Desarrolle un programa que
- Pregunte al usuario: Por favor digite dos números:
- Especifique operación a desarrollar:
- Suma
- Resta
- Multiplicar
- Dividir
- Modulo
- Después de dar el resultado, pregunta al usuario: Desea salir del programa ? (y/n)
package certification1;
import java.util.Scanner;
public class calculadora {
private double val1, val2, result;
private final Scanner read = new Scanner(System.in);
private String continuar = "N";
private int operacion;
private boolean stop = true;
private void suma(){
result = val1 + val2;
}
private void resta(){
result = val1 - val2;
}
private void multiplicar(){
result = val1 * val2;
}
private void dividir(){
result = val1 / val2;
}
private void modulo(){
result = val1 % val2;
}
public void start(){
while(stop){
switch(continuar){
case "N":
System.out.print("Digite dos numeros: ");
val1 = read.nextDouble();
val2 = read.nextDouble();
menu();
operacion = read.nextInt();
operar(operacion);
mensaje_final();
break;
case "Y":
stop = false;
break;
default:
System.out.println("Opción no valida.");
continuar = "N";
break;
}
}
}
private void operar(int x){
switch(x){
case 1:
suma();
break;
case 2:
resta();
break;
case 3:
multiplicar();
break;
case 4:
dividir();
break;
case 5:
modulo();
break;
default:
System.err.println("Opción erronea");
result = 0;
break;
}
System.out.println("Resultado: " + result);
}
private void menu(){
System.out.println("Especifique operación a desarrollar.");
System.out.println("1) Suma");
System.out.println("2) Resta");
System.out.println("3) Multiplicación");
System.out.println("4) División");
System.out.println("5) Modulo");
System.out.print(":");
}
private void mensaje_final(){
System.out.print("Desea salir del programa ? (Y/N)");
continuar = read.next().toUpperCase();
}
}
package certification1;
public class Certification1 {
public static void main(String[] args) {
try{
calculadora c1 = new calculadora();
c1.start();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Sunday, July 30, 2017
Class Ejercicio 9
Defina una clase con un método: acumulate2zero(int z) que calcule la suma acumulada desde z a cero. Realice los controles correspondientes.
Defino el método estatico accumulate2zero(int z) de la clase recurrence.
package certification1;
public class Recurrence {
static int accumulate2zero(int x){
assert(x > 0);
if(x == 1){
x += 0;
}else{
x += accumulate2zero(x-1);
}
return x;
}
}
package certification1;
public class Certification1 {
public static void main(String[] args) {
try{
System.out.println(Recurrence.acumulate2zero(10));
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Class Problema 8
Define una clase que en uno de sus métodos devuelva la misma clase mutada (cambiada). Por ejemplo, considere la clase Persona con dos variables: sexo (enum {h,m}) y edad. A continuación, desarrolle el método: mutar que devuelva a la persona con 10 año menos y de sexo cambiado.
package certification1;
public class persona {
private int age;
private sex sexo;
public enum sex{H,M};
public persona(int age, sex sexo){
this.age = age;
this.sexo = sexo;
}
public persona mutar(){
persona tmp = new persona(age,sexo);
if (tmp.age > 10) {
tmp.age -= 10;
if(tmp.sexo == persona.sex.H){
tmp.sexo = persona.sex.M;
}else{
tmp.sexo = persona.sex.H;
}
}else{
System.out.println("No aplica cambio de edad ni sexo");
}
return tmp;
}
public void print(){
System.out.println("Edad: " + age + " - sexo: " + sexo);
}
}
package certification1;
public class Certification1 {
public static void main(String[] args) {
try{
persona p1 = new persona(10,persona.sex.H);
persona p2 = p1.mutar();
p1.print();
p2.print();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Class Problema 7
Identifique y muestra la diferencia de pasar argumentos por referencia y por valor. Ayuda: En el Manual de Java SE 8 en la pagina 173 dice:"Cuando se pasa una variable primitiva dentro de un método, esta pasa como valor......, mientras que cuando se pasa un objeto como parámetro dentro de un método, éste pasa por referencia.
De un ejemplo que permita demostrar esta afirmación (en el manual hay un ejemplo con valores enteros, inténtelo hacer con otra variable primitiva).
package certification1;
public class valor_referencia {
int valor1;
public valor_referencia(int valor){
valor1 = valor;
}
void referencia(valor_referencia a){
a.valor1 *= 2; // valor1 cambiara
}
void valor(int a){
a *= 2; // valor1 NO cambiara
}
}
package certification1;
public class Certification1 {
public static void main(String[] args) {
try{
{
System.out.println("Por Referencia");
valor_referencia x = new valor_referencia(12);
x.referencia(x);
System.out.println(x.valor1);
}
{
System.out.println("Por valor");
int valor1 = 12;
valor_referencia x = new valor_referencia(valor1);
x.valor(2);
System.out.println(valor1);
}
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Class Ejercicio 6
El objetivo del siguiente problema es que el estudiante identifique que una clase puede emplearse como parámetro dentro de un método/constructor de otra clase.
Considere las clases: Carro, Análisis :
Clase Carro
- Variables: Cilindrara (double), tipo (enum: campero, automóvil), puertas (int).
- El constructor asigna valores a cada una de las variables.
- Identifique como NetBeans genera los setters y getters automáticamente.
- El constructor tiene dos parámetros Carro.
- Método comparar() imprime la información de los dos carros que se pasan como parámetros (impresión que resulte útil).
La impresión que propongo es una de muchas que se pueden plantear.
package certification1;
public class Carro {
private final double cilindrada;
private final tipo t;
private final int puertas;
public enum tipo{automovil, campero};
public Carro(double cilindrada, tipo t, int puertas){
this.cilindrada = cilindrada;
this.t = t;
this.puertas = puertas;
}
public double getCilindrada() {
return cilindrada;
}
public tipo getT() {
return t;
}
public int getPuertas() {
return puertas;
}
}
package certification1;
public class Analisis {
private Carro c1, c2;
public Analisis(Carro c1, Carro c2){
this.c1 = c1;
this.c2 = c2;
}
public void comparar(){
System.out.println("Información");
System.out.printf("%-13s %-13s %-13s %-13s \n","","Cilindrada", "Tipo", "Num. Puertas");
System.out.printf("%-13s %-13s %-13s %-13s \n","Carro1: ",c1.getCilindrada(),c1.getT(),c1.getPuertas());
System.out.printf("%-13s %-13s %-13s %-13s \n","Carro2: ",c2.getCilindrada(),c2.getT(),c2.getPuertas());
}
}
package certification1;
public class Certification1 {
public static void main(String[] args) {
try{
Carro c1 = new Carro(2000,Carro.tipo.automovil,4);
Carro c2 = new Carro(4500,Carro.tipo.campero,5);
Analisis analisis_comparativo = new Analisis(c1,c2);
analisis_comparativo.comparar();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Friday, July 28, 2017
Class Ejercicio 5
Identifique como emplear "Method Overloading" en la siguiente clase para: el constructor y cualquier métodos (propuesto por el estudiante).
package certification1;
public class Computador {
private String procesador;
private int memoria;
public enum tipo {Portatil,PC};
private tipo t;
private int resol_pantalla;
/* Su codigo aqui */
}
La solución no es única.
package certification1;
public class Computador {
private String procesador;
private int memoria;
public enum tipo {Portatil,PC};
private tipo t;
private int resol_pantalla; // en pixeles
// Constructor sin parametros
public Computador(){
procesador = "Intel Core i4";
memoria = 2;
t = tipo.PC;
resol_pantalla = 224;
}
public Computador(String procesador, int memoria, tipo t, int resol_pantalla){
this.procesador = procesador;
this.memoria = memoria;
this.t = t;
this.resol_pantalla = resol_pantalla;
}
public void print(){
System.out.println("Las caracteristicas del computador son: ");
System.out.println("Procesador: " + procesador);
System.out.println("Memoria: " + memoria);
System.out.println("Tipo: " + t);
System.out.println("Pantalla: " + resol_pantalla);
System.out.println("_____________________________");
}
public void print(int memoria){
System.out.println("Las caracteristicas del computador son: ");
System.out.println("Procesador: " + procesador);
System.out.println("Memoria: " + memoria);
System.out.println("Tipo: " + t);
System.out.println("Pantalla: " + resol_pantalla);
System.out.println("_____________________________");
}
}
package certification1;
public class Certification1 {
public static void main(String[] args) {
try{
Computador comp1 = new Computador();
Computador comp2 = new Computador("Intel Xeon",4,Computador.tipo.Portatil,55);
comp1.print();
comp2.print(8);
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
La solución propuesta tiene un error, intenta identificarlo. Esta relacionado con encapsulation y el método: public void print(int memoria) .
Tuesday, July 25, 2017
Class Ejercicio 4
Nota: En el siguiente ejercicio la complejidad aumentará. Se requiere conocer el funcionamiento de los operadores lógicos y condicionales (if/else, switch).
Defina la clase Carro con las siguientes variables:
- puertas (valor por defecto 3, privada ).
- velocidad (valor por defecto 0, privada).
- puertas-Cerradas (valor por defecto: falso, privada).
- El carro solo acelera si tiene las puertas cerradas.
- Cada vez que el carro acelera, su velocidad aumenta en 10 Km. El valor máximo de la velocidad es 100 Km.
- El carro solo frena si la velocidad es mayor que cero y las puertas están cerradas. La velocidad se reducirá en 10 km.
- Si la velocidad es 100 Km y se ejecuta el método acelerar, saldrá un mensaje en consola diciendo: No se puede acelerar mas.
- Si la velocidad es 0 km y se ejecuta el método frenar, saldrá un mensaje en consola diciendo: El carro está frenado.
- Es posible crear un carro con una velocidad mayor que cero y con las puertas abiertas. No obstante, para que los métodos: frenar y acelerar funcionen correctamente, es necesario cerrar las puertas previamente.
La funcionalidad debe ser igual, pese a existir diferentes formas de solucionar el problema.
package certification1;
public class Carro {
private int num_puertas = 3;
private int velocidad = 0;
private boolean puertas_cerradas = false;
public Carro(){
this.num_puertas = 3;
this.velocidad = 0;
this.puertas_cerradas = false;
}
public Carro(int num_puertas, int velocidad, boolean puertas_cerradas){
assert(num_puertas > 0);
assert(velocidad >= 0);
this.num_puertas = num_puertas;
this.velocidad = velocidad;
this.puertas_cerradas = puertas_cerradas;
}
public void acelerar(){
if(puertas_cerradas == true){
if(velocidad < 100){
velocidad += 10;
System.out.println("Velocidad actual (despues de acelerar): " + velocidad);
}else{
System.out.println("No se puede acelerar mas.");
}
}else{
System.out.println("Puertas abiertas no se puede acelerar.");
}
}
public void frenar(){
if(velocidad == 0){
System.out.println("El carro esta frenado");
}else{
if(puertas_cerradas == true){
velocidad -= 10;
System.out.println("Velocidad actual (despues de frenar): " + velocidad);
}
}
}
public void abrir_puertas(){
if(puertas_cerradas == true){
puertas_cerradas = false;
}
}
public void cerrar_puertas(){
if(puertas_cerradas == false){
puertas_cerradas = true;
}
}
}
package certification1;
public class Certification1 {
public static void main(String[] args) {
Carro c = new Carro();
c.cerrar_puertas();
c.acelerar();
c.frenar();
}
}
Para que el programa funcione correctamente en NetBeans es necesario habilitar assertions en la maquina virtual (VM) . Para ello siga los siguiente pasos:
- En NetBeans,haga click en la pestaña: Run .
- Click en: Set Project Configuration.
- Click en: Customize.
- Click en: New , digite el nombre: assertion (o cualquier otro) y haga click en Ok .
- En la sección VM Option , digite los siguiente: -enableassertions .
- Finalmente, seleccione la configuración assertion que acabamos de crear para compilar.
Class Ejercicio 3
En el blog Class Ejercicio 2 se desarrollo la clase Persona con dos variables y un constructor (ambos públicos). Si las variables edad y nombre fueran privadas, ¿ cómo se podría acceder a las variables definidas en la clase ?. Implemente Setters & Getters con la ayuda de NetBeans y de ejemplos de uso.
NetBeans implemente los Setters y Getters de manera automática.
- Ubicarse debajo del constructor de la clase Persona , hacer click derecho.
- Buscar la opción: Insert Code (Insertar código en Español).
- Seleccionar Setter.
- Seleccionar las variables.
- Hacer click en Generate .
package certification1;
public class Persona {
private int edad;
private String nombre;
public Persona(int edad, String nombre){
this.edad = edad;
this.nombre = nombre;
}
public void setEdad(int edad) {
this.edad = edad;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public String getNombre() {
return nombre;
}
}
package certification1;
public class Certification1 {
public static void main(String[] args) {
Persona p1 = new Persona(35,"Mauricio");
System.out.println(p1.getNombre() + " tiene: " + p1.getEdad() + " años");
p1.setEdad(37);
System.out.println(p1.getNombre() + " crecio y ahora tiene: " + p1.getEdad() + " años");
}
}
Class Ejercicio 2
Repita el ejercicio: Class Ejercicio 1 , empleando un constructor para inicializar las variables: edad, y nombre. Recuerde que dentro del constructor se emplean parámetros y dentro de la clase variables. Por lo tanto, los parámetros que paso dentro del constructor son los valores que se asignan a las variables dentro de la clase. Imprima el nombre de la persona en consola (NO utilice ningún método para este propósito).
package certification1;
public class Persona {
public int edad;
public String nombre;
public Persona(int edad, String nombre){
this.edad = edad;
this.nombre = nombre;
}
}
package certification1;
public class Certification1 {
public static void main(String[] args) {
Persona p1 = new Persona(35,"Mauricio");
System.out.println("El nombre es: " + p1.nombre + " y tiene: " + p1.edad + " años.");
}
}
Java emplea dos tipos de memoria: Stack y Heap . En el Stack se guardan variables locales, sean primitivas o referencias; mientras que el Heap guarda objetos. En castellano, dentro del Stack en el código anterior se guarda: p1; mientras que en el Heap se guardan las variables que tiene p1 (edad y nombre).
Class Ejercicio 1
Implemente una clase en Java de nombre: Persona con las siguientes variables: Nombre y edad. Identifique los tipos a utilizar para cada una de las variables y la forma de inicializarlas en caso de no existir constructor.
package certification1;
public class Persona {
public int age;
public String name;
}
package certification1;
public class Certification1 {
public static void main(String[] args) {
Persona p1 = new Persona();
p1.age = 35;
p1.name = "Mauricio";
}
}
Identifique, comprenda y diferencie entre: definición, creación y asignación; cuando se hable de clases en java.
Monday, July 17, 2017
Ejercicio 12
Identifique la forma de imprimir los números que no son múltiplos de 2 y 3 en los primeros 20 decimales positivos. Para este propósito identifique como emplear continue .
package certification1;
public class Certification1 {
public static void main(String[] args) {
for(int i = 0; i < 20; i++){
if(i%2==0 || i%3==0){
continue;
}
System.out.println("i: " + i);
}
}
}
Ejercicio 11
Identifique como emplear la coma en la inicialización e incremento de varias variables dentro de un bucle for. para dicho propósito, considere:
Implemente un bucle for tal que incremente la variable i de 0 a 10 y al mismo tiempo reduzca la variable j de 10 a 0. Imprima los resultados en consola.
Dentro de un mismo bucle for se controlan ambas variables. NO es necesario definir dos bucles for. Este apartado se encuentra desarrollado en el capitulo 5 del Manual de Referencia de Java Ed 9.
public class Certification1 {
public static void main(String[] args) {
int i, j;
for (i = 0, j = 10; i < 10; i++, j--) {
System.out.print("i: " + i);
System.out.print(", j: " + j);
System.out.println("");
}
}
}
Ejercicio 10
Actualmente se encuentra trabajando en EPM y necesita determinar las subvenciones y los sobre-cargo (si aplica) de la cuenta de los servicios. Para ello considere la siguiente liquidación de la subvención (sobre-cargo):
| Estrato Económico | Subvención / Sobre-Cargo |
|---|---|
| 1 | -40%(personas > 3); -30% (otro) |
| 2 | -20% (personas > 3>; -15% (otro) |
| 3 | -10% |
| 4 | 10% |
| 5 | 20% |
| 6 | 40% |
Desarrollar un programa que pregunte por el monto de la factura. Luego el programa debe identificar si es beneficiario o no de un descuento. Finalmente, el programa debe decir el monto total que debe pagar por concepto de servicios públicos, especificando: monto + subvención (sobre-cargo) en su caso.
Observación: Implemente la solución con Nested if y Nested switch . En el Manual de Referencia de Java Ed 9 (capitulo 5), if y switch se consideran: sentencias de control de selección (selection control statement).
Únicamente se implemente nested switch .
import java.util.Scanner;
public class Subvencion {
private static double factura;
private static int extracto, num_personas;
private static double descuento;
private static double neto_pagar;
private static String text; // Discount or not
static Scanner read = new Scanner(System.in);
private static void read_Data(){
System.out.printf("%-20s","Digite el valor de su factura: ");
factura = read.nextDouble();
System.out.printf("%-20s", "A que extracto pertenece: ");
extracto = read.nextInt();
System.out.printf("%-20s","Personas que pertenecen al hogar: ");
num_personas = read.nextInt();
}
private static void test(){
switch(extracto){
case 1:
text = "Descuento";
switch(num_personas){
case 1:
case 2:
descuento = -0.3;
break;
default:
descuento = -0.4;
break;
}
break;
case 2:
text = "Descuento";
switch(num_personas){
case 1:
case 2:
descuento = -0.15;
break;
default:
descuento = -0.2;
break;
}
break;
case 3:
text = "Descuento";
descuento = -0.1;
break;
case 4:
text = "Recaudo";
descuento = 0.1;
break;
case 5:
text = "Recaudo";
descuento = 0.2;
break;
case 6:
text = "Recaudo";
descuento = 0.4;
break;
default:
System.out.println("Extracto no existe");
break;
}
neto_pagar = factura*(1+descuento);
}
private static void Msg_final(){
System.out.printf("%-20s %-10f \n","Valor de la factura original: ", factura);
System.out.printf("%-20s %20s \n", "Qué aplica ? : ", text);
System.out.printf("%-20s %-20s \n", "Descuento / Recaudo aplicado: ", Math.abs((neto_pagar - factura)) );
System.out.printf("%-20s %10f \n", "Total a pagar: ", neto_pagar);
}
public static void start(){
read_Data();
test();
Msg_final();
}
}
public class Certification1 {
public static void main(String[] args) {
Subvencion.start();
}
}