Está en la página 1de 31

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

Ejercicio 1. Declaracin de variables Cree una clase denominada Ejercicio1. Dentro de ella cree un mtodo main y dentro de l en sucesivas lneas declare una variable para cada uno de los 8 tipos bsicos de java. Declare tambin una variable de tipo String. A continuacin d valores adecuados a cada una de estas variables. Imprima las variables por pantalla mediante instrucciones System.out.println(<nombre variable>), sustituyendo <nombre variable> por el nombre de cada una de las variables
public class Ejercicio1 { public static void main(String[] args) { long a; int b; short c; byte d; float e; double f; char g; boolean h; String i; a b c d e f g h i = = = = = = = = = 30659344L; -533055403; 1110; 140; 10.116F; -12.562E+50; 'c'; true; "Hello World";

// imprimimos cada variable System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(g); System.out.println(h); System.out.println(i); } }

Ejercicio 2. Rangos de los tipos bsicos Sobre el ejercicio anterior (no cambie nada, ponga las nuevas instrucciones a continuacin del ltimo System.out.println), para las variables que contienen datos de tipo numrico, pruebe a dar nuevos valores que sobrepasen los rangos de cada uno de los tipos. Imprima los resultados por pantalla, qu ocurre en cada caso?
public class Ejercicio2 {

Curso20082009

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

public static void main(String[] args) { long a; int b; short c; byte d; float e; double f; //Dar valores no vlidos a=85938544526898598645L; b=-21455748999; c=89905; d=129; e=-3.56E+40F; f=3.98E+500; System.out.println(a); System.out.println(b; System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); } }

El programa no compila dando los siguientes errores:


Exception in thread "main" java.lang.Error: Unresolved compilation problems: The literal 85938544526898598645L of type long is out of range The literal 21455748999 of type int is out of range Type mismatch: cannot convert from int to short Type mismatch: cannot convert from int to byte The literal 3.56E+40F of type float is out of range The literal 3.98E+500 of type double is out of range

Ejercicio 3. Declaraciones mltiples Cree una clase denominada Ejercicio3. Dentro de ella cree un mtodo main y dentro de l declare de una sola vez 3 variables del mismo tipo bsico (cualquiera de ellos). Declare tambin de una sola vez cuatro variables de otro tipo, dando valor a la primera y a la ltima en la misma declaracin. A continuacin en otra lnea d valor a la segunda variable, y seguidamente para dar valor a la tercera combine las variables anteriores. Imprima las variables por pantalla. Cambie el valor de la primera variable, imprima por pantalla el valor de la tercera, ha cambiado? por qu?
public class Ejercicio3 { public static void main(String[] args){ int a,b,c;

Curso20082009

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

float d=3.65F,e,f,g=9.89F; e=53.65F; f=d+e-g; // Imprimir variables por pantalla System.out.println("d="+d+",e="+e+",f="+f+",g="+g); // Cambiar el valor de la primera variable d=100.2F; // Imprimir la tercera variable System.out.println("f="+f); } }

El valor de la tercera variable f no ha cambiado, ya que se le asign su valor antes del cambio de d Ejercicio 4. Constantes En el ejercicio anterior, ponga final delante de la declaracin de la primera variable de la segunda tanda, ocurre algo? por qu? Quite lo anterior y ponga final delante de la tercera variable, ocurre algo? por qu? Cree una constante de tipo String y dele valor. En la lnea siguiente dele un nuevo valor, es posible hacerlo? Primera parte:
public class Ejercicio4 { public static void main(String[] args){ int a,b,c; final float d=3.65F; float e,f,g=9.89F; e=53.65F; f=d+e-g; // Imprimir variables por pantalla System.out.println("d="+d+",e="+e+",f="+f+",g="+g); // Cambiar el valor de la primera variable d=100.2F; // Imprimir la tercera variable System.out.println("f="+f); } }

No se puede asignar un nuevo valor a d, ya que es una constante. Se produce el siguiente error al compilar:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: The final local variable d cannot be assigned. It must be blank and not using a compound assignment at ej.main(ej.java:14)

Curso20082009

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

Segunda parte:
public class Ejercicio4 { public static void main(String[] args){ int a,b,c; float d=3.65F,e,g=9.89F; final float f; e=53.65F; f=d+e-g; // Imprimir variables por pantalla System.out.println("d="+d+",e="+e+",f="+f+",g="+g); // Cambiar el valor de la primera variable d=100.2F; // Imprimir la tercera variable System.out.println("f="+f); } }

Es posible realizarlo, f se declara como constante y en la siguiente lnea se le asigna valor. Tercera parte:
public class Ejercicio4 { public static void main(String[] args){ final String h="hola"; h=adios; //Imprimir System.out.println("String h: "+h); } }

No se puede asignar un nuevo valor a h, ya que es una constante. Ejercicio 5. Cadenas de texto (tipo char) Cree una clase denominada Ejercicio5. Dentro de ella cree un mtodo main y dentro de l teclee lo siguiente: char a; a = '\\\'; System.out.println(a); Cul es el resultado del cdigo anterior? Por qu? Es posible crear un char con ms de un carcter (ejemplo char b = hola)?
public class Ejercicio5 { public static void main(String[] args) { char a; a = '\\\'; System.out.println(a); char b='hola'; System.out.println(b); }

Curso20082009

UniversidadCarlosIIIdeMadrid
}

Solucionesalasegundaprcticadeprogramacin

Se producen errores de compilacin. Una variable de tipo char slo puede contener un carcter. Por tanto '\\\' y 'hola' no son valores vlidos. Ejercicio 6. Copia de variables Cree dos variables de cualquiera de los tipos bsicos, d valor a la primera y a continuacin iguale la segunda a la primera. Imprima por pantalla la segunda. Cambie el valor de la primera y vuelva a imprimir la segunda, cambia la segunda de valor? por qu? Haga lo mismo para dos variables de la clase String.
public class Ejercicio6 { public static void main(String[] args) { int a=6,b; b=a; System.out.println("b="+b); a=9; System.out.println("b="+b); String c="blue",d; d=c; System.out.println("d="+d); c="yellow"; System.out.println("d="+d); } }

El valor de la variable b no ha cambiado, ya que se le asign su valor antes del cambio de a. Ocurre lo mismo con las variables de tipo string. Ejercicio 7. Declaracin de arrays (I) Cree una clase denominada Ejercicio7 y dentro de ella cree un mtodo main. Declare un array de alguno de los tipos enteros, otro de los reales, otro de char, otro de boolean y otro de String. D valores distintos a cada uno de los elementos de los arrays. qu ocurre si intentamos utilizar alguno de los elementos sin haberle dado valor antes?
public class Ejercicio7 { public static void main(String[] args) { int a [] = new int [2]; float b []= new float [2]; char c []= new char [2]; boolean d []= new boolean [2]; String e []= new String [2]; a[0]=2; b[0]=3.5F; c[0]='g'; d[0]=false; e[0]="hola"; System.out.println(a[1]); System.out.println(b[1]);

Curso20082009

UniversidadCarlosIIIdeMadrid
System.out.println(c[1]); System.out.println(d[1]); System.out.println(e[1]); } }

Solucionesalasegundaprcticadeprogramacin

Java inicializa las variables con los siguientes valores por defecto: int, short, byte, long: 0 long, float: 0.0 char: \u0000 boolean: false string: null Ejercicio 8. Declaracin de arrays (II) Elija uno de los arrays anteriores e iguale dos de sus elementos (ejemplo a[5]=a[3]), imprima ambos elementos. Cambie el segundo elemento de valor, imprima los dos otra vez cambia tambin el primero? por qu?
public class Ejercicio8 { public static void main(String[] args) { int a [] = new int [2]; a[0]=2; a[1]=a[0]; System.out.println(a[0]); System.out.println(a[1]); a[1]=5; System.out.println(a[0]); System.out.println(a[1]); } }

El valor del primer elemento no ha cambiado, ya que se le asign su valor antes del cambio del segundo. Ejercicio 9. Longitud de un array Utilice length para imprimir por pantalla la longitud de los arrays anteriores. Cambie la longitud de uno de ellos poniendo por ejemplo array.length = 5, qu ocurre? por qu?
public class Ejercicio9 { public static void main(String[] args) { int a [] = new int [2]; float b []= new float [2]; char c []= new char [2]; boolean d []= new boolean [2]; String e []= new String [2];

Curso20082009

UniversidadCarlosIIIdeMadrid
a[0]=2; b[0]=3.5F; c[0]='g'; d[0]=false; e[0]="hola";

Solucionesalasegundaprcticadeprogramacin

System.out.println(a.length); System.out.println(b.length); System.out.println(c.length); System.out.println(d.length); System.out.println(e.length); //Cambiar la longitud de uno de los arrays d.length = 5; } }

La longitud del array se establece cuando se define. Length permite leer su valor nunca modificarlo. Ejercicio 10. Copia de arrays Cree un array de cualquier tipo. D valor a sus elementos. Cree un segundo array e igulelo al primero. Cambie el valor de un elemento del primer array. Cambia el elemento correspondiente del segundo? por qu? Haga lo mismo pero ahora en lugar de igualarlos use system.arraycopy(), hay alguna diferencia?
public class Ejercicio10 { public static void main(String[] args) { int[] array1 = new int[]{1,2,3,4}; // Crear un Segundo array e igualarlo al primero int[] array2 = array1; // Cambiar el valor de un elemento del primer array array1[0]=5; //Imprimir los valores de array2. System.out.println(array2[0]+","+ array2[1]+","+array2[2]+","+array2[3]); int[] array3 = new int[]{6,7,8,9}; //Crear el array4 int [] array4 = new int[4]; //Copiar los elementos de array3 a array4. System.arraycopy(array3,0,array4,0,array3.length); array3[0]=10; //Imprimir los valores de array4. System.out.println(array4[0]+","+ array4[1]+","+array4[2]+","+array4[3]);

Curso20082009

UniversidadCarlosIIIdeMadrid
} }

Solucionesalasegundaprcticadeprogramacin

array1 y array2 apuntan a la misma posicin de memoria. Si se cambia el valor de un elemento de cualquiera de los arrays tambin cambia el del otro. array3 y array4 son arrays diferentes y ocupan posiciones de memoria diferentes. Mediante system.arraycopy() se copia el contenido de array3 en array4. Si se cambia el valor de un elemento de cualquiera de los arrays, no cambia el del otro. Ejercicio 11. Declaracin de arrays de varias dimensiones Crear una clase llamada Ejericio11 y su correspondiente mtodo main. Implementar el cdigo necesario para representar un tablero de ajedrez con la posicin inicial de todas las piezas. Imprimir por pantalla el tablero, implementar el movimiento de una de las piezas e imprimir por pantalla la situacin final de tablero. Representar: Casillas vacas: espacios en blanco y smbolos #, para casillas blancas y negras respectivamente. Casillas ocupadas: inicial del nombre de la pieza que la ocupa (ej. T para la torre).
public class Ejercicio11 { public static void main(String[] args) { char [][] a=new char[8][8]; int i,j; // Rellenamos el tablero completo for (i=0;i<8;i++){ for (j=0;j<8;j++) { if((i+j)%2==0){ a[i][j]=' '; } else { a[i][j]='#'; } } } // Ponemos las piezas // Peones for (j=0;j<8;j++){ a[1][j]='P'; a[6][j]='P'; } // Torres a[0][0]='T'; a[7][0]='T'; a[0][7]='T'; a[7][7]='T'; // Caballos a[0][1]='C'; a[0][6]='C'; a[7][1]='C'; a[7][6]='C'; // Alfiles a[0][2]='A'; a[0][5]='A'; a[7][2]='A';

Curso20082009

UniversidadCarlosIIIdeMadrid
a[7][5]='A'; // Damas a[0][3]='D'; a[7][4]='D'; // Reyes a[0][4]='R'; a[7][3]='R';

Solucionesalasegundaprcticadeprogramacin

// Pintamos el tablero con piezas for (i=0;i<8;i++) { for (j=0;j<8;j++) { System.out.print(a[i][j]); if (j==7){ System.out.println(); } } } // Movemos el peon de a[6][0] dos posiciones hacia adelante a[4][0]=a[6][0]; a[6][0]=' '; // Pintamos el tablero con piezas for (i=0;i<8;i++) { for (j=0;j<8;j++) { System.out.print(a[i][j]); if (j==7){ System.out.println(); } } } } }

Ejercicio 12. Longitudes de cada una de las dimensiones de un array Crear una clase llamada Ejericio12 y su correspondiente mtodo main. Definir un array bidimensional de 3 x 4 de tipo String e inicializarlo. Imprimir por pantalla sus dimensiones utilizando length.
public class Ejercicio12 { public static void main(String[] args) { String [][] a=new String[3][4]; int i,j; // Inicializamos el array completo con el texto "hola" for (i=0;i<3;i++){ for (j=0;j<4;j++) { a[i][j]="hola"; } } // Imprimimos sus dimensiones System.out.println("Dimensiones: "+a.length+" x "+a[0].length); } }

Ejercicio 13. Declaracin de arrays irregulares (I)

Curso20082009

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

Crear una clase llamada Ejericio13 y su correspondiente mtodo main. Implementar el funcionamiento bsico de una agenda. Para ello, definir un array bidimensional llamado ao de longitud 12 en el que cada uno de sus elementos represente un mes (array de Strings). La longitud de cada uno de estos arrays unidimensionales depender del nmero de das que tenga el mes correspondiente en un ao no bisiesto, es decir, el primer elemento tendr longitud 31, el segundo 28, etctera.
public class Ejercicio13 { public static void main(String[] args) { String [][] ao=new String[12][]; ao[0]=new String[31]; ao[1]=new String[28]; ao[2]=new String[31]; ao[3]=new String[30]; ao[4]=new String[31]; ao[5]=new String[30]; ao[6]=new String[31]; ao[7]=new String[31]; ao[8]=new String[30]; ao[9]=new String[31]; ao[10]=new String[30]; ao[11]=new String[31]; } }

Ejercicio 14. Argumentos del mtodo main Cuando se ejecuta una clase, se pueden aadir parmetros de ejecucin (ver tutorial de Eclipse), estos parmetros se almacenan en forma de un array de String denominado args. Cree una clase que imprima por pantalla los tres primeros argumentos con los que se le est llamando. qu ocurre si se llama con menos de tres argumentos? y si es con ms?
public class Ejercicio14 { public static void main(String[] args) { //Imprimir los tres primeros argumentos System.out.println(args[0]); System.out.println(args[1]); System.out.println(args[2]); } }

Si se llama con menos de tres argumentos se producir un error, ya que estamos intentando imprimir un elemento del array args mas all de su tamao. //Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0. Si se llama con ms de tres argumentos no se produce ningn error, slo se imprimen los tres primeros elementos. Ejercicio 15. Operaciones aritmticas con enteros (I)
Curso20082009 10

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

Cree una clase denominada Ejercicio15. Dentro de ella cree un mtodo main y dentro de l teclee lo siguiente: int a; int b; int c; int d; a = 2; b = 3 * 3; c = 7 / 3; d = a + b * c; System.out.println(d); Cul es el resultado del cdigo anterior? Por qu?
public class Ejercicio15 { public static void main(String[] args) { int a; int b; int c; int d; a = 2; b = 3*3; c = 7/3; d = a + b * c; System.out.println(d); } }

El resultado es 20. Se ignoran los decimales de c, dado que es una variable de tipo entero. c = 7/3 = 2.333333..., pero slo se utiliza el valor 2 para los clculos d = 2 + 9 * 2 = 20 Ejercicio 16. Operaciones aritmticas con enteros (II) Cree una clase denominada Ejercicio16. Dentro de ella cree un mtodo main y dentro de l declare tres variables para cada uno de los cuatro tipos enteros y otras tres de char. Para cada uno de los tipos, d valores adecuados a las dos primeras y a la tercera dle el valor de operar las dos anteriores con todos los operadores aritmticos de Java (suma, resta, etc.). Imprima los resultados por pantalla. se produce algn fallo? por qu? (Nota: una vez descubiertos los fallos, para que el programa pueda compilar, en lugar de borrar las lneas en las que hay fallos, convirtalas en comentarios usando //) cmo se podran resolver?
public class Ejercicio16 public static void long longa = long longb = long longc = long longd = long longe = long longf = long longg = { main(String[] args) { 2; 1; longa+longb; longa-longb; longa*longb; longa/longb; longa%longb;

Curso20082009

11

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

System.out.println ("longc="+longc+",longd="+longd+",longe="+longe+",longf="+longf+",long g="+longg); int int int int int int int inta intb intc intd inte intf intg = = = = = = = 2; 1; inta+intb; inta-intb; inta*intb; inta/intb; inta%intb;

System.out.println ("intc="+intc+",intd="+intd+",inte="+inte+",intf="+intf+",intg="+intg) ; short shorta = 2; short shortb = 1; //short shortc = shorta+shortb; //short shortd = shorta-shortb; //short shorte = shorta*shortb; //short shortf = shorta/shortb; //short shortg = shorta%shortb; // Se produce un error de compilacin: // Type mismatch: cannot convert from int to short // Se puede resolver haciendo cast a 'short' short short short short short shortc shortd shorte shortf shortg = = = = = (short) (short) (short) (short) (short) (shorta+shortb); (shorta-shortb); (shorta*shortb); (shorta/shortb); (shorta%shortb);

System.out.println ("shortc="+shortc+",shortd="+shortd+",shorte="+shorte+",shortf="+short f+",shortg="+shortg); byte bytea = byte byteb = //byte bytec //byte byted //byte bytee //byte bytef //byte byteg 2; 1; = bytea+byteb; = bytea-byteb; = bytea*byteb; = bytea/byteb; = bytea%byteb;

// Se produce un error de compilacin: // Type mismatch: cannot convert from int to byte // Se puede resolver haciendo cast a 'byte' byte byte byte byte byte bytec byted bytee bytef byteg = = = = = (byte) (byte) (byte) (byte) (byte) (bytea+byteb); (bytea-byteb); (bytea*byteb); (bytea/byteb); (bytea%byteb);

System.out.println ("bytec="+bytec+",byted="+byted+",bytee="+bytee+",bytef="+bytef+",byte g="+byteg); char chara = 'a';

Curso20082009

12

UniversidadCarlosIIIdeMadrid
char charb = //char charc //char chard //char chare //char charf //char charg

Solucionesalasegundaprcticadeprogramacin
'b'; = chara+charb; = chara-charb; = chara*charb; = chara/charb; = chara%charb;

// Se produce un error de compilacin: // Type mismatch: cannot convert from int to char // Se puede resolver haciendo cast a 'char' char charc = (char) (chara+charb); char chard = (char) (chara-charb); char chare = (char) (chara*charb); char charf = (char) (chara/charb); char charg = (char) (chara%charb); System.out.println ("charc="+charc+",chard="+chard+",chare="+chare+",charf="+charf+",char g="+charg); } }

Ejercicio 17. Operaciones aritmticas con enteros (III) Cree una clase denominada Ejercicio17. Dentro de ella cree un mtodo main y dentro de l declare tres variables de tipo int. D valor 5 a la primera y valor 0 a la segunda. Haga que la tercera sea igual a la segunda dividida por la primera. Imprima el resultado por pantalla se produce algn fallo? por qu? Cambia el resultado si las variables en lugar de ser de tipo int son de cualquier otro tipo entero?
public class Ejercicio17 { public static void main(String[] args) { int a = 5; int b = 0; int c = b/a ; System.out.println(c); byte d = 5; byte e = 0; //byte f = e/d ; //System.out.println(f); } }

Para variables de tipo int la operacin se realiza correctamente. Para variables de otro tipo entero se produce un error, ya que los operandos son transformados a tipo int para realizar la operacin y, a continuacin, el resultado se transforma a byte para asignarlo a f, momento en el que se produce el error:
Type mismatch: cannot convert from int to byte

Ejercicio 18. Autoincremento


Curso20082009 13

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

Cree una clase denominada Ejercicio18. Dentro de ella cree un mtodo main y dentro de l declare dos variables de tipo long, d valor a la primera y haga que la segunda sea igual a la primera autoincrementada (autoincremento delante). Imprima la segunda. A continuacin haga lo mismo pero poniendo el autoincremento detrs, se produce algn cambio? por qu? Haga lo mismo para el operador autodecremento.
public class Ejercicio18 { public static void main(String[] args) { long a=1,b=++a; System.out.println("b: "+ b); long c=1,d=c++; System.out.println("d: "+d); long q=1,w=--q; System.out.println("w: "+w); long e=1,r=e--; System.out.println("r: "+r); } }

Al autoincrementar o autodecrementar delante, primero se aumenta/decrementa y despus se asigna valor. Al autoincrementar o autodecrementar detrs, primero se asigna el valor a la segunda variable y despus se aumenta el valor de la primera variable.

Ejercicio 19. Operaciones aritmticas con char Cree una clase denominada Ejercicio19. Dentro de ella cree un mtodo main y dentro de l declare una variable de tipo char con un valor adecuado. Haga, System.out.println(variable+1), qu ocurre? y si ponemos System.out.println(variable++)?
public class Ejercicio19 { public static void main(String[] args) { char c = 'a'; //a(ascii) = 97 System.out.println(c+1); //Imprime '98' que es 97 (a en ascii) + 1. //c se convierte a int para hacer la operacin. System.out.println(c++); //Imprime 'a', el valor original de c, porque el incremento se realiza despus de imprimir. } }

Ejercicio 20. Concatenacin de cadenas Cree una clase denominada Ejercicio20. Dentro de ella cree un mtodo main y dentro de l declare tres variables de tipo String. D valor a las dos primeras y haga que la tercera

Curso20082009

14

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

sea igual a primera+segunda. Imprima la tercera, qu ocurre? y si hacemos tercera=primera-segunda?


public class Ejercicio20 { public static void main(String[] args) { String a = "Hello"; String b = "World"; String c = a+b; System.out.println(c); //c = a-b; } }

El operador + aplicado a variables de tipo String concatena las cadenas de carateres. El operador - no est definido para variables de tipo String. En el ejemplo anterior se produce el siguiente error de compilacin:
The operator - is undefined for the argument type(s) java.lang.String, java.lang.String.

Ejercicio 21. Operaciones aritmticas con reales Repita los ejercicios 16, 17 y 18 pero con tipos reales en lugar de enteros.
public class Ejercicio21 { public static void main(String[] args) { // Ejercicio 16 float floata = 2; float floatb = 1; float floatc = floata+floatb; float floatd = floata-floatb; float floate = floata*floatb; float floatf = floata/floatb; float floatg = floata%floatb; // Las operaciones se realizan correctamente. System.out.println ("floatc="+floatc+",floatd="+floatd+",floate="+floate+",floatf="+float f+",floatg="+floatg); double double double double double double double // Las doublea = 2; doubleb = 1; doublec = doublea+doubleb; doubled = doublea-doubleb; doublee = doublea*doubleb; doublef = doublea/doubleb; doubleg = doublea%doubleb; operaciones se realizan correctamente.

System.out.println ("doublec="+doublec+",doubled="+doubled+",doublee="+doublee+",doublef= "+doublef+",doubleg="+doubleg);

Curso20082009

15

UniversidadCarlosIIIdeMadrid
//Ejercicio 17

Solucionesalasegundaprcticadeprogramacin

float a = 5F; float b = 0F; float c = b/a ; System.out.println(c); // La operacin se realiza correctamente. double d = 5; double e = 0; double f = e/d; System.out.println(f); // La operacin se realiza correctamente. //Ejercicio 18 float g=1,h=++g; System.out.println("h: "+ h); float i=1,j=i++; System.out.println("j: "+j); float k=1,l=--k; System.out.println("l: "+l); float m=1,n=m--; System.out.println("n: "+n); double o=1,p=++o; System.out.println("p: "+ p); double q=1,r=q++; System.out.println("r: "+r); double s=1,t=--s; System.out.println("t: "+t); double u=1,v=u--; System.out.println("v: "+v); } }

Ejercicio 22. Conversiones automticas de tipos Cree una clase denominada Ejercicio22. Dentro de ella cree un mtodo main y dentro de l declare y d valor a una variable para cada tipo bsico, incluyendo String. A continuacin, asigne sucesivamente una variable a todas las dems. Complete la siguiente tabla con las asignaciones vlidas (ponga SI si la variable de la fila se puede asignar a una de la columna y NO en caso contrario)
public class Ejercicio22 { public static void main(String[] args) { //Definir una variable por cada tipo bsico double d = 5315.896784E+23; float f = 43563455.15246F; long l = 5643218643218932186L; int i = 45645656; short s = 4651; byte b = 120; char c = 'q'; boolean bo = true; String str = "foo";

Curso20082009

16

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

//Comprobar tipo byte byte b1; /* b1 = d; b1 = f; b1 = l; b1 = i; b1 = s; */ b1 = b; /* b1 = c; b1 = bo; b1 = str; slo se pueden asignar a byte variables de tipo byte */ //Comprobar tipo short short s1; /* s1 = d; s1 = f; s1 = l; s1 = i; */ s1 = s; s1 = b; /* s1 = c; s1 = bo; s1 = str; slo se pueden asignar a short variables de tipo byte y short */ //Comprobar tipo int int i1; /* i1 = d; i1 = f; i1 = l; */ i1 = i; i1 = s; i1 = b; i1 = c; /* i1 = bo; i1 = str; slo se pueden asignar a int variables de tipo byte, short, int y char. */ //Comprobar tipo long long l1; /* l1 = d; l1 = f; */ l1 = l; l1 = i;

Curso20082009

17

UniversidadCarlosIIIdeMadrid
l1 = l1 = l1 = /* l1 = l1 = slo short, int, long */ s; b; c;

Solucionesalasegundaprcticadeprogramacin

bo; str; se pueden asignar a long variables de tipo byte, y char.

//Comprobar tipo float float f1; /* f1 = d; */ f1 = f; f1 = l; f1 = i; f1 = s; f1 = b; f1 = c; /* f1 = bo; f1 = str; slo se pueden asignar a float variables de tipo byte, short, int, long, float y char. */ //Comprobar tipo doble double d1; d1 = d; d1 = f; d1 = l; d1 = i; d1 = s; d1 = b; d1 = c; /* d1 = bo; d1 = str; slo se pueden asignar a double variables de tipo byte, short, int, long, float, double y char. */ //Comprobar tipo char char c1; /* c1 = d; c1 = f; c1 = l; c1 = i; c1 = s; c1 = b; */ c1 = c; /* c1 = bo; c1 = str; slo se pueden asignar a char variables de tipo char. */

Curso20082009

18

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

//Comprobar tipo boolean boolean bo1; /* bo1 = d; bo1 = f; bo1 = l; bo1 = i; bo1 = s; bo1 = b; bo1 = c; */ bo1 = bo; /* bo1 = str; slo se pueden asignar a boolean variables de tipo boolean. */ //Comprobar tipo string String str1; /* str1 = d; str1 = f; str1 = l; str1 = i; str1 = s; str1 = b; str1 = c; str1 = bo; */ str1 = str; /* slo se pueden asignar a String variables de tipo String. */ } }

Tipo Byte Byte SI Short NO Int NO Long NO Float NO Double NO Char NO Boolean NO String NO

short SI SI NO NO NO NO NO NO NO

int SI SI SI NO NO NO SI NO NO

Long SI SI SI SI NO NO SI NO NO

Float SI SI SI SI SI NO SI NO NO

Double Char SI NO SI NO SI NO SI NO SI NO SI NO SI SI NO NO NO NO

boolean String NO NO NO NO NO NO NO NO NO NO NO NO NO NO SI NO NO SI

Ejercicio 23. Conversiones forzadas de tipos (castings) Cree una clase denominada Ejercicio23 copiando la anterior, fuerce ahora las conversiones entre tipos usando el casting adecuado y vuelva a rellenar la tabla anterior. Siguen quedando casillas con NO?, en caso afirmativo, por qu?
public class Ejercicio23 {

Curso20082009

19

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

public static void main(String[] args) { double d = 5315.896784E+23; float f = 43563455.15246F; long l = 5643218643218932186L; int i = 45645656; short s = 4651; byte b = 120; char c = 'q'; boolean bo = true; String str = "foo"; byte b1; b1 = (byte)d; b1 = (byte)f; b1 = (byte)l; b1 = (byte)i; b1 = (byte)s; b1 = (byte)b; b1 = (byte)c; /* b1 = (byte)bo; b1 = (byte)str; No se puede hacer casting a variables de tipo boolean y string. */ short s1; s1 = (short)d; s1 = (short)f; s1 = (short)l; s1 = (short)i; s1 = (short)s; s1 = (short)b; s1 = (short)c; /* s1 = (short)bo; s1 = (short)str; No se puede hacer casting a variables de tipo boolean y string. */ int i1; i1 = (int)d; i1 = (int)f; i1 = (int)l; i1 = (int)i; i1 = (int)s; i1 = (int)b; i1 = (int)c; /* i1 = (int)bo; i1 = (int)str; No se puede hacer casting a variables de tipo boolean y string. */ long l1 = l1 = l1 = l1 = l1; (long)d; (long)f; (long)l; (long)i;

Curso20082009

20

UniversidadCarlosIIIdeMadrid
l1 l1 l1 /* l1 l1 No string. */ = (long)s; = (long)b; = (long)c;

Solucionesalasegundaprcticadeprogramacin

= (long)bo; = (long)str; se puede hacer casting a variables de tipo boolean y

float f1; f1 = (float)d; f1 = (float)f; f1 = (float)l; f1 = (float)i; f1 = (float)s; f1 = (float)b; f1 = (float)c; /* f1 = (float)bo; f1 = (float)str; No se puede hacer casting a variables de tipo boolean y string. */ double d1; d1 = (double)d; d1 = (double)f; d1 = (double)l; d1 = (double)i; d1 = (double)s; d1 = (double)b; d1 = (double)c; /* d1 = (double)bo; d1 = (double)str; No se puede hacer casting a variables de tipo boolean y string. */ char c1; c1 = (char)d; c1 = (char)f; c1 = (char)l; c1 = (char)i; c1 = (char)s; c1 = (char)b; c1 = (char)c; /* c1 = (char)bo; No se puede hacer casting a variables de tipo boolean y string. */ boolean bo1; /* bo1 = (boolean)d; bo1 = (boolean)f; bo1 = (boolean)l; bo1 = (boolean)i; bo1 = (boolean)s;

Curso20082009

21

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

bo1 = (boolean)b; bo1 = (boolean)c; */ bo1 = (boolean)bo; /* bo1 = (boolean)str; Slo se puede hacer casting a variables de tipo boolean. */ String str1; /* str1 = (String)d; str1 = (String)f; str1 = (String)l; str1 = (String)i; str1 = (String)s; str1 = (String)b; str1 = (String)c; str1 = (String)bo; */ str1 = (String)str; /* Slo se puede hacer casting a variables de tipo String. */ } }

Tipo Byte Byte SI Short SI Int SI Long SI Float SI Double SI Char SI Boolean NO String NO

short SI SI SI SI SI SI SI NO NO

int SI SI SI SI SI SI SI NO NO

Long SI SI SI SI SI SI SI NO NO

Float SI SI SI SI SI SI SI NO NO

Double Char SI SI SI SI SI SI SI SI SI SI SI SI SI SI NO NO NO NO

boolean String NO NO NO NO NO NO NO NO NO NO NO NO NO NO SI NO NO SI

No se puede hacer casting a variables de tipo boolean y string para convertirlas a los tipos bsicos.

Ejercicio 24. Conversiones entre tipos Cree una clase denominada Ejercicio24. Dentro de ella cree un mtodo main y dentro de l teclee lo siguiente: char a; int b; short c; long d; float e; double f; System.out.println("asignamos variable char a enteros"); a = 4;
Curso20082009 22

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

b = a; c = a; d = a; System.out.println(a: + a); System.out.println(b: + b); System.out.println(c: + c); System.out.println(d: + d); System.out.println("asignamos variable double a float"); f = 1e200; e = f; System.out.println(f: + f); System.out.println(e: + e); System.out.println("asignamos variable float a int"); e = 1234.5678; b = e; System.out.println(e: + e); System.out.println(b: + b); Cul es el resultado del cdigo anterior? Por qu? No es posible realizar las conversiones entre los siguientes tipos: char a short. double a float. float a int. Se producen los siguientes errores:
Type Type Type Type mismatch: mismatch: mismatch: mismatch: cannot cannot cannot cannot convert convert convert convert from from from from char to short double to float double to float float to int

Ejercicio 25. Operadores relacionales Cree una clase denominada Ejercicio25. Dentro de ella cree un mtodo main y dentro de l teclee lo siguiente: int a,b; float c=3; boolean r,s,t,u,v,w,x; a = 3; b = 8; r = a == 0; s = a != 0; t = a <= b; u = b >= a; v = b > a; w = b < a; x = c == 3.0; System.out.println(r: + r); System.out.println(s: + s); System.out.println(t: + t); System.out.println(u: + u);
Curso20082009 23

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

System.out.println(v: + v); System.out.println(w: + w); System.out.println(x: + x); Cul es el resultado del cdigo anterior? Por qu? r es falso porque a no es igual a 0. s es verdadero porque a no es igual a 0. t es verdadero porque a es menor o igual que b. u es verdadero porque b es mayor o igual que a. v es verdadero porque b es mayor que a. w es falso porque b no es menor que a. x es verdadero porque c es igual a 3.0 Ejercicio 26. Operadores lgicos Cree una clase denominada Ejercicio26. Dentro de ella cree un mtodo main y dentro de l teclee lo siguiente: int a,b; boolean r,s,t; a = 3; b = 8; r = a == 0 | b >= a; s = a != 0 & b < a; t = a <= b ^ b > a; System.out.println(r: + r); System.out.println(s: + s); System.out.println(t: + t); Cul es el resultado del cdigo anterior? Por qu? r es verdadero porque la operacin OR a==0 (falso) | b>=a (verdadero) da como resultado verdadero. (Falso OR Verdadero = Verdadero) s es falso porque la operacin AND a!=0 (verdadero) & b<a (falso) da como resultado falso. (Verdadero AND Falso = Falso). t es falso porque la operacin OR EXCLUSIVA a<=b (verdadero) ^ b>a (verdadero) da como resultado falso. (verdadero OR EXCLUSIVA verdadero = falso). Ejercicio 27. Operadores de asignacin Cree una clase denominada Ejercicio27. Dentro de ella cree un mtodo main y dentro de l teclee lo siguiente: int a=5,b=3; boolean r=true,s=false; a+=b+8*b; r&=s; System.out.println(a: + a); System.out.println(b: + b); System.out.println(r: + r); System.out.println(s: + s); Cul es el resultado del cdigo anterior? Por qu?

Curso20082009

24

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

a vale 32 b vale 3 (no cambia) r es falso s es falso (no cambia) Ejercicio 28. Precedencia de operadores Cree una clase denominada Ejercicio28. Dentro de ella cree un mtodo main y dentro de l teclee lo siguiente: int a=5,b=3,c=20,d=20; c-=++a/b-3+a%b d-=++a/(b+3-4*a)%b System.out.println(c: + c); System.out.println(d: + d); Cul es el resultado del cdigo anterior? Por qu? c = 21. c = c-((a+1)/b-3+(resto de a ya incrementado/b)) = 20-((6/3)-3+(resto de 6/3)) = 20-(23+0) = 20-(-1) = 21. d = 20. d = d-(el resto de ((a+1+1)/(b+3-(4*a)))/b) = 20-(el resto de (7/(6-28))/3) = 20-(el resto de (7/(-22))/3) = 20-0 = 20. Ejercicio 29. mbitos de variables Cree una clase y dentro de ella un mtodo main. Dentro de l declare una variable de cualquier tipo, a continuacin vuelva a declarar otra vez la misma variable con el mismo tipo. Es posible? Por qu? Y si declaramos la variable con un tipo distinto? Introduzca la declaracin de variable anterior entre dos llaves { }. Es posible ahora volver a declararla? Por qu? Dentro de las llaves d valor a la variable. Imprmala fuera de las llaves. Qu ocurre? Por qu?
public class Ejercicio29 { public static void main(String[] args) { int a=3; //int a; //No es posible declararla otra vez con el mismo nombre y tipo, la variable ya existe: "Duplicate local variable a". //char a; //No es posible declararla otra vez con el mismo nombre y distinto tipo, la variable ya existe: "Duplicate local variable a". {int c=6;} int c = 3; System.out.println(c); //Imprime 3, el valor de c fuera de las llaves. // S es posible declarar de nuevo la variable fuera de las llaves, su mbito es diferente } }

Curso20082009

25

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

2.2 Control de flujo y bucles Ejercicio 30. Crear una clase que reciba como parmetro un nmero entero positivo y calcule su factorial.
public class Ejercicio30 { public static void main(String[] args) { int num = Integer.parseInt(args[0]); int resultado=1; for(int i=1;i<num+1;i++) { resultado = resultado*i; } System.out.println(resultado); } }

Ejercicio 31. Crear una clase que muestre por pantalla los divisores de un nmero recibido como parmetro.
public class Ejercicio31 { public static void main(String[] args) { int numero= Integer.parseInt(args[0]); for (int i=1;i<numero+1;i++) { if (numero%i==0)System.out.println(i); } } }

Ejercicio 32. Crear una clase que dada una hora calcule y muestre por pantalla la hora correspondiente al segundo siguiente. La hora se recibir como parmetro en forma de array de tres posiciones, la primera para horas, la segunda para minutos y la tercera para segundos.
public class Ejercicio32 { public static void main(String[] args) { byte hora = Byte.parseByte(args[0]); byte minuto = Byte.parseByte(args[1]); byte segundo = Byte.parseByte(args[2]); segundo+=1; if (segundo==60){ segundo = 0; minuto+=1; if (minuto==60){ minuto = 0; hora+=1; if (hora==24){

Curso20082009

26

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin
hora = 0;

} } } System.out.println("Hora: "+ hora +":"+ minuto +":"+ segundo); } }

Ejercicio 33. Crear un programa que dadas dos fechas cualesquiera que recibir como parmetros (da, mes ao) de forma similar al problema anterior, calcule el nmero de das que hay entre ellas. Se debern comprobar los aos bisiestos.
import java.util.Calendar; public class Ejercicio33 { public static void main(String[] args) { // Utilizando la clase Calendar definimos un calendario que contiene // la primera fecha Calendar fecha1 = Calendar.getInstance(); fecha1.set(Integer.parseInt(args[0]), Integer.parseInt(args[1])-1, Integer.parseInt(args [2])); // Utilizando la clase Calendar definimos un calendario que contiene // la segunda fecha Calendar fecha2 = Calendar.getInstance(); fecha2.set(Integer.parseInt(args[3]), Integer.parseInt(args[4])-1, Integer.parseInt(args [5])); // Para poder calcular la diferencia entre ambas, convertimos cada una // a segundos (convirtiendo cada fecha con el mtodo // "getTimeInMillis()" a milisegundos, y dividindolo entre mil) long fecha1_segundos = fecha1.getTimeInMillis() / 1000; long fecha2_segundos = fecha2.getTimeInMillis() / 1000; // Una vez que tenemos el valor numerico de ambas, conseguimos la // diferencia restndolas long diferencia_segundos = fecha2_segundos fecha1_segundos; // Ahora que sabemos la diferencia en segundos, dividimos entre el // nmero de segundos por da, y as conseguimos los das de // diferencia int resultado = (int) diferencia_segundos / (60 * 60 * 24); // Para evitar que el orden de las fechas influya (y nos devuelva // numeros negativos) utilizamos la funcin matematica "valor // absoluto": Math.abs() System.out.println(Math.abs(resultado)); } }

Curso20082009

27

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

Ejercicio 34. Crear una clase para implementar el funcionamiento bsico de un cajero automtico. Para ello, defina 2 variables de tipo entero, una llamada saldoEnCuenta, otra llamada cantidadASacar. D valores aleatorios a ambas variables. Si el saldo en cuenta es mayor o igual que la cantidad a sacar, imprima por pantalla: Peticin aceptada y el saldo resultante en cuenta. En cambio, si el saldo en cuenta es menor que la cantidad demandada imprima por pantalla: Saldo insuficiente.
public class Ejercicio34 { public static void main(String[] args) { // Utilizando la funcin Math.random() se crea un nmero aleatorio double saldoEnCuenta = Math.random() * 1000; double cantidadASacar = Math.random() * 1000; if (saldoEnCuenta < cantidadASacar) { System.out.println("Saldo insuficiente"); } else { System.out.println("Peticin aceptada"); System.out.println("Su saldo es: " + Math.round(saldoEnCuenta - cantidadASacar) + ""); } } }

Ejercicio 35. Crear una clase llamada Ejercicio35 y su correspondiente mtodo main. Implementar el cdigo necesario para conocer la estacin del ao segn el mes. Para ello defina una variable del tipo adecuado que represente los meses del ao, y la expresin condicional adecuada para que en caso de estar en Enero, Febrero o Marzo, imprima por pantalla invierno, Abril, Mayo o Junio, imprima primavera, Julio, Agosto, Septiembre imprima verano, Octubre, Noviembre, Diciembre imprima otoo.
public class Ejercicio35 { public static void main(String[] args){ String month = args[0]; if(month.equals("enero") || month.equals("febrero") || month.equals("marzo")) System.out.println("La estacin es invierno"); else if(month.equals("abril") || month.equals("mayo") || month.equals("junio")) System.out.println("La estacin es primavera"); else if(month.equals("julio") || month.equals("agosto") || month.equals("septiembre")) System.out.println("La estacin es verano "); else if(month.equals("octubre") || month.equals("noviembre") || month.equals("deciembre")) System.out.println("La estacin es otoo "); else

Curso20082009

28

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

System.out.println("Mes incorrecto"); } }

Ejercicio 36. Crear una clase llamada Ejercicio36 y su correspondiente mtodo main. Definir un array de enteros de 100 elementos. Utilize un bucle de tipo while para inicializar el array con los nmeros del 1 a 100. A continuacin, utilice un bucle de tipo for para mostrar por pantalla el contenido del array.
public class Ejercicio36 { public static void main(String[] args) { int array[] = new int[100]; int i=0; while (i<array.length){ array[i]=i+1; i++; } for (int j=0; j<array.length; j++){ System.out.print("["+array[j]+"]"); } } }

Ejercicio 37. Crear una clase llamada Ejercicio37 y su correspondiente mtodo main. Definir un array bi-dimensional para llevar una agenda semanal, que represente los das de la semana y las 24 horas de cada da. Utilice fors anidados para inicializar la agenda a: No tengo planes y muestre el resultado por pantalla.
public class Ejercicio37 { public static void main(String[] args) { String semana [][] = new String [7][24]; for(int i=0; i<semana.length;i++){ System.out.println(); System.out.println("Da "+(i+1)); for(int j=0; j<semana[i].length;j++){ semana[i][j]= "No tengo planes"; System.out.println(j+":00 Horas => "+semana[i][j]); } }

} }

Curso20082009

29

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

Ejercicio 38. Crear una clase llamada Ejercicio38 y su correspondiente mtodo main. Utilizar la sentencia de control adecuada para imprimir la tabla de multiplicar del nmero cinco. La salida debe tener el formato: 5x1 = 5 5x2 = 10 5x3 = 15 Etc
public class Ejercicio38 { public static void main(String[] args) { for (int i=0; i<=10; i++){ System.out.println("5x"+i+" = "+(5*i)); } } }

Ejercicio 39. Crear una clase llamada Ejercicio39 y su correspondiente mtodo main. Imprima por pantalla las horas en formato hh:mm que hay entre las 17:15 y las 18:34 (incluida) utilizando una sentencia repetitiva.
public class Ejercicio39 { public static void main(String[] args) { for (int hora=17; hora<=18; h++){ switch (hora){ case 17: for (int minuto=15; minuto<=59; minuto++) System.out.println(hora+":"+minuto); break; case 18: for (int minuto=0; minuto<=34; minuto++) System.out.println(hora+":"+minuto); break; } } } }

Ejercicio 40. Un hotel tiene 6 plantas, las 5 primeras tienen 100 habitaciones mientras la ltima, donde estn las suites, slo tiene 40. Cada una de las habitaciones puede estar ocupada o no por una persona. Crear un array que represente el conjunto de habitaciones del hotel y permita guardar informacin acerca de si una habitacin est ocupada o no y quin (nombre y apellidos) la ocupa. Implementar el cdigo necesario para que al ejecutar la clase se reciba mediante parmetros el nmero de planta y de habitacin y el programa devuelva si est ocupada o no, y en caso afirmativo quin la ocupa. Se deber controlar que tanto la planta como la habitacin estn en el rango permitido, imprimiendo nmero de habitacin incorrecto en caso contrario.
public class Ejercicio40 { public static void main(String[] args){

Curso20082009

30

UniversidadCarlosIIIdeMadrid

Solucionesalasegundaprcticadeprogramacin

String[][] Hotel= new String[6][]; Hotel[0]=new String[100]; Hotel[1]=new String[100]; Hotel[2]=new String[100]; Hotel[3]=new String[100]; Hotel[4]=new String[100]; Hotel[5]=new String[40]; // Comprobamos nmero de parmetros introducidos if (args.length !=2){ System.out.println("nmero de parmetros erroneos."); System.exit(-1); } int planta = Integer.parseInt(args[0]); int habitacion = Integer.parseInt(args[1]); // Comprobamos datos introducidos if (planta<1 || planta>6 || (habitacion<1 || habitacion>100)){ System.out.println("datos incorrectos"); System.exit(-1); }else{ if(planta==6 && habitacion>40){ System.out.println("datos incorrectos "); System.exit(-1); } } if (Hotel[planta][habitacion]==null){ System.out.println("habitacion vacia"); }else{ System.out.println(Hotel[planta][habitacion]+" est en la habitacin."); } } }

Curso20082009

31

También podría gustarte