Sie sind auf Seite 1von 12

LABORATORIO PROGRAMACIN JAVA SESIN 3: MODULARIDAD Y UTILIZACIN DE CLASES BSICAS EN JAVA 1.

Modularidad
En este apartado realizaremos una primera aproximacin a la modularidad dentro de una clase en Java realizando descomposicin funcional. El siguiente ejemplo muestra una clase con un mtodo auxiliar y el paso de parmetros por valor y por referencia.
//Paso de parmetros por valor y por referencia public class Parametros { static String global= "global"; //variable global a la clase public static void main(String args[]) { int num = 1; //por valor int numeros[] = {1,2,3,4,5}; //los arrays se pasan por referencia String cadena = "abc"; //por valor System.out.println("\nNmero antes de la llamada al mtodo:"+num); System.out.println("\nArray antes de la llamada al mtodo:"); for (int i=0; i<5; i++) { System.out.print(" "+numeros[i]); } System.out.println("\nCadena antes de la llamada al mtodo:"+cadena); System.out.println("\nGlobal antes de la llamada al mtodo:"+global); //llamamos al mtodo convierte(num, numeros, cadena); System.out.println("\nNmero despus de la llamada al mtodo:"+num); System.out.println("\nArray despus de la llamada al mtodo:"); for (int i=0; i<5; i++) { System.out.print(" "+numeros[i]); } System.out.println("\nCadena despus de la llamada al mtodo:"+cadena); System.out.println("\nGlobal despus de la llamada al mtodo:"+global); } public static void convierte(int num, int numeros[], String cadena) { num += 1; //sumamos 1 al array de enteros for (int i=0; i<5; i++) { numeros[i] += 1; } cadena = "def"; global = "nueva"; } }

En el siguiente ejemplo calculamos la potencia de un nmero. Para realizarlo nos basamos en la clase Math que define mltiples mtodos matemticos.
import java.io.*; public class Potencia { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); double base = 0, exponente = 0, resultado; System.out.println("\nIntroduce la base:"); base = Double.parseDouble(entrada.readLine()); System.out.println("\nIntroduce el exponente:"); exponente = Double.parseDouble(entrada.readLine()); //llamamos al mtodo resultado = calcula(base, exponente); System.out.println("\n\nEl resultado es: "+resultado); } public static double calcula(double num1, double num2) { //Calculamos con el mtodo pow de la clase Math return Math.pow(num1, num2); } }

1.1

Ejercicio sobre modularidad: 1. Escribir un programa conversor de pesetas a euros y viceversa. Para realizarlo se le debe pedir al usuario la cantidad a convertir y el tipo de conversin.

2. Arrays
Para familiarizarse con el uso de los arrays y clases bsicas de Java presentamos el siguiente ejemplo, que genera de forma aleatoria 10 nmeros entre el 0 y el 15 (haciendo uso de la clase Random) y a continuacin nos indica que introduzcamos un nmero y comprueba si ese nmero est en el array (utilizando la clase Arrays):
import java.io.*; import java.util.*; public class Adivina { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); int i, num; int numeros[] = new int[10]; boolean adivinado = false; Random rand = new Random();

for (i=0;i<=9;i++) { numeros[i]=rand.nextInt(15); } //Ordenamos el array Arrays.sort(numeros); //Pedimos el nmero System.out.print("Introduzca el nmero (0-15):" ); num = Integer.parseInt(entrada.readLine()); //llamamos al mtodo adivinado = adivinado(numeros, num); if (adivinado) { System.out.println("\nNmero adivinado"); } else { System.out.println("\nNmero NO adivinado"); } //Imprimimos todos los nmeros System.out.print("\nTodos los nmeros:"); for (i=0; i<=9; i++) { System.out.print(" "+numeros[i]); } } public static boolean adivinado(int numeros[], int num) { if (Arrays.binarySearch(numeros,num)>=0) { return true; } else { return false; } } }

2.1

Ejercicios sobre arrays: 1. Escribir un programa que pida 10 nmeros por teclado y los introduzca en un array. A continuacin debe decir cuales son el mayor y el menor. 2. Escribir un programa que pida 10 letras por teclado, las convierta a maysculas y los introduzca en un array. A continuacin debe decir la posicin de aquellas letras que sean vocales. 3. Escribir un programa que pida 10 letras por teclado y las introduzca en un array. Las letras solo pueden ser S o N. A continuacin debe decir cuantas S y N se han introducido. 4. Escribir un programa que pida 10 cadenas por teclado y los introduzca en un array. A continuacin debe decir cuales son la mayor y la menor haciendo uso del mtodo compareTo() de la clase String.

