Está en la página 1de 12

1

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";
}

}

2
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();
3

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.

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

5
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 +": ");
6
numeros[i]=Integer.parseInt(entrada.readLine());
}

mayor=numeros[0];
menor=numeros[0];

for (i=1;i<=9;i++)
{
if (numeros[i]>mayor) mayor=numeros[i];
if (numeros[i]<menor) menor=numeros[i];
}
System.out.println("\nNmero mayor: " + mayor);
System.out.println("\nNmero 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++)
7
{
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();
8
}

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);



9
//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 la cadena1: ");
cadena1=entrada.readLine();
System.out.print("Introduzca la cadena2: ");
cadena2=entrada.readLine();
System.out.print("Introduzca el nmero de caracteres a comparar: ");
numCar=entrada.readLine();
System.out.print("Introduzca el ndice inicial de comparacin: ");
indice=entrada.readLine();

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

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));
11

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);
}
}
}

12
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);
}
}

También podría gustarte