5. Realizar un programa que simule al sorteo de la lotera primitiva de la siguiente forma: Se construir un array de 6 valores enteros del 1 al 49, no pudiendo repetirse ningn valor. A continuacin se pedir al usuario su combinacin de 6 valores que tambin se introducir en otro array. El programa debe indicar el nmero de aciertos del usuario.

3. Cadenas de caracteres
Haciendo uso de la clase String hacer los siguientes ejercicios: 1. Escribir un programa que emplee el mtodo regionMatches() de la clase String para comparar dos cadenas introducidas por el usuario. El programa deber solicitar el nmero de caracteres que se van a comparar y el ndice inicial de la comparacin. El programa deber indicar si la primera cadena es mayor, igual o menor que la segunda. No se tienen en cuenta maysculas y minsculas. 2. Escribir un programa que solicite una cadena y una letra y nos devuelva las posiciones que ocupa esa letra en la cadena. 3. Escribir un programa que nos diga cuantas veces se repiten las vocales dentro de una cadena que el usuario introduce por teclado. Haciendo uso de la clase StringTokenizer hacer los siguientes ejercicios: 1. Escribir un programa al que se le pasa un nmero de telfono de la forma: 91-8885566. El programa deber usar la clase StringTokenizer para extraer el cdigo de la comunidad y el resto del nmero, convertir el cdigo de la comunidad en int y el resto en long, y presentarlo por pantalla. 2. Escribir un programa que lea una cadena y nos presente aquellas que empiecen por la letra b. 3. Escribir un programa que pida una cadena y la divida en palabras y presente las palabras en orden inverso. Consejo: Utilizar la clase StringBuffer.

4. Solucin de los ejercicios


4.1 Ejercicio sobre Modularidad 1. Escribir un programa conversor de pesetas a euros y viceversa. Para realizarlo se le debe pedir al usuario la cantidad a convertir y el tipo de conversin.
import java.io.*; public class Conversor { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); double cantidad = 0, resultado; int opcion = 1; System.out.println("\nIntroduce la cantidad:"); cantidad = Double.parseDouble(entrada.readLine()); System.out.println("\nIntroduce opcin (1-PtsEuros, 2-EurosPts):"); opcion = Integer.parseInt(entrada.readLine()); //llamamos al mtodo resultado = convierte(cantidad, opcion); System.out.println("\n\nEl resultado es: "+resultado); } public static double convierte(double cant, int op) { if (op==1) return cant /= 166.66; else if (op==2) return cant *= 166.66; else return 0; } }

4.2

Ejercicios sobre arrays: 1. Escribir un programa que pida 10 nmeros por teclado y los introduzca en un array. A continuacin debe decir cuales son el mayor y el menor.
import java.io.*; public class Arrays1 { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); int i, mayor, menor; int numeros[] = new int[10]; for (i=0;i<=9;i++) { System.out.print("Introduzca el nmero " + i +": ");

numeros[i]=Integer.parseInt(entrada.readLine()); } mayor=numeros[0]; menor=numeros[0]; for (i=1;i<=9;i++) { if (numeros[i]>mayor) if (numeros[i]<menor) } System.out.println("\nNmero System.out.println("\nNmero } }

mayor=numeros[i]; menor=numeros[i]; mayor: " + mayor); menor: " + menor);

2. Escribir un programa que pida 10 letras por teclado, las convierta a maysculas y los introduzca en un array. A continuacin debe decir la posicin de aquellas letras que sean vocales.
import java.io.*; public class Arrays2 { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); int i; String letras[] = new String[10]; for (i=0;i<=9;i++) { System.out.print("Introduzca la letra " + i +": "); letras[i]=entrada.readLine().toUpperCase(); } for (i=0;i<=9;i++) { if (letras[i].equals("A") || letras[i].equals("E") || letras[i].equals("I") || letras[i].equals("O") || letras[i].equals("U")) System.out.println("Posicin: " + i); } } } import java.io.*; public class Arrays2char { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); int i; char letras[] = new char[10]; for (i=0;i<=9;i++) { System.out.print("Introduzca la letra " + i +": "); letras[i]=entrada.readLine().toUpperCase().charAt(0); } for (i=0;i<=9;i++)

{ if (letras[i]=='A' || letras[i]=='E' || letras[i]=='I' || letras[i]=='O' || letras[i]=='U') System.out.println("Posicin: " + i); } } }

3. Escribir un programa que pida 10 letras por teclado y las introduzca en un array. Las letras solo pueden ser S o N. A continuacin debe decir cuantas S y N se han introducido.
import java.io.*; public class Arrays3 { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); int i, sis=0, nos=0; String encuesta[] = new String[10], res; for (i=0;i<=9;i++) { do { System.out.print("Introduzca la respuesta " + i +" (S,N): "); res=entrada.readLine().toUpperCase(); } while ( !res.equals("S") && !res.equals("N") ); encuesta[i]=res; } for (i=0;i<=9;i++) { if (encuesta[i].equals("S")) sis++; else nos++; } System.out.println("Sis: " + sis); System.out.println("Nos: " + nos); } }

4. Escribir un programa que pida 10 cadenas por teclado y los introduzca en un array. A continuacin debe decir cuales son la mayor y la menor haciendo uso del mtodo compareTo() de la clase String.
import java.io.*; public class Arrays4 { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); int i; String letras[] = new String[10]; String mayor, menor; for (i=0;i<=9;i++) { System.out.print("Introduzca la letra " + i +" : "); letras[i]=entrada.readLine();

} mayor=letras[0]; menor=letras[0]; for (i=1;i<=9;i++) { if (letras[i].compareTo(mayor)>0) mayor=letras[i]; else if (letras[i].compareTo(menor)<0) menor=letras[i]; } System.out.println("Mayor: " + mayor); System.out.println("Menor: " + menor); } }

5. Realizar un programa que simule al sorteo de la lotera primitiva de la siguiente forma: Se construir un array de 6 valores enteros del 1 al 49, no pudiendo repetirse ningn valor. A continuacin se pedir al usuario su combinacin de 6 valores que tambin se introducir en otro array. El programa debe indicar el nmero de aciertos del usuario.
/****************************************************************** Primitiva: Programa que simula el juego de la primitiva. Genera una combinacin de 6 nmeros distintos y comprueba cuantos aciertos tiene la combinacin de un usuario. ******************************************************************/ import java.util.*; import java.io.*; class Primitiva { static int primi[] = new int[6], combiUsuario[] = new int[6]; public static void main( String args[] ) throws IOException { int i, aciertos=0; BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); //generamos los nmeros genera(); //ordenamos el array Arrays.sort(primi); //pedimos la combinacin for (i=0; i<=5; i++) { System.out.print("Introduzca el nmero "+(i+1)+" (1-49): " ); combiUsuario[i] = Integer.parseInt(entrada.readLine()); } //comprobamos la combinacin for (i=0; i<=5; i++) { if (Arrays.binarySearch(primi,combiUsuario[i])>=0) { System.out.println("\nNmero acertado: " +combiUsuario[i]); aciertos++; } } System.out.println("\nNmeros acertados: "+aciertos);

//imprimimos todos los nmeros de la combinacin ganadora System.out.print("\nLa combinacin ganadora es:"); for (i=0; i<6; i++) { System.out.print(" "+primi[i]); } } public static void genera() { int contador=0, aux; Random rand = new Random(); //inicializamos el array for (int i=0; i<=5; i++) { primi[i]=0; } //generamos la combinacin sin nmeros repetidos while (contador<6) { aux = rand.nextInt(48) + 1; if (Arrays.binarySearch(primi,aux)<=0) { primi[contador] = aux; contador++; } } } }

4.3

Cadenas de caracteres

Haciendo uso de la clase String hacer los siguientes ejercicios: 1. Escribir un programa que emplee el mtodo regionMatches() de la clase String para comparar dos cadenas introducidas por el usuario. El programa deber solicitar el nmero de caracteres que se van a comparar y el ndice inicial de la comparacin. El programa deber indicar si la primera cadena es mayor, igual o menor que la segunda. No se tienen en cuenta maysculas y minsculas.
import java.io.*; public class String1 { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); String cadena1, cadena2, numCar, indice; int num, i; System.out.print("Introduzca cadena1=entrada.readLine(); System.out.print("Introduzca cadena2=entrada.readLine(); System.out.print("Introduzca numCar=entrada.readLine(); System.out.print("Introduzca indice=entrada.readLine(); la cadena1: "); la cadena2: "); el nmero de caracteres a comparar: "); el ndice inicial de comparacin: ");

num=(Integer.valueOf(numCar)).intValue(); i=(Integer.valueOf(indice)).intValue();

if (cadena1.regionMatches(i-1,cadena2,i-1,num)) { System.out.println("Las subcadenas son iguales"); } else { cadena1=cadena1.substring(i-1,i+num-1); cadena2=cadena2.substring(i-1,i+num-1); if ((cadena1.toUpperCase()).compareTo(cadena2.toUpperCase())<0) System.out.println("La subcadena "+cadena2 +" es mayor que "+cadena1); else if ((cadena1.toUpperCase()).compareTo(cadena2.toUpperCase())>0) System.out.println("La subcadena "+cadena2 +" es menor que "+cadena1); else System.out.println("La subcadena "+cadena2 +" es igual que "+cadena1); } } }

2. Escribir un programa que solicite una cadena y una letra y nos devuelva las posiciones que ocupa esa letra en la cadena.
import java.io.*; public class String2 { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); String cadena, letraStr; char letra; int i=0; letraStr=new String(); System.out.print("Introduzca una cadena: "); cadena=entrada.readLine(); System.out.print("Introduzca una letra: "); letraStr=entrada.readLine(); letra=letraStr.charAt(0); System.out.print("La letra "+letra+" se encuentra en las posiciones: "); while ((i<cadena.length())) { if (cadena.charAt(i)==letra) System.out.print(i+1+", "); i++; } } }

3. Escribir un programa que nos diga cuantas veces se repiten las vocales dentro de una cadena que el usuario introduce por teclado.
import java.io.*; public class String3 { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in));

10

String frase=new String(); System.out.println("Introduzca una frase: "); frase=entrada.readLine().toLowerCase(); int i=0, vocales=0; while (i<frase.length()) { if (frase.charAt(i)=='a' || frase.charAt(i)=='e' || frase.charAt(i)=='i' || frase.charAt(i)=='o' || frase.charAt(i)=='u') vocales++; i++; } System.out.println("El nmero de vocales introducidas es: "+vocales); } }

Haciendo uso de la clase StringTokenizer hacer los siguientes ejercicios: 4. Escribir un programa al que se le pasa un nmero de telfono de la forma: 91-8885566. El programa deber usar la clase StringTokenizer para extraer el cdigo de la comunidad y el resto del nmero, convertir el cdigo de la comunidad en int y el resto en long, y presentarlo por pantalla.
import java.io.*; import java.util.StringTokenizer; public class StringTokenizer1 { static String telef; public static void main(String args[]) throws IOException { int codProvincia; long numTelef; BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); System.out.print("Introduzca un nmero de telfono: "); telef=entrada.readLine(); StringTokenizer st=new StringTokenizer(telef,"-"); while (st.hasMoreTokens()) { String codigo=st.nextToken(); String numero=st.nextToken(); codProvincia=Integer.parseInt(codigo); numTelef=Long.parseLong(numero); System.out.println("El cdigo de la comunidad es "+codProvincia +", el nmero es "+numTelef); } } }

11

5. Escribir un programa que lea una cadena y nos presente aquellas que empiecen por la letra b.
import java.io.*; import java.util.StringTokenizer; public class StringTokenizer2 { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); String frase=new String(); String cadena1=new String(); StringBuffer cadbuf=new StringBuffer(); System.out.println("Introduzca una frase:"); frase=entrada.readLine(); StringTokenizer str=new StringTokenizer(frase," "); while (str.hasMoreTokens()) { cadena1=str.nextToken(); if (cadena1.charAt(0)=='b') cadbuf.append(cadena1+" "); } System.out.print("Las palabras que comienzan con b son: "); System.out.println(cadbuf); } }

6. Escribir un programa que pida una cadena y la divida en palabras y presente las palabras en orden inverso. Consejo: Utilizar la clase StringBuffer.
import java.io.*; import java.util.StringTokenizer; public class StringTokenizer3 { public static void main(String args[]) throws IOException { BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in)); String frase=new String(); String cadena1=new String(); StringBuffer fraseInversa=new StringBuffer(); System.out.println("Introduzca una frase: "); frase=entrada.readLine(); StringTokenizer str=new StringTokenizer(frase," "); while (str.hasMoreTokens()) { cadena1=str.nextToken(); fraseInversa.insert(0,cadena1+" "); } System.out.println("La frase al inverso es:\n"+fraseInversa); } }

12

Das könnte Ihnen auch gefallen