Documente Academic
Documente Profesional
Documente Cultură
PRÁCTICA O PROCESO
Existe una distinción importante entre prácticas y procesos. Las prácticas son lo que
debe hacer y el proceso es la estructura para hacer las tareas. El proceso define el
orden en el cual aplicar las prácticas y hacer el trabajo, de forma que obtenga
resultados de ingeniería significativos. Las prácticas aprovechan el proceso de
ingeniería de software que explica las tareas y el orden en el que se deben realizar
para crear productos de trabajo específicos. Las fases generales clave del proceso
son:
•Análisis de requisitos
•Análisis funcional
•Síntesis de diseño
•Implementación
•Prueba de unidad
Por buenas prácticas se entiende como un conjunto coherente de acciones que han
rendido buen o incluso excelente servicio en un determinado contexto y que se espera
que, en contextos similares, rindan similares resultados.
BUENAS PRACTICAS EN JAVA BASICO E INTERMEDIO CON COMPILADORES
EN LINEA Y NETBEANS 8
ANTECEDENTE
Para describir la gramática del lenguaje Java se utilizara la Forma Backus Neur (BNF).
Los Autores de este libro utilizan las siguientes formas:
… Sucesión
() Agrupa
max
min
Indica cantidad Mínima y máxima de Elementos
A…Z <mayúsculas>
a…z <minúsculas>
0…9 <dígitos>
+ - * /% <aritméticos >
><= <relación>
{} <bloques>
() [] <agrupación>
,;. <puntuación>
“„ <literal>
<blanco>
2. TOKENS: REGLAS (BNF)
<Token>:- <Operadores><Operandos>
<operadores>:- ><relación><lógicos><aritméticos<literal>
<infijo>:- += -= *= /=
<postfijo>:- ++ (incremento)
-- (decremento)
<Literal>:-<char><cadena>
<char>:- „<símbolo>‟
Ejemplo: „a‟
256
<cadena>:-”
1
<símbolo> “
Ejemplo: “casa”
<operandos>:- <variable> <objeto>< reservada> < clase>< método><numero>
Declaración de Constantes
Ejemplos:
Ejemplo:
Declaración de un Arreglo:
Ejemplo:
Ejemplo:
Subindicación de un arreglo
Tamaño de un arreglo:
Ejemplo:
A.length
Inicialización de un arreglo:
A[i]= i;
// Definición de variables
Lo primero que se suele definir son los atributos de la clase. Esto son variables que
son visibles desde todos los métodos que constituyen la clase.
Puede haber varios constructores. Se tienen que diferenciar en los argumentos que
cada uno de ellos recibe.
Después se escriben los diferentes métodos de la clase. Estos son funciones que al
igual que los atributos pueden ser públicos, privados, protegidos, estáticos.
Las sentencias que constituyen un método se escriben entre dos llaves {}. Obsérvese
también que cada instrucción se termina con un punto y coma
BNF:
La estructura de los programas escritos en Java está sujeta a las siguientes reglas:
2.5 COMPILADORES
import java.util.*;
import javax.swing.*;
public class CasoToken
{
public static void main(String[] args)
{
int i,j,k;
String Cod="33,55,28,12";
String Nom="Pedro.Luis.Ines.Carlos";
String Not="2.5,4.2,1.3}4.3,2.8,2.5}2.5,3.6,1.8}4.6,3.8,4.2";
String S;
StringTokenizer T1=new StringTokenizer(Cod.toString (),",");
StringTokenizer T2=new StringTokenizer(Nom.toString(),".");
StringTokenizer T3=new StringTokenizer(Not.toString(),"}");
while(T1.hasMoreTokens() && T2.hasMoreTokens () && T3.hasMoreTokens())
{
System.out.println();
System.out.print(" Codigo: "+T1.nextToken());
System.out.print(" Nombre: "+T2.nextToken());
System.out.print(" Notas: "+T3.nextToken());
}
System.out.println();
}
}
Pulsar el Botón Execute
Compilar y Ejecutar
2.5.2 Compilador en Plataforma Netbeans
Taller Primer Programa Aplicativo NetBeans
Selección y ejecución
Tipo de Proyecto
Pulsar
Colocar como nombre Proyecto: Primero
Pulsar
Código Generado:
Antecedente
El método main en java es un estándar utilizado por la JVM (Java Virtual Machine)
para iniciar la ejecución de cualquier programa Java. Dicho método se conoce como
punto de entrada de la aplicación java
Ejecutar
Pulsar o F5
En la ventana OutPut-
Práctica De Potencia
Selección y ejecución
Tipo de Proyecto
Pulsar
. Pulsar
Quitar Comentarios…
Algoritmo a Realizar
Lo primero que se debe hacer es en forma algorítmica
Entero pot, b, n, i
pot=1
b= 3
n=5
Para i = 1 hasta n
pot = pot * b
Fpara
Escriba pot
Codificar
Colocar después de:
public static void main(String[] args)
código java
int i,n=5,b=4,pot=1;
for(i=1;i<=n;i++)
pot=pot*b;
System.out.println("La Potencia es: "+pot);
Quedando….
Ejecutar
Pulsar o F5
En ventana Output-
2.6 Sentencias de Entrada/Salida
Entrada de Datos:
Forma 1: Clase DataInputStream
String S;
DataInputStream in=new DataInputStream(System.in);
System.out.println("Digite Cadena");
try
{
S=in.readLine();
}
catch(IOException e){}
Forma 2: El método showInputDialog
Este método nos permite mostrar diálogos estandarizados que nos piden que
introduzcamos algún dato. Al igual que en los métodos anteriores los argumentos que
utilizan principalmente son el mensaje a mostrar, el título, etc. A continuación vemos
un ejemplo de uso de este método.
String n = JOptionPane.showInputDialog(null, "Introduce el dato");
Como podemos observar en el código anterior este método nos devuelve una cadena
que contiene los datos que hemos introducido en el diálogo.
Nota: Debe utilizarse import javax.swing.*;
double x = scanner.nextDouble();
double y = scanner.nextDouble();
La clase Scanner ofrece una serie de métodos que permiten ingresar tipos primitivos
de datos utilizando:
Este método nos permite mostrar diálogos que muestran un mensaje y contienen un
botón de aceptación. Los parámetro mínimos necesarios dependen del carácter del
mensaje aunque general mente son la ventana padre, el mensaje a mostrar, el título
del diálogo y el tipo de mensaje que se mostrará. En las siguientes figuras podremos
ver algunos ejemplos junto al código que lo genera.
JOptionPane.showMessageDialog( null, “Diálogo de información”);
Presencia
Condición
Ausencia
Árbol de Condición
Presencia
Edad>=18
Ausencia
ESCRIBA Menor de Edad
Árbol de Condición
ESCRIBA Pasa la prueba
Presencia
Puntos>=6
Ausencia
ESCRIBA Repetir Prueba
SINTAXIS JAVA
Forma 1:
If( <condición> )
Forma 2:
If( <condición> )
else
Donde:
<operador aritmético> :: - + / * -
b
d
- Incremental
- Decremental
c SENTENCIA(S) SENTENCIA(S)
d INDICE=INDICE+1 INDICE=INDICE-1
IR AL MOMENTO b IR AL MOMENTO b
SINTAXIS JAVA:
for( a; b; d)
c
Donde
c::- ; | <Sentencia> | <Bloque de Sentencias>
EJEMPLOS:
1. La Multiplicación de A X B por medio de Suma. Esta suma se representa como la
sumatoria de B en A – Veces.
A
∑ B=0+B+B+B
i=1 A - Veces
E0.
S=0 La Sumatoria se debe iniciar en 0
Lea A
Lea B
Autómata
a. i=1
b. i <= A
c. S=S+B
d. i=i+1
ir al Momento b
2. El Factorial de un numero n.
Lea n
Л i = 1*1*2*3*….n (Multiplicatoria de i n veces)
i=1 n - Veces
E0.
F=1 La Multiplicatoria se debe iniciar en 1
Lea n
Autómata
a. i=1
b. i <= n
c. F = F * i
d. i=i+1
ir al Momento b
0 1 2 3 4 . . . n -1
A
d. Hora = Hora +1
Ir al Momento b del Autómata externo
PROGRAMA EN JAVA
0 1 2 3 4 . . . n -1
0
A FILAS
n-1
COLUMNAS
Para recorrer una Matriz se requiere de un índice para las filas y otro índice para las
columnas:
Entonces, se necesita de dos Autómatas uno Externo para recorrer filas y un Interno
para recorrer columna por columna de la fila activa ( índice autómata externo).
indice Externo= 0 … n – 1. Se toma como el índice i
Indice Interno= 0… n – 1. Se toma como el índice j
Limite Inferior = 0
Limite Superior = n – 1
E0:
Constante Entera n = 10
Entera A [n] [n] Se declara una Matriz A de n – posiciones por n - posiciones
Autómata de Lectura
Autómata Externo
a. i = 0
b. i < n
c.
Autómata Interno
a. j=0
b. j < n
c. Lea A[ i ] [ j ]
d. j = j +1
ir al momento b del Autómata Interno
Fin Autómata Interno
d. i =i + 1
ir al Momento b del Autómata Externo
Autómata de Escritura
Autómata Externo
a. i = 0
b. i < n
c.
Salto de Línea
Autómata Interno
a. j=0
b. j < n
c. Escriba A[ i ] [ j ]
d. j = j +1
ir al momento b del Autómata Interno
Fin Autómata Interno
d. i =i + 1
ir al Momento b del Autómata Externo
PROGRAMA EN JAVA
public class Prueba8
{
public static void main(String args[])
{
int filas, columnas,i,j;
filas=(int) (Math.random()*10)+3;
System.out.println("filas: "+filas);
columnas=(int) (Math.random()*10)+3;
System.out.println("columnas: "+columnas);
int A[][]=new int[filas][columnas];
//Lectura()
for(i=0;i<filas;i++)
{
System.out.println();
for(j=0;j<columnas;j++)
{
System.out.print("Digite A["+i+"]["+j+"]: ");
A[i][j]=(int) (Math.random()*20)+3;
}
}
//Escritura
System.out.println(" ------ Matriz Leida -------");
for(i=0;i<filas;i++)
{
System.out.println();
for(j=0;j<columnas;j++)
{
if(A[i][j]>=10)
System.out.print(A[i][j]+" ");
else
System.out.print(A[i][j]+" ");
}
}
System.out.println();
System.exit(0);
}
}
7. Ordenamiento de un Vector
Solo se analiza el Autómata de Ordenamiento de un vector n – posiciones porque los
autómatas de lectura y escritura en un vector fueron ya analizados.
Se toma como caso un ordenamiento sencillo que este autor lo denomina lineal que
consiste en dos índices (indica posición dentro del vector) comparado y comparante:
Comparado Comparante
Se concluye entonces
E0
b
d
c. Sentencia(s)
d. Ir al Momento b
SINTAXIS JAVA:
while( b)
c
Donde
El BNF es el siguiente:
<operador aritmético> :: - + / * -
8. Digitalización de un Numero
Un número es un conjunto de dígitos:
<Digito>:-|0|1|...|9|
<Numero>:- ∫ <digito>
Dado un número se debe llevar cada digito a una posición de un vector. Entonces,
La Unidad del Número a la Posición 0
La Décima del Número a la Posición 1
La Centésima del Número a la posición 2
y así sucesivamente.
E0:
Entero A[n] Vector de n - posiciones
Lea x // Numero
tope=-1 // Cuando ingresa al ciclo se incrementa y debe cumplir tope=0…n-1
i=0
Autómata de Búsqueda de Valor:
b. i<n AND A[ i ] sea diferente de x
c.
i= i +1
d. ir a b
Fin Autómata de Búsqueda de Valor
Presencia
i<n
Ausencia
ESCRIBA n no es primo
Presencia
i<= n /2
Ausencia
ESCRIBA n es primo
Fin Autómata del Primo
PROGRAMA EN JAVA
public class Primo
{
public static void main(String[] args)
{
int i,n;
n=(int) (Math.random()*10000)+3;
System.out.println("n: "+n);
i=2;
while(i<=(int) Math.sqrt(n) && n%i!=0)
i++;
if(i<=(int) Math.sqrt(n))
System.out.println(n+" No es primo ");
else
System.out.println(n+" Es primo ");
}
}
Algo muy interesante para enriquecer y relacionar los dos autómatas cíclicos (finito y
mientras que) se presenta bajo dos antecedentes:
Por lo tanto, se puede realizar también en el autómata de ciclo finito con condición de
permanencia
SINTAXIS JAVA:
for( a; b; d)
c
E0.
Lea n
CP:: i<=n/2 AND residuo(n,i) no sea 0 , ó sea, n no sea múltiplo de i
Autómata del Primo
a. i = 2
b. si i<=n/2 AND residuo(n,i) no sea 0
c.
d. i = i + 1
ir a b
Fin Autómata del Primo
ESCRIBA n no es primo
Presencia
i<= n /2
Ausencia
ESCRIBA n es primo
PROGRAMA EN JAVA
public class Prueba10
{
public static void main(String[] args)
{
int i,n;
n=(int) (Math.random()*10000)+1;
System.out.println("n: "+n);
i=2;
for(i=2;i<=n/2 && n%i!=0;i++);
if(i<=n/2)
System.out.println(n+" No es primo ");
else
System.out.println(n+" Es primo ");
}
}
OTRO PROGRAMA DE BUSQUEDA EN UN VECTOR
E0
c. Sentencia(s)
ir al Momento c
SINTAXIS Java:
do
{
c
while( b);
Donde
El BNF es el siguiente:
<operador aritmético> :: - + / * -
11. Validación de un Numero
Se desea que una Calificación este este entre 1…100
E0:
Condición de Permanencia (CP)
En este caso se aplica la conceptualización de:
CP = negación (Condición de Salida – CS)
CS:: nota>= 1 && nota < = 100 ; entonces
CP:: nota< 1 || nota > 100
Autómata Haga Mientras Que
c. Lea Nota
b. Si nota< 1 || nota > 100 ir a c
Fin Autómata Haga Mientras Que
Presencia
Nota>=60
Ausencia
ESCRIBA Repetir Prueba
Programa compilado
nota=(int) (Math.random()*1000)+1;
System.out.println(" calificacion generada "+nota);
}
while(nota<1 || nota>100);
if(nota>=60)
System.out.print(nota+" Paso la Prueba ");
else
System.out.print(nota+" Perdio...repetir la Prueba ");
}
}
12. Búsqueda Binaria
E0:
Constante Entera n = 10
minimo=0
maximo=n-1
c.
mitad = (minimo+maximo) /2
minimo= mitad +1
Presencia
A[mitad]< x
Ausencia
maximo= mitad -1
Presencia
A[mitad]> x
Ausencia
b.
Presencia
A[mitad]= = x
Ausencia
No existe
Programa compilado
public class Prueba14
{
public static void main(String args[])
{
int n,i,j,x,aux;
int menor,mayor,mitad;
int A[];
n=(int) (Math.random()*10)+5;
System.out.println("n: "+n);
A=new int[n];
System.out.println("Vector Leido");
for(i=0;i<A.length;i++)
{
A[i]=(int) (Math.random()*20)+3;
System.out.print(A[i]+" ");
}
System.out.println();
for(i=0;i<A.length-1;i++)
for(j=i+1;j<A.length;j++)
if(A[i]>A[j])
{
aux=A[i];
A[i]=A[j];
A[j]=aux;
}
System.out.println("Vector Ordenado");
for(i=0;i<A.length;i++)
{
System.out.print(A[i]+" ");
}
System.out.println();
x=(int) (Math.random()*20)+3;
menor=0;
mayor=A.length-1;
do
{
mitad=(menor+mayor)/2;
if(A[mitad]>x)
mayor=mitad-1;
if(A[mitad]<x)
menor=mitad+1;
}
while(A[mitad]!=x && mayor>=menor);
if(A[mitad]==x)
System.out.println("Existe: "+x+" en la Posicion: "+mitad);
else
System.out.println("No Existe ");
}
}
AUTOMATA DE SELECCION
Único
Valor1, Valor2
Variables
Valor3 Hasta Valor4
Cota
SINTAXIS JAVA:
switch(variable)
{
case valor1 :
<sentencia> | <conjunto de sentencias>
[ break; ]
case valor2 :
<sentencia> | <conjunto de sentencias>
[ break; ]
[ default:
<sentencia> | <conjunto de sentencias>
]
}
La cláusula break: Es opcional. Rompe la continuidad de casos.
Ejemplo:
Se desea clasificar por edades del 1 al 9.
La edad del 2 al 4 es Párvulos
La edad del 5 al 6 es Kinder
La edad del 7 al 9 es Infantil
switch (edad)
{
case 2:
case 3:
case 4:
cout<<”Parvulos “;
break;
case 5:
case 6:
cout<<”Kinder “;
break;
case 7:
case 8:
case 9:
cout<<”Infantil“;
default:
cout<<” Mal Leída la Edad”;
}
Si la edad leída es de valor 3 se toma el caso 3 y 4 caso escribiendo “Párvulos” y se
sale del switch por la cláusula break
E0:
Lea Edad
Autómata de Selección
Parvulos
2,3,4
5,6
kinder
edad
7,8,9
infantil
sino
Error
PROGRAMA EN JAVA
import java.util.*;
public class Prueba15
{
public static void main(String args[])
{
int edad;
edad=(int) (Math.random()*10)+1;
System.out.println("Edad: "+edad);
switch (edad)
{
case 2:
case 3:
case 4:
System.out.println("Parvulos ");
break;
case 5:
case 6:
System.out.println("Kinder ");
break;
case 7:
case 8:
case 9:
System.out.println("Infantil");
default:
System.out.println("Mal Generada la Edad");
}
}
}
16. Identificar Digito: Unidad, decena, centena, mil de un número
Autómata Haga Mientras Que (Validar que el numero este entre 1…9999)
c.
Lea numero
Fin Autómata Haga Mientras Que (Validar que el numero este entre 1…9999)
E0:
n = -1
b. si numero >0
c.
n++
A[n]=residuo(n,10)
n = n /10
ir a b
unidad
0
1
decena
i
2
centena
3
mil
PROGRAMA EN JAVA
public class Prueba16
{
public static void main(String args[])
{
int i,x,n=-1;
int A[]=new int[4];
x=(int) (Math.random()*10000)+1;
System.out.println("Numero a digitalizar[1...9999]: "+x);
while(x>0)
{
n++;
A[n]= x % 10;
x/=10;
}
System.out.println();
System.out.println("Numero Digitalizado: ");
for(i=0;i<=n;i++)
switch(i)
{
case 0:
System.out.println("Unidad: "+A[i]+" ");
break;
case 1:
System.out.println("Decena: "+A[i]+" ");
break;
case 2:
System.out.println("Centena: "+A[i]+" ");
break;
case 3:
System.out.println("Mil: "+A[i]+" ");
break;
}
}
}
17. Un Menú de Operaciones Aritméticas
Se lee una variable denominada opción.
Si tecla = 1 se hace suma( c= a + b)
Si tecla = 2 se hace resta( c= a - b)
Si tecla = 3 se se hace multiplicación(c= a * b)
Si tecla = 4 se se hace división(c= a / b)
Si tecla = 5 se sale del programa.
Para este programa se necesita un autómata Haga Mientras Que opción no sea igual
a5
E0:
Lea a,b
Autómata Haga Mientras Que (permanencia en el Programa)
c.
Autómata Haga Mientras Que (Validar que opcion sea 1 a 5)
c.
Borrar Pantalla
Mostrar Opciones
Lea opcion
b. si opcion <1 || opcion > 5 ir a c
Fin Autómata Haga Mientras Que (Validar que opcion sea 1 a 5)
c = a+b
1
2
c= a -b
opcion
3
c= a * b
4
c = a /b
Mostar resultado de Operación
b. si opcion no es igual a 5 ir a c
PROGRAMA EN JAVA
public class Prueba17
{
public static void main(String[] args)
{
int a,b,c,opcion;
b = (int) (Math.random()*10)+2;
System.out.println(" Valor de b: "+b);
a = (int) (Math.random()*20)+b;
System.out.println(" Valor de a: "+a);
do
{
do
{
System.out.println("1. Suma ");
System.out.println("2. Resta");
System.out.println("3. Multiplicacion");
System.out.println("4. Division");
System.out.println("5. Salir ");
opcion = (int) (Math.random()*5)+1;
System.out.println("Opcion:"+opcion);
}
while(opcion<1 || opcion>5);
switch(opcion)
{
case 1:
c=a+b;
System.out.println(c+" = "+a+" + "+b);
break;
case 2:
c=a-b;
System.out.println(c+" = "+a+" - "+b);
break;
case 3:
c=a*b;
System.out.println(c+" = "+a+" * "+b);
break;
case 4:
c=a/b;
System.out.println(c+" = "+a+" / "+b);
break;
}
System.out.println();
}
while(opcion!=5);
}
}
BUENAS PRACTICAS EN JAVA BASICO E INTERMEDIO CON COMPILADORES
EN LINEA Y NETBEANS 8
8. Interfaces
Las interfaces son expresiones puras de diseño. Se trata de auténticas
conceptualizaciones no implementadas que sirven de guía para definir un determinado
concepto (clase) y lo que debe hacer, pero sin desarrollar un mecanismo de solución.
Se trata de declarar métodos abstractos y constantes que posteriormente puedan ser
implementados de diferentes maneras según las necesidades de un sistema.
9. Relaciones entre objetos/clases
En un sistema orientado a objetos, los diversos objetos que lo componen han de
interactuar entre sí para lograr una serie de objetivos comunes.
Existen varios tipos de relaciones que pueden unir a los diferentes objetos, pero entre
ellas destacan las relaciones de: asociación, todo/parte, y
generalización/especialización.
Realiza
Para identificar las asociaciones más comunes, la siguiente lista es de gran ayuda.
Categoría de la asociación Ejemplos
A se
conoce/introduce/registra/presenta/captura en Venta-Caja
B
A es miembro de B Gerente-Banco
A es propiedad de B Caja-Tienda
Las asociaciones más importantes son las siguientes:
· A es una parte física o lógica de B
· A está física o lógicamente contenido en B
· A está registrado en B
Las asociaciones son importantes, pero no se debe dedicar tiempo excesivo a ellas.
Es más importante identificar los objetos que las asociaciones. Muchas asociaciones
tienden a confundir el modelo conceptual, en vez de aclararlo. Se pueden incorporar
las que se indican en los casos de uso, y las que se consideren necesarias para un
adecuado entendimiento del problema.
La multiplicidad define cuántas instancias de un tipo A pueden asociarse a una
instancia del tipo B en determinado momento. Las expresiones de multiplicidad son las
siguientes:
* cero o más, muchos
.* uno o más
.40 de uno a cuarenta
5 exactamente cinco
2,4,6 exactamente dos, cuatro o seis
b.) Relaciones de Todo/Parte
Muchas veces una determinada entidad existe como conjunción de otras entidades,
como un conglomerado de ellas. La orientación al objeto recoge este tipo de
relaciones como dos conceptos; la agregación y la composición.
En este tipo de relaciones un objeto componente se integra en un objeto compuesto.
La diferencia entre agregación y composición es que mientras que la composición
se entiende que dura durante toda la vida del objeto componedor. En la agregación
(referencia) no tiene por qué ser así. Es un tipo de relación dinámica, en donde el
tiempo de vida del objeto incluido es independiente del que lo incluye (el objeto base
utiliza al incluido para su funcionamiento).
Esto se puede implementar como un objeto (objeto compuesto) que cuenta entre sus
atributos con otro objeto distinto (objeto componente).
Un ejemplo es el siguiente:
Un Almacén posee Clientes y Cuentas (los rombos van en la clase que posee la
composición como la referencia).
Cuando se destruye el Objeto Almacén también son destruidos los objetos Cuenta
asociados, en cambio no son afectados los objetos Cliente asociados.
La composición (por Valor) se destaca por un rombo relleno.
La agregación (por Referencia) se destaca por un rombo transparente.
c.) Relaciones de Generalización/Especialización
A veces sucede que dos clases tiene muchas de sus partes en común, lo que
normalmente se abstrae en la creación de una tercera clase (padre de las dos) que
reúne todas sus características comunes.
El ejemplo más extendido de este tipo de relaciones es la herencia, propiedad por la
que una clase (clase hija) recoge aquellos métodos y atributos que una segunda clase
(clase padre) ha especificado como "heredables".
Este tipo de relaciones es característico de los sistemas orientados a objetos.
En realidad, la generalización y la especialización son diferentes perspectivas del
mismo concepto, la generalización es una perspectiva ascendente (bottom-up),
mientras que la especialización es una perspectiva descendente (top-down).
d) Dependencia.
La dependencia de clases es un concepto de sistemas orientados a objetos que nos
indica la relación existente entre dos clases. Como su nombre indica nos está diciendo
que una clase depende de otra para realizar su funcionamiento.
Cuando trabajamos con clases es una buena práctica que una clase realice una única
función. De manera que las clases que deban realizar funciones complejas estarán
formadas a partir de una asociación de diversas pequeñas clases en las que delegará
cada funcionalidad en concreto.
10. Modelo Conceptual o de Dominio (Diagrama de Clases)modelo conceptual o de
dominio muestra gráficamente, a través de un grupo de diagramas, los objetos, los
atributos y las asociaciones más importantes del dominio o sistema que se está
analizando.
Tipos de Relaciones
Tipos de Asociación
11. Que es una Metaclase
Es una clase cuyas instancias son clases en lugar de objetos. Es decir, si para
construir un objeto usas una clase, para construir una clase usas una metaclase.
Resulta muy útil principalmente para dos cosas:
o Cuando no sea posible determinar el tipo de un objeto hasta el momento de la
ejecución del programa, o cuando sea necesario crear una clase a la medida
de las circunstancias. Se podría decir que en este caso la metaclase funciona
como una “fábrica de clases” especializada.
o Cuando se desea componer o modificar el comportamiento o características de
una clase en el momento de su creación por medio de herencia o por
mecanismos de construcción dinámicos ( similar a patrón decorator)
PRIMER TALLER SISTEMAS BASADOS EN CLASES CON NETBEANS 8.0
Ejecutar
Seleccionar File>>New Project…
Verificar:
El Netbeans genera:
- Definición de Variables
Cuarto Pasó Métodos de la clase. Colocar después del método constructor los
siguientes métodos
//Naturalezas de Numeros
boolean perfecto() //suma de sus multiplos es igual a el mismo
{
if(x==multiplos(x))
return true;
else
return false;
}
void amigo()
{
int amigo1=multiplos(x);
int amigo2=multiplos(amigo1);
if(amigo2==x)
System.out.println(amigo1+" es amigo de "+x);
}
boolean egolatra()// la suma de las potencias n de sus digitos es igual a el mismo
{
s=0;
for(i=0;i<n;i++)
s=s+potencia(A[i],n);
if(s==x)
return true;
else
return false;
}
boolean magico()
int s1,s2;
Arrays.sort(A);
duplicaContrario();
s1=base10(A,10);
s2=base10(B,10);
if((s1-s2)==x)
return true;
else
return false;
Se diseña una clase que liste los enteros de 100 a 999 para evaluar que naturaleza es
cada número
void listado()
{
int i;
Numero N;
for(i=100;i<=999;i++)
{
N=new Numero(i);
if(N.perfecto())
System.out.println(i+" es un numero perfecto");
if(N.magico())
System.out.println(i+" es un numero magico");
if(N.egolatra())
System.out.println(i+" es un numero egolatra");
N.amigo();
}
}
Pulsar para salvar
int i,j;
void conteo(int A[],int B[],int P[])//A vector del computador B vector digitado
{
P[0]=0; //contador de fijas
P[1]=0; //contador de picas
for(i=0;i<A.length;i++)
for(j=0;j<A.length;j++)
if(A[i]==B[j])
if(i==j)
P[0]++;
else
P[1]++;
}
Se diseña una clase que permita realizar el juego haciendo uso de las clase Numero y
PicaFija. Entonces, se debe cumplir con:
Entonces, coloque:
import java.util.Date;
import java.util.Random;
import javax.swing.*;
Cerrar el proyecto:
Sobre el nombre del proyecto (Archivo)>>Botón derecho del Mouse>>Opción Close
SEGUNDO TALLER SISTEMAS BASADOS EN CLASES CON NETBEANS 8.0
Ejecutar
Seleccionar File>>New Project…
Verificar:
El Netbeans genera:
public Token(String P)
this.P=P;
Se diseña una clase que lea una cadena para evaluar que naturaleza de token.
import javax.swing.*;
- titulada
- solo letra
- numero
- fecha
Cerrar el proyecto:
Sobre el nombre del proyecto (Tokens)>>Botón derecho del Mouse>>Opción Close
TERCER TALLER SISTEMAS BASADOS EN CLASES CON NETBEANS 8.0
Ejecutar
Seleccionar File>>New Project…
Verificar:
Insertar: 20
Borrar:
Consulta:
Ejecutar
Seleccionar File>>New Project…
Nota. El principio 'Primero en entrar, primero en salir' (F.I.F.O.='First In, First Out') se
aplica para las operaciones de Adición y Borrado de un Vector. En este ejercicio se
simulara una cola de atención de clientes (Adición: Llegada Borrar: Atención)
Verificar:
package manejofifo;
int nit;
String nomCliente;
int telefono;
}
SEGUNDO MOMENTO CREACION DE LA CLASE Admin
El Netbeans genera:
Se genera:
A.adicion(C);
}
break;
case 2:
if(A.vacia())
JOptionPane.showMessageDialog(null,"Cola de Atencion Vacia");
else
{
A.borra(C);
if(!B.llena())
B.adicion(C);
}
break;
case 3:
if(A.vacia())
JOptionPane.showMessageDialog(null,"Cola de Atencion Vacia");
else
JOptionPane.showMessageDialog(null,A.imprime(" Atencion "));
break;
case 4:
if(B.vacia())
JOptionPane.showMessageDialog(null,"Cola de Atendidos Vacia");
else
JOptionPane.showMessageDialog(null,B.imprime(" Atencion "));
}
}
while(opc!=5);
}
Borrar 2 Elementos
Consulta Atendidos
Consulta:
Ejecutar
Seleccionar File>>New Project…
Verificar:
void opera()
{
prom=x/n;
}
public int valor()
{
x=super.termino(n);
opera();
System.out.println(prom+"="+x+"(x)/"+n+"(n)");
return(prom);
}
}
Quedando:
Pulsar la tecla F6 o
Ejecutar
Seleccionar File>>New Project…
Verificar:
}
while(opc!=5);
}
}
Quedando:
Pulsar la tecla F6 o
Cerrar Proyecto…sobre nombreproyecto>>Close
TALLER A REALIZAR
Implementar en Netbeans….clase Abstracta2… con los siguientes archivos:
Primer Archivo
package abstracta2;
public class Abstracta2 {
public static void main(String[] args) {
Circulo C=new Circulo(10.5,10.5,6.0);
Cuadrado P=new Cuadrado(10.5,10.5,6.0);
Triangulo T=new Triangulo(10.5,10.5,6.0,5.0);
System.out.println(C.imprime());
System.out.println(P.imprime());
System.out.println(T.imprime());
}
}
Segundo Archivo
package abstracta2;
abstract class Figura
{
protected double x, y;
public Figura(double x, double y)
{
this.x=x;
this.y=y;
}
abstract double area();
String puntos()
{
String T=
"Punto ( "+x+","+y+")";
return T.toString();
}
}
Tercer Archivo
package abstracta2;
class Circulo extends Figura
{
private double radio;
public Circulo(double x, double y,double radio)
{
super(x,y);
this.radio=radio;
}
double area()
{
return Math.PI*radio*radio;
}
String imprime()
{
return "area del circulo: "+area()+" a partir del "+super.puntos();
}
}
Cuarto Archivo
package abstracta2;
class Cuadrado extends Figura
{
private double lado;
public Cuadrado(double x, double y,double lado)
{
super(x,y);
this.lado=lado;
}
double area()
{
return lado*lado;
}
String imprime()
{
return "area del cuadrado: "+area()+" a partir del "+super.puntos();
}
}
Quinto Archivo
package abstracta2;
class Triangulo extends Figura
{
private double b,h;
public Triangulo(double x, double y,double b,double h)
{
super(x,y);
this.b=b;
this.h=h;
}
double area()
{
return (b*h)/2;
}
String imprime()
{
return "area del triangulo: "+area()+" a partir del "+super.puntos();
}
}
TALLER INTERFACE CON JAVA NETBEANS 8.0
Las interfaces es un conjunto de métodos que describen qué se debe hacer
sin su desarrollo (sin el cómo). Entonces, cuando una clase implementa una
interfaz se especifica una lista de métodos (acciones) que debe llevar a cabo
(que debe hacer)
Una interface puede también contener datos miembro, pero estos son siempre
static y final. Una interface sirve para establecer un 'protocolo' entre clases.
Para crear una interface, se utiliza la palabra clave interface en lugar de class.
La interface puede definirse public o sin modificador de acceso, y tiene el
mismo significado que para las clases. Todos los métodos que declara una
interface son siempre public.
Para indicar que una clase implementa los métodos de una interface se utiliza
la palabra clave implements. El compilador se encargará de verificar que la
clase efectivamente declare e implemente todos los métodos de la interface.
Una clase puede implementar más de una interface.
A partir de Java 8, las interfaces son funcionales porque incluyen declaración
de variables estáticas, declaración de métodos, declaración como
implementación de métodos, como también, desarrollo de expresiones lambda.
Antes de Java 8, solo se podía tener declaraciones de métodos.
Ejecutar
Seleccionar File>>New Project…
Verificar:
}
while(opc!=5);
}
}
Quedando:
Pulsar la tecla F6 o
Cerrar Proyecto…sobre nombreproyecto>>Close
TALLER A REALIZAR
Implementar en Netbeans….clase Interface2… con los siguientes archivos:
Primer Archivo
package interface2;
public class Interface2 {
/**
*
* @param inf
* @param sup
*/
@Override
public void narcizos(int inf, int sup)// la suma de las potencias n de sus digitos es igual
a el mismo
{
int numdigitos,temp;
double digital;
String numero;
for(i=inf;i<=sup;i++)
{
numero=String.valueOf(i); //se convierte i en Cadena
numdigitos=numero.length(); //se obtiene numero de digitos
digital=0.0;
for(j = 0; j < numdigitos; j++)
{
temp=Character.digit(numero.charAt(j),10);//Conversion de caracter a entero
digital=digital+Math.pow((double) temp, (double) numdigitos);
}
if ((int)digital == i)
System.out.println("Numero Narcizo: "+i);
}
}
@Override
public boolean perfecto(int x) //suma de sus multiplos es igual a el mismo
{
return x==multiplos(x);
}
@Override
public void amigo(int x)
{
int amigo1=multiplos(x);
int amigo2=multiplos(amigo1);
if(amigo2==x)
System.out.println(amigo1+" es amigo de "+x);
}
@Override
public boolean magico(int x)
{
int s1,s2;
digitaliza(x);
Arrays.sort(A);
duplicaContrario();
s1=base10(A,10);
s2=base10(B,10);
return (s1-s2)==x;
}
}
Cuarto Archivo
package interface2;
public class Prueba {
void opciones()
{
int i;
Numero N = null;
for(i=100;i<=999;i++)
{
N=new Numero(i);
if(N.perfecto(i))
System.out.println(i+" es un numero perfecto");
if(N.magico(i))
System.out.println(i+" es un numero magico");
N.amigo(i);
}
N=new Numero(i);
N.narcizos(100, 1000);
}
}
DESARROLLO DEL SEGUNDO TALLER. IMPLEMENTACION DE UNA INTERFACE
Ejecutar
Seleccionar File>>New Project…
Verificar:
Pulsar la tecla F6 o
Ejecutar
Seleccionar File>>New Project…
Verificar:
Pulsar la tecla F6 o
Ejecutar
Seleccionar File>>New Project…
Verificar:
Pulsar la tecla F6 o
Ejecutar
Seleccionar File>>New Project…
Verificar:
String p="*";
int longitud;
int i;
@Override
public String decorar(String s) {
String T="";
longitud=(120-s.length())/2;
for(i=1;i<=longitud;i++)
T=T+p;
T=T+s;
for(i=1;i<=longitud;i++)
T=T+p;
return T;
}
};
System.out.println(d.decorar(" J A V A"));
}
}
Quedando:
Pulsar la tecla F6 o
Ejecutar
Seleccionar File>>New Project…
Verificar:
Pulsar la tecla F6 o
Introducción
Un objeto es nada más ni nada menos que aquello que está delante de mí o ante mí.
Es aquello que puedo reconocer con sus atributos (propiedades) y comportamiento.
Para reconocer el objeto debo:
1. Percibirlo con los sentidos (Objeto Material)
2. Utilizar una operación mental denominada abstracción o reflexión (Objeto Formal)
Objeto es el concepto clave de la Sistemas Orientados a Objetos, la idea de objeto es
similar a la del mundo real, un objeto puede ser un auto, una cuenta bancaria, una
persona.
1 El Objeto Como Una Unidad De Atributos Y Propiedades
Los atributos se definen como los que podemos decir de un objeto.
Las propiedades se definen como la relación de un atributo con su dominio de valores
o los posibles valores que puede tener cada atributo.
Por ejemplo del objeto Auto se puede señalar:
ATRIBUTO DOMINIO DE VALOR
Marca Chevrolet
Mazda
Renault
Color Verde
Amarillo
Cilindraje 1000
1300
Dirección Hidráulica
Asistida
Mecánica
Transmisión Automática
Mecánica
Encendido Eléctrico
Electrónico
Entonces:
Marca: Mazda es una propiedad
Modelo: 2018 es una propiedad
2 El Objeto Como Un Elemento Dinámico
Un objeto, desde el punto de vista dinámico tiene cuatro características:
Comportamiento. Es el conjunto de estados con sus posibles eventos
Estado. Es el conjunto de propiedades de un objeto en un momento dado.
Evento. Es la transición o continuidad de un estado.
Actividad. Es lo que se puede hacer a partir de los atributos.
Un ejemplo una cuenta de Ahorros puede tener el siguiente comportamiento:
Estados: Crear Cuenta, Normal (cuando el saldo es mayor que $100.000) , Sin Ahorro
( cuando el saldo es mayor que cero y menor o igual que $100.000), en rojo ( cuando
el saldo es menor que cero)
ESTADOS
CREAR CUENTA
ACTIVIDAD
DEPOSITO
EVENTOS NORMAL
DEPOSITO
RETIRO
DEPOSITO
RETIRO
RETIRO
RETIRO
EN ROJO SIN AHORRO
DEPOSITO
RETIRO DEPOSITO
RETIRO
3 El Objeto Como Una Estructura
Entonces, se define un Objeto en SOO como una estructura que posee atributos y
actividades relacionadas. A los atributos ahora en adelante se definen como variables,
y a las actividades se define como métodos.
Por tanto, un objeto es una estructura que posee variables y métodos relacionados
con estas variables.
4 Representación De Un Objeto
Para representar un objeto se puede utilizar el siguiente diagrama de objetos:
Variables
Métodos
Retiro
Deposito
PRIMER TALLER SISTEMA ORIENTADO A OBJETOS CON NETBEANS 8.0
Ejecutar
Seleccionar File>>New Project…
- Variables
int numero;
String nombre;
int saldo;
}
Segundo Caso Generar los métodos getter y setter de las variables
public Cuenta()
}
Cuarto Paso Métodos del Negocio.
En el caso de un cuenta bancaria seria consignar (dinero) y retirar(dinero). Se debe
colocar después de los constructores
public void consignar(int dinero)
{
setSaldo(getSaldo()+dinero);
}
public void retirar(int dinero)
{
if(getSaldo()>dinero)
setSaldo(getSaldo()-dinero);
}
CLASE ESTRUCTURA DE INFORMACION
Se diseña una clase que solo tenga las variables de la clase Cuenta (numero, nombre,
saldo) entonces:
int numero;
String nombre;
int saldo;
}
ADMINISTRADOR DE LA CLASE NEGOCIO
Se diseña una clase que administre por medio de un vector la clase negocio ( cada
posición es un objeto cuenta) entonces:
El siguiente código:
int min,max,n;
Cuenta A[];
int i;
public Cuentas(int n)
{
min=-1;
max=-1;
this.n=n;
A=new Cuenta[n];
}
boolean vacia()
{
if(min==-1)
return true;
else
return false;
}
boolean llena()
{
if(max==n-1)
return true;
else
return false;
}
void adicion(Info C)
{
if(min==-1)
min++;
max++;
A[max]=new Cuenta(C.numero,C.nombre,C.saldo);
}
void borra(Info C)
{
C.numero=A[min].getNumero();
C.saldo=A[min].getSaldo();
C.nombre=A[min].getNombre();
if(min==max)
min=max=-1;
else
min++;
}
int existe(int cuenta)
{
boolean esta=false;
if(!vacia())
for(i=min;i<=max && ! esta;i++)
if(A[i].getNumero()==cuenta)
esta=true;
if(esta)
i--;
else
i=-1;
return i;
}
void consignar(int x,int y)
{
A[x].consignar(y);
}
void retirar(int x,int y)
{
A[x].retirar(y);
}
String imprime(String Aviso)
{
String S=" Elemenos de la Cola de: "+Aviso.toString()+"\n";
for(i=min;i<=max;i++)
{
S=S+" "+A[i].getNumero();
S=S+" "+A[i].getNombre();
S=S+" "+A[i].getSaldo()+"\n";
}
return S.toString();
}
CREACION DE LA CLASE MENU
Se diseña una clase que administre por medio de un vector la clase negocio ( cada
posición es un objeto cuenta) entonces:
import javax.swing.*;
void opciones()
{
int i,opc,cuenta;
Cuentas A=new Cuentas(10);
Cuentas B=new Cuentas(20);
Info C=new Info();
Object [] valores = {"1. Adicion","2. Borrar","3. Consulta Por Atender","4.
Consulta Atendidos","5. Consignar","6. Retirar","7.Salir"};
do
{
String resp=(String) JOptionPane.showInputDialog(null,"Elija la Opcion",
"Entrada de datos",JOptionPane.QUESTION_MESSAGE, null, valores,valores[0]);
opc=Character.digit(resp.charAt(0),10);
switch(opc)
{
case 1:
C.numero=Integer.parseInt(JOptionPane.showInputDialog(null,"Escriba el
número de cuenta"));
if(A.existe(C.numero)>=0 || B.existe(C.numero)>=0)
JOptionPane.showMessageDialog(null,"Existe cuenta");
else
if(A.llena())
JOptionPane.showMessageDialog(null,"No se Puede Atender Mas");
else
{
C.nombre=JOptionPane.showInputDialog(null,"Digite Nombre");
C.saldo=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite
saldo"));
A.adicion(C);
}
break;
case 2:
if(A.vacia())
JOptionPane.showMessageDialog(null,"Cola de Atencion Vacia");
else
{
A.borra(C);
if(!B.llena())
B.adicion(C);
}
break;
case 3:
if(A.vacia())
JOptionPane.showMessageDialog(null,"Cola de Atencion Vacia");
else
JOptionPane.showMessageDialog(null,A.imprime(" Atencion "));
break;
case 4:
if(B.vacia())
JOptionPane.showMessageDialog(null,"Cola de Atendidos Vacia");
else
JOptionPane.showMessageDialog(null,B.imprime(" Atencion "));
break;
case 5:
C.numero=Integer.parseInt(JOptionPane.showInputDialog(null,"Escriba el
número de cuenta"));
i=A.existe(C.numero);
System.out.println(i);
if(i>=0)
{
C.saldo=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite
saldo"));
A.consignar(i,C.saldo);
}
break;
case 6:
C.numero=Integer.parseInt(JOptionPane.showInputDialog(null,"Escriba el
número de cuenta"));
i=A.existe(C.numero);
if(i>=0)
{
C.saldo=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite
saldo"));
A.retirar(i,C.saldo);
}
break;
}
}
while(opc!=7);
}
ACTUALIZAR LA CLASE Negocios
Opción 1. Se debe posicionar sobre el paquete negocio y pulsar el botón derecho del
mouse>>opción new>>Java Interface
Opción 2. Se debe posicionar sobre el paquete negocio y pulsar el botón derecho del
mouse>>opción new>>Other
El Netbeans genera:
Quedando:
CREACION DE LA CLASE OPERACIÓN QUE IMPLEMENTA LA INTERFACE
ARITMETICA
.
APLICACIÓN DE HERENCIA SENCILLA SOBRE LA CLASE CUENTA
Se va a hacer uso de la cláusula extends para indicar que la clase Cuenta hereda
métodos de la clase Operación, entones:
Se debe modificar el método consignar para estar acorde con la herencia, así:
Ejecutar
Seleccionar File>>New Project…
Una clase publica Juego que se encuentra en el paquete de clases denominada jugar.
boolean es;
String A[];
int i,j,k;
String S;
boolean esSoloTitulada(String P)// verifica si el parrafo(P) posee palabras tituladas
{
es=true;
A=P.split(" ");
if(A.length==0)
return false;
for(j=0;j<A.length;j++)
for(i=0;i<A[j].length();i++)
if(Character.isLetter(A[j].charAt(i)))
{
if(i==0) // Si es la primera letra
{
if(!Character.isUpperCase(A[j].charAt(i)))
es=false;
}
else // No es la primera letra
if(!Character.isLowerCase(A[j].charAt(i)))
es=false;
}
else
es=false;
return es;
}
boolean esSoloLetra(String P)// verifica si el contenido de p es solo letras
{
es=true;
P=P.toLowerCase();
A=P.split(" ");
if(A.length==0)
return false;
for(j=0;j<A.length;j++)
for(i=0;i<A[j].length();i++)
if(!Character.isLetter(A[j].charAt(i)))
es=false;
return es;
}
boolean esFormatofecha(String P)// Mascara Aceptada::dd/dd/dddd
{
if(P.length()!=10)
return false;
es=true;
for(i=0;i<P.length();i++)
if(i==2 && i==5)
{
if(P.charAt(i)!='/')
es=false;
}
else
if(!Character.isDigit(P.charAt(i)))
es=false;
return es;
}
boolean esSoloNumero(String P)// verifica si el contenido de p es solo digitos
{
es=true;
A=P.split(" ");
if(A.length==0)
return false;
for(j=0;j<A.length;j++)
for(i=0;i<A[j].length();i++)
if(!Character.isDigit(A[j].charAt(i)))
es=false;
return es;
}
boolean unico(String P)
{
es=true;
for(i=0;i<P.length()-1;i++)
for(j=i+1;j<P.length();j++)
if(P.charAt(i)==P.charAt(j))
es=false;
return es;
}
Netbeans genera:
Colocar antes de public class Ahorcado {
import javax.swing.*;
Se necesita:
- Generar un cadena aleatoria P – capital de un departamento – a partir de la
función String cadenaAleatoria()
- Generar un vector espejo B con formato carácter cuyo contenido son las letras
acertadas por el usuario (igual posición) – uso de la función boolean
colocarLetra(char B[],String P,char c) -
- Imprimir el contenido del vector espejo B – uso de la función String
imprimaVectorChar(char B[]) -
- Contar cantidad de letras tanto en la cadena generada como en el vector
espejo B - uso de la funciones int conteoLetra(String P) y int conteoLetras(char
B[]) respectivamente –. Se termina el juego cuando ambos conteos son
iguales.
{
String P;
String S=" ";
char B[];
char c;
int conteo=0;
Juego H=new Juego();
P=H.cadenaAleatoria();
B=new char[P.length()];
do
{
S=JOptionPane.showInputDialog(null,"Digite Letra ");
c=S.charAt(0);
if(!H.colocarLetra(B, P, c))
conteo++;
//System.out.println(P);
System.out.println(H.imprimaVectorChar(B));
}
while(conteo<3 && H.conteoLetra(P)!=H.conteoLetras(B));
if(conteo<3)
JOptionPane.showMessageDialog(null,"Ha ganado ");
else
JOptionPane.showMessageDialog(null,"Ha perdido ");
}
CREACION DE LA CLASE FAMAS
Netbeans genera:
Colocar antes de public class Famas {
import javax.swing.*;
Se necesita:
- Generar un cadena con un número aleatorio a partir de la función String
aleatorio(int limite) y que este posee dígitos únicos – uso de la función boolean
unico(String P) -
- Validar ingreso de un número y que sus dígitos sean únicos – uso de las
funciones boolean esSoloNumero(String P) y boolean unico(String P) -.
Ademas que este en el rango de 1 y 9999
- Contar picas y fijas haciendo uso del vector B. Por eso, la impresión "Fijas:
"+B[0]+" Picas:"+B[1]
import javax.swing.*;
El siguiente método se debe colocar después de public class Menu {
void opciones()
{
int opc;
Ahorcado A=new Ahorcado();
Famas B=new Famas();
Object [] valores = {"1. Ahorcado","2. Picas y Fijas","3. Salir"};
do
{
String resp=(String) JOptionPane.showInputDialog(null,"Elija la Opcion",
"Entrada de datos",JOptionPane.QUESTION_MESSAGE, null, valores,valores[0]);
opc=Character.digit(resp.charAt(0),10);
switch(opc)
{
case 1:
A.jugar();
break;
case 2:
B.jugar();
break;
}
}
while(opc!=3);
}
ACTUALIZAR LA CLASE Jugar
Opción 1. Se debe posicionar sobre el paquete negocio y pulsar el botón derecho del
mouse>>opción new>>Java Interface
Opción 2. Se debe posicionar sobre el paquete negocio y pulsar el botón derecho del
mouse>>opción new>>Other
El Netbeans genera:
Quedando:
CREACION DE LA CLASE MANIPULACIÓN QUE IMPLEMENTA LA INTERFACE
ARITMETICA
boolean es;
String A[];
int i,j,k;
String S;
Se implementan los métodos así (deben quedar debajo de la declaración de
variables):
Se va a hacer uso de la cláusula extends para indicar que la clase Juego hereda
métodos de la clase Manipulacion, entones:
boolean esSoloTitulada(String P)
boolean esSoloLetra(String P)
boolean esFormatofecha(String P)
boolean esSoloNumero(String P)
boolean unico(String P)
Ejecutar
Seleccionar File>>New Project…
Pulsar
Reemplazar el contenido por:
package arreglo;
public class Admin {
int i,k,max,n;
int A[];
public Admin(int n)
{
this.n=n;
A=new int[n];
max=-1;
}
public boolean vacio()
{
if(max==-1)
return true;
else
return false;
}
public boolean unico()
{
if(max==0)
return true;
else
return false;
}
public boolean buscar(int p)// p: valor
{
boolean esta=false;
i=0;
while(i<=max && !esta)
if(A[i]==p)
esta=true;
else
i++;
return esta;
}
public boolean lleno()
{
if(max==n-1)
return true;
else
return false;
}
public int maximo()
{
return max;
}
public String listar()
{
String cadena=" ";
for(i=0;i<=max;i++)
cadena=cadena+" "+A[i];
return cadena;
}
public void adicion(int p)// p: valor
{
max++;
A[max]=p;
}
public void insertar(int p, int q)// p: valor q: posicion
{
max++;
for(i=max;i>q;i--)
A[i]=A[i-1];
A[q]=p;
}
public void borrar(int q)//q: posicion
{
max--;
for(i=q;i<=max;i++)
A[i]=A[i+1];
}
}
Salvar
Programa Menu
Pulsar
Reemplazar el contenido por:
package arreglo;
import javax.swing.*;
public class Menu {
void opciones()
{
int i,opc,p,q;
Admin V=new Admin(10);
Object [] valores = {"1. Adicion","2.Insertar","3.Borrar","4.Consultar","5.Salir"};
do
{
String resp=(String) JOptionPane.showInputDialog(null,"Elija la Opcion", "Entrada de
datos",JOptionPane.QUESTION_MESSAGE, null, valores,valores[0]);
opc=Character.digit(resp.charAt(0),10);
switch(opc)
{
case 1:
case 2:
if(V.lleno())
{
JOptionPane.showMessageDialog(null,"Vector LLeno");
break;
}
if(opc==2 && V.vacio())
break;
p=Integer.parseInt(JOptionPane.showInputDialog(null,"Escriba el número"));
if(V.buscar(p))
{
JOptionPane.showMessageDialog(null,"Existe Numero");
break;
}
if(opc==1)
{
V.adicion(p);
break;
}
do
{
q=Integer.parseInt(JOptionPane.showInputDialog(null,"Posicion
{0..."+V.maximo()+"]"));
}
while(q<0 || q>V.maximo());
V.insertar(p,q);
break;
case 3:
if(V.vacio())
{
JOptionPane.showMessageDialog(null,"Vector vacio");
break;
}
do
{
q=Integer.parseInt(JOptionPane.showInputDialog(null,"Posicion
{0..."+V.maximo()+"]"));
}
while(q<0 || q>V.maximo());
V.borrar(q);
break;
case 4:
if(V.vacio())
{
JOptionPane.showMessageDialog(null,"Vector vacio");
break;
}
JOptionPane.showMessageDialog(null,V.listar());
}
}
while(opc!=5);
}
}
Salvar
Salvar
Ejecutar
Borrar la posición 2
Consultar
Pulsar
Programa Matriz
Sobre matrices>>new>>Java Class..
Pulsar
Reemplazar el contenido por:
package matrices;
public class Matriz {
int i,j,k,n;
int A[][];
boolean C[][];
public Matriz(int n)
{
this.n=n;
A=new int[n][n];
C=new boolean[n][n];
negar();
cargar();
}
public void negar()
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
C[i][j]=false;
}
public void cargar()
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
A[i][j]=(int) (Math.random() * 90 + 10);
}
public void toda()
{
negar();
for(i=0;i<n;i++)
for(j=0;j<n;j++)
C[i][j]=true;
}
public void diagonal()
{
negar();
for(i=0;i<n;i++)
C[i][i]=true;
}
public void transversal()
{
negar();
for(i=0;i<n;i++)
C[i][n-i-1]=true;
}
public void superior()
{
negar();
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
C[i][j]=true;
}
public void inferior()
{
negar();
for(i=0;i<n;i++)
for(j=0;j<i;j++)
C[i][j]=true;
}
public void imprimir()
{
System.out.println();
for(i=0;i<n;i++)
{
System.out.println();
for(j=0;j<n;j++)
if(C[i][j])
System.out.print(A[i][j]+" ");
else
System.out.print(" ");
}
System.out.println();
}
}
Salvar
Programa Menu
Sobre matrices>>new>>Java Class..
Pulsar
Reemplazar el contenido por:
package matrices;
import javax.swing.*;
public class Menu {
void opciones()
{
int n=6;
int opc;
String resp;
Matriz M=new Matriz(10);
do
{
Object [] valores= {"1.Diagonal Principal","2.Transversal Principal","3. Triangular
Superior","4.Triangular Inferior","5. Consulta","6. Salir"};
resp=(String)JOptionPane.showInputDialog(null,"Elija la Opcion", "Entrada de
datos",JOptionPane.QUESTION_MESSAGE, null, valores,valores[0]);
opc=Character.digit(resp.charAt(0),10);
switch(opc)
{
case 1:
M.diagonal();
M.imprimir();
break;
case 2:
M.transversal();
M.imprimir();
break;
case 3:
M.superior();
M.imprimir();
break;
case 4:
M.inferior();
M.imprimir();
break;
case 5:
M.toda();
M.imprimir();
}
}
while(opc!=6);
}
}
Salvar
Editar programa main
Salvar
Ejecutar
TERCERA PARTE. MATRIZ DISPERSA
Pulsar
Programa Matriz
Sobre dispersa>>new>>Java Class..
Pulsar
Reemplazar el contenido por:
package dispersas;
import java.util.Random;
public class Matriz {
int n,i,j,max;
int A[][];
int Fila[];
int Columna[];
int Valor[];
Random aleatorio= new Random(System.currentTimeMillis());;
public Matriz(int n)
{
this.n=n;
A=new int[n][n];
max=0;
}
void cargar()
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
A[i][j]=aleatorio.nextInt(5);
if(A[i][j]!=0)
max++;
}
}
void generar()
{
Fila=new int[max];
Columna=new int[max];
Valor=new int[max];
max=-1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(A[i][j]!=0)
{
max++;
Fila[max]=i;
Columna[max]=j;
Valor[max]=A[i][j];
}
}
void imprimir()
{
System.out.println("Fila Columna Valor");
for(i=0;i<=max;i++)
System.out.println(" "+Fila[i]+" "+Columna[i]+" "+Valor[i]);
System.out.println();
}
}
Salvar
Salvar
Ejecutar
BUENAS PRACTICAS EN JAVA BASICO E INTERMEDIO CON COMPILADORES
EN LINEA Y NETBEANS 8
Funciones de Conversión
String valueOf( boolean b );
String valueOf( int i );
String valueOf( long l );
String valueOf( float f );
String valueOf( double d );
String valueOf( Object obj );
String valueOf( char data[] );
String valueOf( char data[],int offset,int count );
Ejecutar
Seleccionar File>>New Project…
Pulsar Botón
Se genera:
Pulse o Tecla F6 o
La salida generada es:
C
errar la ventana de ejecución (Output)-Cadena1(run):
Cerrar el proyecto:
Sobre el nombre del proyecto (Cadena1)>>Botón derecho del Mouse>>Opción
Close
Practica 2. Buscar vocales en una cadena de caracteres
Seleccionar File>>New Project…o
Pulsar Botón
Chequear
Pulsar Boton
Para crear la clase base es necesario hacer click sobre cadena2 y luego botón
derecho del mouse. Entonces new>>Java Class…
Se salva el proyecto:
Pulse o Tecla F6
Resultado:
Cerrar el proyecto:
Sobre el nombre del proyecto (Cadena2)>>Botón derecho del Mouse>>Opción
Close
Practica 3. Buscar una cadena dentro de otra cadena de caracteres. Si esta
generar una subcadena desde donde su intersección hasta el final.
Seleccionar File>>New Project…o
Pulsar Botón
Se salva el proyecto:
Pulse o Tecla F6
Resultado:
Cerrar el proyecto:
Sobre el nombre del proyecto (Cadena3)>>Botón derecho del Mouse>>Opción
Close
Taller
Ahora, ustedes los alumnos deben:
1. Dado un vector de símbolos (que usted genera) y un párrafo leído por
teclado se debe hacer un explorador que verifica si los símbolos existen
dentro del párrafo y sino están marcar un error “símbolo inexistente”.
2. Se debe simular un buscador de texto dentro de un párrafo leído. Por
ejemplo la cadena “los” en que posiciones del siguiente párrafos “los
camellos verdes eran lelos al amanecer”. Posiciones: 0 9 26
3. Verificar sin un párrafo termina y comienza con una misma cadena
SEGUNDA CLASE Character
Casos y diferencias:
char c;
Character C;
Comprobaciones booleanas
Character.isLowerCase( c )
Character.isUpperCase( c )
Character.isDigit( c )
Character.isSpace( c )
Traslaciones de caracteres
char c2 = Character.toLowerCase( c );
char c2 = Character.toUpperCase( c );
Traslaciones de carácter/dígito
char c = C.charValue();
String s = C.toString();
PRACTICA DE LABORATORIO
Para realizar la siguiente práctica se necesita saber o recordar de la clase
String:
charAt( int indice ):: Devuelve el carácter que se encuentra en la posición que
se indica en índice
int length()::la longitud de la cadena ó número de caracteres
String trim():: Elimina espacios al comienzo como al final de la cadena
Se desea validar
Practica 1. Que la cadena leída solamente tiene letras
Practica 2. Que la cadena leída solamente tiene dígitos
Practica 3. Que la cadena leída empieza con mayúscula y las demás
minúsculas
Practica 4. Si la cadena es un número bajar los dígitos a un vector int
Practica 1. Que la cadena leída solamente tiene letras
Ejecutar
Seleccionar File>>New Project…
Pulsar Botón
import javax.swing.* ;
Pulse o Tecla F6
Pulsar Botón
import javax.swing.* ;
Pulse o Tecla F6
Pulsar Botón
import javax.swing.* ;
Pulse o Tecla F6
Taller
Ahora, ustedes los alumnos deben:
1. Dado un párrafo ( solo letras y espacios en blancos) verificar que cada
palabra empieza con mayúscula y las demás minúscula
2. Dado un número ( solo dígitos) imprimir los dígitos en letras Ejemplo: „1‟
es “uno”
TERCERA CLASE StringBuffer
Java posee gran capacidad para el manejo de cadenas dentro de sus clases
String y StringBuffer. Un objeto String representa una cadena alfanumérica
de un valor constante que no puede ser cambiada después de haber sido
creada. Un objeto StringBuffer representa una cadena cuyo tamaño puede
variar.
La clase StringBuffer dispone de muchos métodos para modificar el contenido
de los objetos StringBuffer. Si el contenido de una cadena va a ser modificado
en un programa, habrá que sacrificar el uso de objetos String en beneficio de
StringBuffer, que aunque consumen más recursos del sistema, permiten ese
tipo de manipulaciones.
Al estar la mayoría de las características de los StringBuffers basadas en su
tamaño variable, se necesita un nuevo método de creación:
StringBuffer();
StringBuffer( int len );
StringBuffer( String str );
Se puede crear un StringBuffer vacío de cualquier longitud y también se puede
utilizar un String como punto de partida para un StringBuffer.
StringBuffer Dos = new StringBuffer( 20 );
StringBuffer Uno = new StringBuffer( "Hola Mundo" );
Métodos Comunes
Método Descripción
Empleado para añadir al objeto un String (String) o una variable
append(...)
(int, char, double, ...)
capacity() Devuelve el espacio libre del StringBuffer.
charAt(int) Devuelve el caracter de la posición especificada (int)
getChars(int, int, Copia los caracteres indicados en la posición indicada de un
char[], int) string
Devuelve la posición en la que aparece por primera vez un
indexOf(String, [int]) String (String) en otro, puede ser a partir de una posición dada
([int]) opcional.
Devuelve la posición en la que aparece por última vez un String
lastIndexOf(String,
(String) en otro, puede ser a partir de una posición dada ([int])
[int])
opcional.
Inserta en la posición indicada (int) de un StringBuffer, un
insert(int, ...)
String(String) o un valor (int, double, float, ...)
length() Devuelve el número de ccaracteres del String
reverse() Cambia el orden de los caracteres de un String
setCharAt(int, char) Cambia el caracter en la posición indicada
setLength(int) Cambia el tamaño (int) de un StringBuffer
toString() Convierte el objeto en un String
Modificación del Contenido
Para cambiar el contenido de un StringBuffer, se pueden utilizar dos métodos:
append() e insert().
En el ejemplo se ve el uso de estos dos métodos:
class CadAgregar {
public static void main( String args[] ) {
String A=”abcdefghijklmnopqrstuvwxyz”;
StringBuffer str = new StringBuffer();
int i;
for(i=0;i<A.length();i++)
str.append( A.charAt(i));
System.out.println( str.toString());
}
}
En este otro ejemplo, se cambia el sentido de una cadena:
class CadenaInversa {
public static String cadenaInversa(String fuente) {
int i;
StringBuffer destino = new StringBuffer();
for( i=fuente.length()-1; i >= 0; i-- )
destino.append( fuente.charAt( i ) );
return( destino.toString() );
}
public static void main( String args[] ) {
System.out.println( cadenaInversa( "Programación Java" ));
}
}
Entones, los métodos que hacen inserción y adición son las siguientes:
StringBuffer append( Object obj );
StringBuffer append( String str );
StringBuffer append( char str[] );
StringBuffer append( char str[],int offset,int len );
StringBuffer append( boolean b );
StringBuffer append( int i );
StringBuffer append( long l );
StringBuffer append( float f );
StringBuffer append( double d );
StringBuffer append( char ch );
StringBuffer insert( int offset,Object obj );
StringBuffer insert( int offset,String str );
StringBuffer insert( int offset,char str[] );
StringBuffer insert( int offset,boolean b );
StringBuffer insert( int offset,int i );
StringBuffer insert( int offset,long l );
StringBuffer insert( int offset,float f );
StringBuffer insert( int offset,double d );
StringBuffer insert( int offset,char ch );
Operadores de Concatenación
Hay que recordar que los operadores "+" y "+=" también se pueden aplicar a
cadenas. Ambos realizan una concatenación y están implementados con
objetos StringBuffer.
Por ejemplo, la sentencia:
String s = "¿Qué" + " tal ?";
es interpretada por el compilador como:
String s = new StringBuffer().append( "¿Qué" ).append( " tal ?" ).toString();
y se marcaría el StringBuffer para borrarlo ya que el contenido pasa al objeto
String. También, la sentencia:
s += " por ahí!";
sería interpretada por el sistema como:
String s =
new StringBuffer().append( s ).append( " por ahí!" ).toString();
y volvería a marcar para borrar el nuevo StringBuffer.
TALLER AHORCADO
Ejecutar
Seleccionar File>>New Project…
Pulsar Botón
Donde:
El set util, se toma la clase Random con el método nextInt() que genera
números aleatorios enteros.
Ahora colocar las líneas de código como lo indica la siguiente figura:
Líneas de Código:
String texto[]={"La flor es Bonita","La azucena es Hermosa","El clavel
representa la Madre"};
Random r=new Random();
int max=Math.abs(r.nextInt()%3+0);//Numero aleatorio de 0 a 3
String linea=new String(texto[max].toUpperCase());
StringBuffer S=new StringBuffer();
int i,cm,n;
public Ahorcado(int k)
{
cm=0;
n=k;
for(i=0;i<linea.length();i++)
S.append(" "); // Llenado de Blancos
}
public String buscar(char c)
{
boolean hay=false;
i=0;
while(i<linea.length() && i!=-1)
{
i=linea.indexOf(c,i); // Búsqueda de un Carácter a partir de una posición
if(i!=-1)
{
S.setCharAt(i,c); // Colocar un character en la position
hay=true;
i++;
}
}
if(!hay)
cm++;
return S.toString();
}
public int malas()
{
return cm;
}
public boolean acabo()
{
if(cm==n)
return true;
else
return false;
}
public boolean termino()
{
String A=linea.trim();
String B=new String(S.toString().trim());
if(A.equals(B))
return true;
else
return false;
}
Salve el proyecto
Pulse o Tecla F6
Cerrar la ventana de ejecución (Output)-JuegoAhorcado(run):
Cerrar el proyecto:
Sobre el nombre del proyecto (JuegoAhorcado)>>Botón derecho del Mouse>>Opción
Close
Ejecutar
Seleccionar File>>New Project…
Pulsar Botón
Diligencie Proyect Name: NumeroRomano.
Salve el proyecto
Pulse o Tecla F6
Cerrar la ventana de ejecución (Output)-NumeroRomano(run):
Cerrar el proyecto:
Sobre el nombre del proyecto (NumeroRomano)>>Botón derecho del Mouse>>Opción
Close
La Clase StringBuilder
Tomado de:
http://puntocomnoesunlenguaje.blogspot.com.co/2013/03/java-
stringbuilder-stringbuffer.html
Java proporciona la clase StringBuffer y a partir de Java 5 la clase StringBuilder
para trabajar con cadenas de caracteres sobre las que vamos a realizar
modificaciones frecuentes de su contenido.
La diferencia entre StringBuffer y StringBuilder es que los métodos de
StringBuffer están sincronizados y los de StringBuilder no lo están. Por este
motivo StringBuilder ofrece mejor rendimiento que StringBuffer y la utilizaremos
cuando la aplicación tenga un solo hilo de ejecución.
En general decidiremos cuando usar String, StringBuilder o StringBuffer según
lo siguiente:
- Usaremos String si la cadena de caracteres no va a cambiar.
- Usaremos StringBuilder si la cadena de caracteres puede cambiar y
solamente tenemos un hilo de ejecución.
- Usaremos StringBuffer si la cadena de caracteres puede cambiar y
tenemos varios hilos de ejecución.
En esta entrada utilizaremos StringBuilder teniendo en cuenta que todo lo que
se explica aquí es aplicable a StringBuffer.
Constructores de la Clase StringBuilder
Un objeto de tipo StringBuilder gestiona automáticamente su capacidad
– Se crea con una capacidad inicial.
– La capacidad se incrementa cuando es necesario.
La clase StringBuilder proporcionan varios constructores, algunos de ellos
son:
CONSTRUCTOR DESCRIPCIÓN
Crea un StringBuilder vacío.
StringBuilder ()
StringBuilder sb = new StringBuilder ();
StringBuilder(int n) Crea un StringBuilder vacío con capacidad para n caracteres.
Crea un StringBuilder y le asigna el contenido del String s.
StringBuilder(String
String s = "ejemplo";
s);
StringBuilder sb = new StringBuilder (s);
Métodos de la Clase StringBuilder
La clase StringBuilder proporcionan métodos para acceder y modificar la
cadena de caracteres. Algunos de ellos son:
MÉTODO DESCRIPCIÓN
length() Devuelve la longitud de la cadena
append(X); Añade X al final de la cadena. X puede ser de cualquier tipo
Inserta X en la posición indicada. X puede ser de cualquier
insert(posicion, X)
tipo.
Cambia el carácter que se encuentra en la posición
setCharAt(posicion, c)
indicada, por el carácter c.
Devuelve el carácter que se encuentra en la posición
charAt(posicion)
indicada.
indexOf(„caracter‟) Devuelve la posición de la primera aparición de carácter
lastIndexOf(„caracter‟) Devuelve la posición de la última aparición de carácter
Devuelve la subcadena (String) comprendida entre las
substring(n1,n2) posiciones n1 y n2 ambas incluidas. Si no se especifica n2,
devuelve desde n1 hasta el final.
delete(inicio, fin) Elimina los caracteres desde la posición inicio hasta fin.
reverse() Invierte el contenido de la cadena
toString() Devuelve el String equivalente.
Los puedes consultar todos en la API de Java:
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html
EJERCICIOS A REALIZAR
Realizar los ejercicios haciendo uso de la clase StringBuffer o StringBuilder
1. Dada una cadena(solo letras y espacios en blanco), convertir a una
cadena de Titulo (Toda palabra debe iniciar con Letra Mayúscula y las
demás minúsculas)
2. Leer un Código y Nombre de Alumno por teclado y así, generar una
cadena de códigos y nombres separados por un espacio en blanco
3. Dada una serie de números(1...3899), generar dos cadenas con el
número ordinal y otra en número romano separados por espacios en
blanco.
BUENAS PRACTICAS EN JAVA BASICO E INTERMEDIO CON
COMPILADORES EN LINEA Y NETBEANS 8
Ejecución o F5
CLASE STRINGTOKENIZER
Que es un Token. Conjunto de caracteres (números, letras) delimitado por un
espacio en blanco (por defecto) u otro carácter.
Clase StringTokenizer Permite descomponer una cadena en partes
lexicográficas (tokens) las cuales constituyen a ésta.
Los tokens se dividen entre sí mediante ciertos caracteres que, en este caso,
se les llama delimitadores.
Constructores:
StringTokenizer(String str) se crea un string divisible conteniendo str y con el
set de delimitadores por defecto " "
StringTokenizer(String str, String delim) se crea un string divisible y con el set
de delimitadores dad en delim
StringTokenizer(String str, String delim, boolean returnTokens) se crea un
string divisible y con el set de delimitadores dado en delim. Si returnTokens es
true los delimitadores son retornados como palabras de longitud uno, si false
los delimitadores dividen las palabras pero no se retornan
Métodos Descripción
boolean hasMoreTokens() true si existen mas palabras por retornar
String nextToken() retorna la siguiente palabra
String nextToken(String retorna la siguiente palabra utilizando un nuevo set
delim) de delimitadores
public int countTokens() retorna el numero de palabras que quedan
A Continuación se muestra la manera de trabajar la clase StringTokenizer, se
supone que se crea a partir de tres String(a, b, c) a medida que se utiliza el
método nextToken() el índice de siguiente token avanza hasta no mas tolens
T0.
A B C
nextToken
T1.
C
B
nextToken
T2.
nextToken
T3.
hasMoreTokens() Se hace igual a False.
Un ejemplo es el siguiente código :
import java.util.*;
public class CasoToken{
public static void main(String []args){
int i,j,k;
String Cuenta="33.55.28.12";
String Nombre="Pedro Contreras, Luis Cardenas, Ines Forero, Carlos Daza";
String Movimiento="2.5,4.2,1.3/4.3,2.8,2.5/2.5,3.6,1.8/4.6,3.8,4.2";
String S;
StringTokenizer T1=new StringTokenizer(Cuenta,".");
StringTokenizer T2=new StringTokenizer(Nombre,",");
StringTokenizer T3=new StringTokenizer(Movimiento,"/");
while(T1.hasMoreTokens() && T2.hasMoreTokens () &&
T3.hasMoreTokens())
{
System.out.println();
System.out.print(" Cuenta: "+T1.nextToken());
System.out.print(" Nombre: "+T2.nextToken());
System.out.print(" Movimiento Cuentas: "+T3.nextToken());
}
System.out.println();
}
}
COLECCIONES EN JAVA
Permite almacenar y organizar objetos de manera útil para un acceso
eficiente.
Núcleo de abstracciones de colecciones de utilidad (interfaces) e
implementaciones ampliamente útiles.
Las interfaces proporcionan métodos para todas las operaciones
comunes y las implementaciones concretas especifican la decisión de
las operaciones no permitidas.
o (java.lang.UnsupportedOperationException)
Sobre los elementos se puede iterar (Iterator)
Interfaz Collections
Collections es una clase que proporciona una serie de métodos estáticos
para manejar colecciones que pueden ser de mucha utilidad. Los métodos son
los siguientes:
int binarySearch(List list, Object key): Busca un
elemento en una lista ordenada utilizando un algoritmo de búsqueda
binaria. El método devuelve un entero indicando la posición en la que se
encuentra el elemento, o bien un número negativo si no se encontró.
Este número negativo indica la posición la que se encontraría el
elemento de haber estado en la colección.
int frequency(Collection c, Object o): Devuelve el número
de veces que se repite el elemento especificado en la colección.
Object max(Collection coll): Devuelve el mayor elemento de la
colección.
Object min(Collection coll): Devuelve el menor elemento de la
colección.
boolean replaceAll(List list, Object oldVal, Object
newVal): Reemplaza todas las ocurrencias en la lista de un cierto
elemento por otro objeto.
void reverse(List list): Invierte la lista.
void shuffle(List list): Modifica la posición de distintos
elementos de la lista de forma aleatoria.
void sort(List list): Ordena una lista utilizando un algoritmo
merge sort.
Interfaz List
Una colección cuyos elementos permanecen en un orden particular a menos
que se modifique la lista (no significa lista enlazada aunque es una posible
implementación).
boolean add(E o): Añade un nuevo elemento al final de la colección.
boolean add(int index, E element): Añade un nuevo elemento en la
posición especificada.
boolean addAll(Collection<? extends E> c): Añade todos los elementos
de la colección especificada a esta colección.
void clear(): Elimina todos los elementos de la colección.
boolean contains(Object o): Comprueba si el elemento especificado es
parte de la colección.
get(int index): Recupera el elemento que se encuentra en la posición
espeficicada.
int indexOf(Object o): Devuelve la primera posición en la que se
encuentra el elemento especificado en la colección, o -1 si no se
encuentra.
int lastIndexOf(Object o): Devuelve la última posición en la que se
encuentra el elemento especificado en la colección, o -1 si no se
encuentra.
remove(int index): Elimina el elemento de la posición indicada.
boolean remove(Object o): Elimina la primera ocurrencia del elemento
indicado. Si se encontró y se borró el elemento, devuelve true, en caso
contrario, false.
set(int index, E element): Reemplaza el elemento que se encuentra en la
posición indicada por el elemento pasado como parámetro. Devuelve el
elemento que se encontraba en dicha posición anteriormente.
int size(): Devuelve el número de elementos que se encuentran
actualmente en la colección.
Interfaz Map
La interfaz Map<K,V> y las clases que la implementan vienen a reemplazar la
antigua clase Dictionary.
HashMap<K,V> es el tipo de mapeo más sencillo y probablemente el más
usado. Es la clase a utilizar si queremos asociar pares de claves y valores sin
orden, sin más. Internamente, como su nombre indica, utiliza un hash para
almacenar la clave. No permite claves duplicadas, pero si utilizar null como
clave.
Hashtable<K,V> es una vieja conocida del JDK 1.0, que, como Vector<E>
pasó a formar parte del framework de colecciones en Java 1.2. Esta clase es
muy similar a HashMap<K,V>, con la excepción de que es sincronizada y que
no acepta utilizar el valor null como clave. Como en el caso de Vector<E>
contra ArrayList<E>, nos interesará utilizar HashMap<K,V> siempre que no
estemos utilizando varios hilos de ejecución. En el caso de que necesitemos
sincronización, otra opción es utilizar el método
Collections.synchronizedMap sobre un HashMap, que funciona de
forma similar a Collections.synchronizedList.
LinkedHashMap<K,V> es una clase introducida con el J2SE 1.4 que extiende
HashMap<K,V> y utiliza una lista doblemente enlazada para poder recorrer los
elementos de la colección en el orden en el que se añadieron. Esta clase es
ligeramente más rápida que HashMap<K,V> a la hora de acceder a los
elementos, pero es algo más lenta al añadirlos.
Por último tenemos TreeMap<K,V>, en el que los pares clave-valor se
almacenan en un árbol ordenado según los valores de las claves. Como es de
esperar es la clase más lenta a la hora de añadir nuevos elementos, pero
también a la hora de accederlos.
De entre los métodos comunes a las cuatro clases los más utilizados son:
void clear(): Elimina todos los elementos de la colección.
boolean containsKey(Object key): Comprueba si la clave
especificada se encuentra en la colección.
boolean containsValue(Object value): Comprueba si el valor
especificado se encuentra en la colección.
get(Object key): Devuelve el valor asociado a la clave especificada
o null si no se encontró.
boolean isEmpty(): Comprueba si la colección está vacía.
keySet(): Devuelve un conjunto con las claves contenidas en la
colección.
put(K key, V value): Añade un nuevo par clave-valor a la colección
remove(Object key): Elimina el par clave-valor correspondiente a
la clave pasada como parámetro.
int size(): Devuelve el número de pares clave-valor que contiene la
colección.
Collection values(): Devuelve una colección con los valores que
contiene la colección.
Un ejemplo:
import java.util.*;
class Contador
{
private int i;
public Contador()
{
i=1;
}
public void incrementar()
{
++i;
}
public String toString()
{
return Integer.toString(i);
}
}
public class Estadistico {
public static void main( String args[] ) {
HashMap tabla = new HashMap();
if(tabla.containsKey(num))
//Incrementamos el contador asociado al número
((Contador)tabla.get(num)).incrementar();
else
//Añadimos nuevo par: numero-contador
tabla.put(num, new Contador());
}
System.out.println(tabla);
}
}
Clase ArrayList
Declaración y creación
De forma general un ArrayList en Java se crea de la siguiente forma:
ArrayList Arreglo = new ArrayList();
Esta instrucción crea el ArrayList Arreglo vacío.
Un arrayList declarado así puede contener objetos de cualquier tipo.
Por ejemplo:
ArrayList a = new ArrayList();
Métodos de ArrayList
Algunos métodos que proporciona ArrayList son:
MÉTODO DESCRIPCIÓN
size() Devuelve el número de elementos (int)
add(X) Añade el objeto X al final. Devuelve true.
add(posición, X) Inserta el objeto X en la posición indicada.
get(posicion) Devuelve el elemento que está en la posición indicada.
remove(posicion) Elimina el elemento que se encuentra en la posición indicada.
Devuelve el elemento eliminado.
remove(X) Elimina la primera ocurrencia del objeto X. Devuelve true si el
elemento está en la lista.
clear() Elimina todos los elementos.
set(posición, X) Sustituye el elemento que se encuentra en la posición indicada
por el objeto X. Devuelve el elemento sustituido.
contains(X) Comprueba si la colección contiene al objeto X. Devuelve true
o false.
indexOf(X) Devuelve la posición del objeto X. Si no existe devuelve -1
Clase Empleado
package listaempleado;
public class Empleado {
String nom;
int nit;
String cargo;
int sueldo;
}
Programa Principal: ListaEmpleado
package listaempleado;
import java.util.*;
public class ListaEmpleado {
public static void main(String[] args) {
{
Scanner leer = new Scanner(System.in);
int op;
Empleado nodo=new Empleado();
ArrayList lista = new ArrayList();
do{
System.out.println( "Ingrese el nombre del Empleado" );
do
{
nodo.nom = leer.nextLine();
}
while(nodo.nom.length()<2);
System.out.println( "Ingrese el nit:" );
nodo.nit = leer.nextInt();
System.out.println( "Ingrese el cargo:" );
do
{
nodo.cargo = leer.nextLine();
}
while(nodo.cargo.length()<2);
System.out.println(nodo.cargo);
System.out.println( "Ingrese sueldo:" );
nodo.sueldo= leer.nextInt();
lista.add("Nombre del alumno:\n"+nodo.nom);
lista.add("nit:\n"+nodo.nit);
lista.add("cargo:\n"+nodo.cargo);
lista.add("sueldo:\n"+nodo.sueldo);
System.out.println( "¿Desea ingresar otro Empleado?" );
System.out.println( "1.-Si\t 2.-No" );
op = leer.nextInt();
}
while(op != 2);
List lista2 = new ArrayList(lista);
Iterator it = lista2.iterator();
while (it.hasNext()){
System.out.println(it.next()+"");
}
}
}
}
Ejecución o F5
Clase Scanner
Analizador léxico simple. Se construye sobre algún tipo de fuente de
caracteres:
Scanner (String source) Scanner (Readable source) Scanner (Reader source)
Scanner (InputStream source) Scanner (File source)
Sobre la fuente de caracteres, va seleccionando lexemas (tokens) separados
por espacio en blanco. Proporciona los resultados por medio de una interface
Iterator:
String s ="Martes, 13 de septiembre de 2005, actualizado a las 16:16 h.";
Scanner scanner = new Scanner(s);
for (Iterator it = scanner; it.hasNext(); ) {
String token = (String) it.next();
System.out.println(token);
}
Martes,
13
de
septiembre
de
2005,
actualizado
a
las
16:16
h.
Además, ofrece una serie de métodos que, habiendo leído un token, lo
intentan interpretar como algún tipo primitivo de java:
B
Una aplicación de la clases: B Vector y Stack
StringTokenizer,
Se requiere crear una clase denominada HashVector donde:
Existe una cadena donde A los nombres y A códigos están separados por una
comaA(,) B A
Se deben crear dos vectores: uno para códigos y otro para nombres
Dada una cadena de código buscar en el vector de códigos, A si existe llevar el
código a una pila de hallados y sino a una pila de no hallados
Listar la pila de hallados y no hallados.
Proyecto en Netbeans
Programa: HashVector
package simulahash;
import java.util.*;
class HashVector {
String A="10,Juana,25,Diego,3,Danna,8,Sofia,20,Maria,13,Sandra,25,Maria";
StringTokenizer T=new StringTokenizer(A.toString(),",");
Stack Hallado=new Stack();
Stack NoHallado=new Stack();
Vector Codigo=new Vector();
Vector Nombre=new Vector();
public HashVector() {
boolean estado=true;
while(T.hasMoreTokens()) {
if(estado)
Codigo.addElement(T.nextElement());
else
Nombre.addElement(T.nextElement());
estado=!estado;
}
}
void buscar(String Cod)
{
if(Codigo.contains(Cod))
{
if(Hallado.search(Cod)==-1)
Hallado.push(Cod);
}
else
{
if(NoHallado.search(Cod)==-1)
NoHallado.push(Cod);
}
}
String listar()
{
StringBuffer B=new StringBuffer("Codigos Encontrados \n");
while(!Hallado.empty())
{
B.append(Hallado.pop());
B.append("\n");
}
B.append("Codigos No Encontrados \n");
while(!NoHallado.empty())
{
B.append(NoHallado.pop());
B.append("\n");
}
return B.toString();
}
}
Programa: SimulaHash
package simulahash;
import javax.swing.*;
public class SimulaHash
{
public static void main(String args[])
{
HashVector H=new HashVector();
String S;
int i,n;
for(i=1;i<=7;i++)
{
do
{
S=JOptionPane.showInputDialog(null," Digite Codigo (Solo Numero): ");
n=Integer.parseInt(S);
}
while(n==0);
H.buscar(S);
}
JOptionPane.showMessageDialog(null,H.listar().toString());
System.exit(0);
}
}
Ejecución o F5
La Clase Random
La clase Random es un generador de números pseudo-aleatorios ya que
genera secuencias distribuidas uniformemente.
Constructores:
Random() Random(long semilla)
El primer constructor crea un generador de números que utiliza la hora actual
como semilla inicial. El segundo, permite especificar el valor de la semilla.
Métodos
Método Descripción
double nextDouble() Devuelve el siguiente número aleatorio double.
float nextFloat() Devuelve el siguiente número aleatorio flota.
double nextGaussian() Devuelve el siguiente número aleatorio gaussiano.
int nextInt() Devuelve el siguiente número aleatorio int.
long nextLong() Devuelve el siguiente número aleatorio long.
Establece una semilla, es decir, el punto de inicio
void setSeed(long semilla)
del generador de números aleatorios.
El siguiente programa obtiene 100 valores aleatorios y calcula la media. El
programa también cuanta el número de valores comprendidos dentro de una
desviación estándar utilizando incrementos de 0,5 para cada categoría.
import java.util.*;
public class RandDemos {
public static void main(String args[]) {
Random r = new Random();
double val;
double sum = 0;
int campana[] = new int[10];
for (int i=0; i < 100; i++) {
val = r.nextGaussian();
sum += val;
double t = -2;
for (int x=0; x < 10; x++, t += 0.5)
if (val < t) {
campana[x]++;
break;
}
}
System.out.println("Media de los valores: " + (sum/100));
// Visualizar la campana de Gauss
for (int i=0; i < 10; i++) {
for (int x=campana[i]; x > 0; x--)
System.out.println("*");
System.out.println();
}
}
}
La Clase Hashtable
La Clase Hashtable implementa un mecanismo de almacenaje de tabla
Hashing para almacenar pares de clave y valor.
Las tablas Hashing están diseñadas para localizar y recuperar rápidamente
información almacenada, usando una clave.
Constructores:
Hashtable: Construye un HashTable Vacia
Hashtable(int): Construye un Hashtable con capacidad int
Métodos
Método Descripción
Borra todos los elementos de la
clear()
Hashtable
contains(Objeto)
True si el objeto está en la tabla
Programa: Tabla
package demotablahash;
import java.util.*;
import javax.swing.*;
class Tabla
{
String lista="Juan Pedro Tomas Sebastian Juana Ines";
StringTokenizer cadena=new StringTokenizer(lista);
int numero=cadena.countTokens();
Hashtable ht=new Hashtable(numero*2);
Random r=new Random();
int n;
public Tabla()
{
while(cadena.hasMoreTokens())
{
do
{
n=Math.abs(r.nextInt()%20+1);
}
while(ht.containsKey(new String().valueOf(n).toString()));
ht.put(new String().valueOf(n).toString(),cadena.nextToken());
}
JOptionPane.showMessageDialog (null, "Las claves: "+ht.toString());
}
void buscar(String llave)
{
if(ht.containsKey(llave))
JOptionPane.showMessageDialog (null,llave+" = "+ht.get(llave));
else
JOptionPane.showMessageDialog (null, "No existe la clave");
}
}
Programa: DemoTablaHash
package demotablahash;
import javax.swing.*;
public class DemoTablaHash
{
public static void main(String Args[])
{
Tabla A=new Tabla();
String S;
S=JOptionPane.showInputDialog (null,"Digite la Llave: ");
A.buscar(S);
}
}
Ejecución o F5
La Clase Dictionary
Dictionary es una clase abstracta que representa un depósito para almacenar
claves/valor. Una clave es un nombre que se utiliza posteriormente para
recuperar un valor. Dada una clave y un valor, se puede almacenar el valor en
un objeto Dictionary. Una vez almacenado el valor, se puede recuperar
utilizando su clave.
Métodos Clase Dictionary
Método Descripción
Devuelve una enumeración de los valores contenidos
Enumeration elements()
en el diccionario.
Devuelve el objeto que contiene el valor asociado con la
Object get(Object clave) clave. Si la clave no está en el diccionario, devuelve un
objeto nulo.
Devuelve true si el diccionario está vacío y false si
Boolean isEmpty()
contiene al menos una clave.
Devuelve una enumeración de las claves Contenidas en
Enumeration keys()
el diccionario.
Almacena una clave y su valor en el diccionario.
Object put(Object clave, Devuelve null si la clave no estaba ya en el diccionario,
Object valor) o el valor anterior que tenía asociado si la clave ya
estaba en el diccionario.
Elimina la clave y su valor. Devuelve el valor asociado a
Object remove(Object
la clave. Si la clave no está en el diccionario, devuelve
clave)
un objeto nulo.
Devuelve el número de parejas clave/valor de
int size()
diccionario.
Dictionary es una superclase de la clase Hashtable (tabla hash). Además, se
puede utilizar como superclase de cualquier clase que utilice una relación
clave/valor, pero será necesario implementar todos los métodos definidos por
Dictionary.
La Clase Properties
La clase Properties es una subclase de Hashtable que se utiliza para mantener
listas de valores en las que la clave es una cadena y el valor también es un
objeto String. La clase Properties es utilizada por otras clases de Java.
Constructores:
Properties()
Properties(Properties propDefecto)
El primer constructor crea un objeto Properties que no tiene valores por
defecto. El segundo crea un objeto que utiliza propDefecto para sus valores por
defecto. En ambos casos, la lista está vacía.
Métodos Clase Properties
Método Descripción
Devuelve el valor asociado a la clave. Devuelve
String getProperty(String clave) el objeto null si la clave no está en la lista ni en
la lista de propiedades por defecto.
Devuelve el valor asociado a la clave. Devuelve
String getProperty(String clave,
propDefecto si la clave no está en la lista ni en
String propDefecto)
la lista de propiedades por defecto.
Envía la lista de propiedades al flujo de salida
void list(PrintStream flujoSalida)
asociado a flujoSalida.
void load(InputStream Introduce una lista de propiedades del flujo de
flujoEntrada) throws IOException entrada asociado a flujoEntrada.
Devuelve la enumeración de las clasves. Aquí
Enumeration propertyNames() se incluyen las claves encontradas en la lista de
propiedades por defecto.
Después de escribir la cadena especificada por
void save(OutputStream
descripción, escribe la lista de propiedades en el
flujoSalida, String descripción)
flujo de salida asociado a flujoSalida.
El siguiente ejemplo utiliza la clase Properties, creando una lista de
propiedades en la que las claves son nombres de Departamentos Colombianos
y los valores son los nombres de sus capitales. Además, se especifica una lista
de propiedades por defecto cuando se construye un objeto
Properties(Departamento,Capital).
import java.util.*;
public class DemoPropiedad {
public static void main(String args[]) {
Properties defList = new Properties();
defList.put("Cundinamarca", "Bogota");
defList.put("Bogota", "Bogota");
Properties ciudades = new Properties(defList);
Enumeration comunidades;
String str;
ciudades.put("Valle","Cali");
ciudades.put("Antioquia","Medellin");
ciudades.put("Atlantico","Barranquilla");
ciudades.put("Bolivar","Cartagena");
comunidades = ciudades.keys();
while (comunidades.hasMoreElements()) {
str = (String) comunidades.nextElement();
System.out.println("Capital de " + str + " es " +
ciudades.getProperty(str));
}
System.out.println();
// Ahora encontrará Bogota en la lista por defecto.
str = ciudades.getProperty("Cundinamarca");
System.out.println("La ciudad de Cundinamarca: "+ str);
}
}
La Clase Date
La clase Date representa una fecha y hora.
Constructores:
Date()
Date(int año, int mes, int dia)
Date(int año, int mes, int dia, int horas, int minutos)
Date(int año, int mes, int dia, int horas, int minutos, int segundos)
Date(long milisegundos)
Date(String fecha)
Estos tres constructores establecen el día, mes y año. El parámetro año
especifica el número de años que han transcurrido desde 1900; mes establece
el mes del año, comenzado en 0 para Enero. El penúltimo constructor permite
construir un objeto Date especificando el número de milisegundos transcurridos
desde el 1 de Enero de 1970. El último, permite establecer la fecha utilizando
una cadena que contenga dicha fecha. Por ejemplo, new Date("Thu Feb 15
1999 22:24:24") construirá un objeto con la fecha y hora especificada.
La clase Date define los métodos que se muestran en la siguiente tabla. Hay
varios métodos que permiten establecer y obtener la fecha y la hora. No se
puede establecer el día de la semana, ya que depende del día del mes.
Métodos Clase Date
Método Descripción
Devuelve true si el objeto Date contiene
una fecha que es posterior a la fecha
boolean after(Date fecha)
especificada. En caso contrario, devuelve
false.
Devuelve true si el objeto Date contiene
una fecha que es anterior a la fecha
boolean before(Date fecha)
especificada. En caso contrario, devuelve
false.
Devuelve true si el objeto Date contiene
la misma fecha y hora que la fecha
boolean equals(Object fecha)
especificada. En caso contrario, devuelve
false.
Devuelve el día del mes, que será un
int getDate()
valor comprendido entre 1 y 31.
Devuelve el día de la semana en forma
de entero, correspondiendo el valor 0 al
int getDay()
Domingo, el 1 al Lunes y así
sucesivamente.
Devuelve la hora. Las horas se
int getHours() representan en función de un reloj de 24
horas.
Convierte una cadena que contiene una
fecha y hora en el número de
static long parse(String str) milisegundos que han transcurrido desde
el 1 de Enero de 1900. Devuelve el
número de milisegundos transcurridos.
Método Descripción
Establece como el día del mes el valor
void setDate(int dia)
especificado por día.
Establece la hora con el valor
void setHours(int hoas) especificado. Para ello, se utiliza un reloj
de 24 horas.
Establece el año especificando el
número de milisegundos que han
void setYear(int año)
transcurrido desde el 1 de Enero de
1900.
Convierte el objeto Date en una cadena y
String toLocaleString() devuelve el resultado. La hora y la fecha
son locales.
Convierte el objeto Date en una cadena y
String toString()
devuelve el resultado.
Al igual que getDate(), getDay() y getHours() define los métodos: getMinutes(),
getMonth(), getSeconds() y getTime().
Comparación de fechas
Hay dos formas de comparar dos objetos Date. La primera es utilizar el método
getTime() en los dos objetos para obtener el número de milisegundos que han
transcurrido desde el 1 de enero de 1970 y comparar estos dos valores. Sin
embargo, hay una forma más sencilla que consiste en utilizar los métodos
before(), after() y equals().
Por ejemplo, como el día 12 del mes es anterior al 18, new
Date(99,2,12).before(new Date(99,2,18)) devuelve true.
Cadenas y zonas horarias
Los objetos Date se pueden convertir en cadenas de varias formas. El método
toString() convierte un objeto Date en una cadena como ésta: "Thu Feb 15
22:40:02 2001". El método toLocaleString() convierte un objeto Date en una
cadena más corta como ésta: "02/15/99 22:30:02".
Por último, el método toGMTString() convierte un objeto Date en un formato de
hora del meridiano de Greenwich como éste: "14 Feb 1976 20:00:30 GMT".
Para determinar la diferencia entre la zona horaria local y GMT se utiliza el
método getTimezoneOffset(), que devuelve la diferencia en minutos.
A continuación se muestra un breve programa que utiliza estos métodos:
import java.util.Date;
public class FormatoFechas {
public static void main(String args[]) {
Date curDate = new Date();
// Muestra la fecha y hora utilizando toString()
System.out.println("Formato por defecto: " + curDate);
System.out.println("Fecha y hora local: " + curDate.toLocaleString());
System.out.println("Fecha y hora GMT " + curDate.toGMTString());
System.out.println("Diferencia de la zona horaria:: " +
curDate.getTimezoneOffset());
}
}
La salida generada por este programa es similar a la siguiente:
APLICACIÓN DE INVENTARIO
El siguiente integra las clases StringBuffer, StringTokenizer, Hashtable.
Proyecto en Netbeans
Programa: InventarioUtil
package kardexutil;
import java.util.*;
import javax.swing.*;
class InventarioUtil {
int i,j,k;
final int n=10;
String Cod="33,55,28";
String Nom="Pino,Cedro,Guayacan";
String Cant="33,18,25";
Hashtable H1=new Hashtable();
Hashtable H2=new Hashtable();
int A[][]=new int[n][4];
Random R=new Random();
public InventarioUtil()
{
String S;
StringTokenizer T1=new StringTokenizer(Cod.toString (),",");
StringTokenizer T2=new StringTokenizer(Nom.toString(),",");
StringTokenizer T3=new StringTokenizer(Cant.toString(),",");
while(T1.hasMoreTokens() && T2.hasMoreTokens () && T3.hasMoreTokens())
{
S=T1.nextToken();
H1.put(S,T2.nextToken());
H2.put(S,T3.nextToken());
}
}
boolean existe(int x)
{
return H1.containsKey(new String().valueOf(x));
}
void venta(int x,int cant)
{
int k=Integer.parseInt((String) H2.get(new String().valueOf(x)));
if(k>=cant)
{
H2.remove(new String().valueOf(x));
k=k-cant;
H2.put(new String().valueOf(x),new String().valueOf(k));
}
else
JOptionPane.showMessageDialog(null,"No se puede realizar la venta...no
hay existencia");
}
void compra(int x,int cant)
{
int k=Integer.parseInt((String) H2.get(new String().valueOf(x)));
H2.remove(new String().valueOf(x));
k=k+cant;
H2.put(new String().valueOf(x),new String().valueOf(k));
}
String impresion()
{
StringBuffer P=new StringBuffer(" CODIGO NOMBRE SALDO");
Enumeration claves=H1.keys();
String S;
while (claves.hasMoreElements())
{
S=(String) claves.nextElement ();
P.append("\n");
P.append(S);
P.append(" ");
P.append(H1.get(S));
P.append(" ");
P.append(H2.get(S));
}
return P.toString();
}
}
Programa: KardexUtil
package kardexutil;
import javax.swing.*;
public class KardexUtil{
public static void main(String[] args){
InventarioUtil X=new InventarioUtil();
Object[] Opcion={"1. Compra","2. Venta","3. Consulta","4.Cierre"};
int opc,cod=0;
String S;
do
{
S=(String) JOptionPane.showInputDialog(null,"Opciones: "," Almacen
Doris",JOptionPane.QUESTION_MESSAGE,null,Opcion,Opcion[2]);
opc=Character.digit (S.charAt(0),10);
switch(opc)
{
case 1:
cod=Integer.parseInt(JOptionPane.showInputDialog(null," Digite Codigo "));
if(!X.existe(cod))
JOptionPane.showMessageDialog (null,"No existe Codigo");
else
X.compra(cod,Integer.parseInt(JOptionPane.showInputDialog(null," Digite
Cantidad a Comprar ")));
break;
case 2:
cod= Integer.parseInt(JOptionPane.showInputDialog(null," Digite Codigo "));
if(!X.existe(cod))
JOptionPane.showMessageDialog(null,"No existe Codigo");
else
X.venta(cod,Integer.parseInt(JOptionPane.showInputDialog(null," Digite
Cantidad a Venta ")));
break;
case 3:
JOptionPane.showMessageDialog(null," Inventario
\n"+X.impresion().toString());
}
}while(opc!=4);
System.exit(0);
}
}
Ejecución o F5
APLICACIÓN DE PAISES
El siguiente integra las clases StringTokenizer, Hashtable E Interfaz
Enumeration:
Proyecto en Netbeans
Programa: Paises
package paises;
import java.util.*;
import javax.swing.*;
public class Paises
{
public static void main(String args[])
{
String Pais="Colombia,Peru,Chile,Venezuela,Bolivia";
String Ciudad="Bogota,Lima,Santiago,Caracas,La Paz";
String Poblacion="45000000,20000000,15000000,25000000,10000000";
Hashtable ciudades=new Hashtable();
Hashtable gente=new Hashtable();
StringTokenizer T1=new StringTokenizer(Pais.toString(),",");
StringTokenizer T2=new StringTokenizer(Ciudad.toString(),",");
StringTokenizer T3=new StringTokenizer(Poblacion.toString(),",");
Object Menu[]=new Object[T1.countTokens()];
String S;
while(T1.hasMoreTokens() && T2.hasMoreTokens() && T2.hasMoreTokens())
{
S=T1.nextToken().toUpperCase();
ciudades.put(S,T2.nextToken().toUpperCase());
gente.put(S,T3.nextToken().toUpperCase());
}
Enumeration comunidad=ciudades.keys();
int opc=-1;
while(comunidad.hasMoreElements())
{
opc++;
Menu[opc]=comunidad.nextElement();
}
Object[] Opcion={"1. Capital","2. Poblacion","3.Cierre"};
do
{
S=(String) JOptionPane.showInputDialog(null,"Opciones: "," Almacen
Doris",JOptionPane.QUESTION_MESSAGE,null,Opcion,Opcion[0]);
opc=Character.digit (S.charAt(0),10);
if(opc!=3)
{
S=(String) JOptionPane.showInputDialog(null,"Paises: "," O N
U",JOptionPane.QUESTION_MESSAGE,null,Menu,Menu[0]);
switch(opc)
{
case 1:
JOptionPane.showMessageDialog(null,"Pais: "+S.toString()+" Capital:
"+ciudades.get(S).toString());
break;
case 2:
JOptionPane.showMessageDialog(null,"Pais: "+S.toString()+"
Poblacion: "+gente.get(S).toString());
break;
}
}
}
while(opc!=3);
}
}
Ejecución o F5
BUENAS PRACTICAS EN JAVA BASICO E INTERMEDIO CON
COMPILADORES EN LINEA Y NETBEANS 8
Salvar con
Ejecute con F5 o
Para obtener la lista de los archivos del directorio actual se redefine un nuevo
objeto de la clase File
archivo=new File(".");
Para obtener la lista de los archivos que contiene este directorio se llama a la
función miembro list, la cual nos devuelve un vector de Strings.
String[] listaArchivos=archivo.list();
System.out.println("Nombre de Archivos.");
for(int i=0; i<listaArchivos.length; i++){
System.out.println(listaArchivos[i]);
}
Entonces el programa completo es el siguiente:
package archivos;
import java.io.*;
class Archivos {
public static void main (String args[])throws IOException
{
DataInputStream in=new DataInputStream(System.in);
String s;
System.out.println("Digite el Nombre del Archivo: ");
s=in.readLine();
File archivo = new File(s);
if (archivo.exists()) {
System.out.println("Nombre del archivo "+archivo.getName());
System.out.println("Camino "+archivo.getPath());
System.out.println("Camino absoluto "+archivo.getAbsolutePath());
System.out.println("Se puede escribir "+archivo.canRead());
System.out.println("Se puede leer "+archivo.canWrite());
System.out.println("Tamaño "+archivo.length());
}
else
System.out.println("No Existe el Archivo.");
archivo=new File(".");
String[] listaArchivos=archivo.list();
System.out.println("Nombre de Archivos.");
for(int i=0; i<listaArchivos.length; i++)
System.out.println(listaArchivos[i]);
}
}
La salida es la siguiente
Clase FilenameFilter
A menudo se desea limitar el número de archivos devueltos por el método
listFiles para que se incluyan únicamente aquellos archivos que cumplan un
cierto patrón de nombre de archivo. Con este fin, el paquete java.io incluye una
interfaz llamada FilenameFilter. Un objeto que implemente FilenameFilter tiene
un único método, accept, al que se llama una vez por cada archivo de una lista.
El método accept devuelve el valor true si se debiera incluir el archivo en la lista
acorde con el filtro (en este caso extensión java).
Ejecutar
Seleccionar File>>New Project…
Verificar:
Ejecute con F5 o
Ir a
normalmente esta en Mis Documentos
Buscar la carpeta y abrirla
Y pegar en la carpeta
Ejecute con F5 o
APLICACIÓN CARGAR UN ARCHIVO TEXTO
PRIMERA PARTE. ANTECEDENTE CLASE JFileChooser
La clase JFileChooser proporciona un GUI para navegar por el sistema de
archivos. También proporciona una forma para que el usuario elija un archivo o
directorio desde una lista o introduciendo un nombre de archivo o de directorio.
JFileChooser, que desciende de Container y de Component, crea un
componente Swing, Un objeto JFileChooser sólo representa el GUI para elegir
archivos. Nuestra aplicación es responsable de hacer algo con el archivo
elegido, como abrirlo o grabarlo.
El objeto JFileChooser consiste en un diálogo que contiene una lista de
archivos, un campo de texto, un botón como Save u Open, un botón Cancel, y
si se necesita, otros botones de selección.
Creamos un selector de archivos inicializando un objeto de la clase
JFileChooser:
JFileChooser chooser = new JFileChooser();
Ahora se analiza, la clase con sus constructores y sus Métodos:
Crear y Mostrar un Selector de Archivos
Método Propósito
JFileChooser()
JFileChooser(File, FileSystemView)
JFileChooser(File) Crea un ejemplar de
JFileChooser(FileSystemView) JFileChooser.
JFileChooser(String, FileSystemView)
JFileChooser(String)
int showOpenDialog(Component) Muestra un diálogo modal
int showSaveDialog(Component) conteniendo el selector de
int showDialog(Component, String) archivos.
El diálogo permanece activo hasta que el usuario lo cierra pulsando el botón
Save o Cancel, haciendo doble click en un archivo o usando el botón de cerrar
de sobre la barra de herramientas del diálogo. El valor de retorno de retorno de
la pulsación de uno de estos botones es el siguiente:
APPROVE_OPTION
Valor devuelto si se aprobó puslando Yes, OK, o Save.
CANCEL_OPTION
Valor devuelto si se canceló la elección.
Cuando el valor de retorno es APPROVE_OPTION, el archivo seleccionado se
puede recuperar con un método getSelectedFile. El método getAbsolutePath
de la clase File devuelve la forma absoluta del path abstracto que se ha
seleccionado en el selector de archivos o se ha tecleado en el campo de texto.
Navegar por la Lista del Selector de Archivos
Método Propósito
Fuerza el archivo indicado a
void ensureFileIsVisible(File) ser visible en la lista de
archivos.
Selecciona u obtiene el
void setCurrentDirectory(File) directorio cuyos archivos se
File getCurrentDirectory están mostrando en el selector
de archivos.
Cambia la lista para mostrar el
void changeToParentDirectory() directorio padre del directorio
actual.
Comprueba el sistema de
void rescanCurrentDirectory() archivos y actualiza la lista del
selector.
Personalizar el Selector de Archivos
Método Propósito
Selecciona u obtiene el
JComponent getAccessory()
accesorio del selector de
void setAccessory(JComponent)
archivos.
Selecciona u obtiene el
void setFileFilter(FileFilter)
filtro primario del selector
FileFilter getFileFilter()
de archivos.
Selecciona u obtiene el
void setFileView(FileView)
visor de archivos del
FileView getFileView()
selector.
FileFilter[] getChoosableFileFilters()
void setChoosableFileFilters(FileFilter[])
Selecciona, obtiene o
void addChoosableFileFilter(FileFilter)
modifica la lista de filtros
boolean removeChoosableFileFilter(FileFilter)
seleccionables.
void resetChoosable(FileFilter)
FileFilter getAcceptAllFileFilter()
Selecciona u obtiene si
void setFileHidingEnabled(boolean)
se muestran los archivos
boolean isFileHidingEnabled()
ocultos.
SEGUNDA PARTE. ANTECEDENTE LA CLASE FileFilter
La Clase FileFilter permite personalizar estos diálogos determinando que tipo
de archivos, extensiones, directorios, etc como en el caso del sistema operativo
MS-Dos el comando dir *.txt por ejemplo.
Seleccionar Archivos y Directorios
Método Propósito
Selecciona el modo de
void setFileSelectionMode(int) selección de archivos. Los
int getFileSelectionMode() valores aceptables son
boolean isDirectorySelectionEnabled() FILES_ONLY,
boolean isFileSelectionEnabled() DIRECTORIES_ONLY, y
FILES_AND_DIRECTORIES.
Selecciona u obtiene si se
void setMultiSelectionEnabled(boolean)
pueden seleccionar varios
boolean isMultiSelectionEnabled()
archivos a la vez.
Selecciona u obtiene el
void setSelectedFile(File)
archivo actualmente
File getSelectedFile()
seleccionado.
void setSelectedFiles(File[])
File[] getSelectedFiles()
A menudo se desea limitar e incluir el número de archivos que cumpla un cierto
patrón (ya sea por nombre o extensión) por un JFileChooser. Con este fin, el
paquete javax.swing.filechooser incluye una clase abstracta llamada FileFilter.
Un objeto que extiende FileFilter tiene un método, accept, al que se llama una
vez por cada archivo seleccionado en la ventana de abrir archivo. El método
accept devuelve el valor true si cumple con el patrón preestablecido (ya sea por
nombre o extensión).
El ejemplo siguiente aplica la visibilidad o filtro de los nombres de archivo con
una determinada extensión de archivo (variable ext) que se pasa como
parámetro cuando se construye el objeto de clase Filtro:
import java.io.*;
public class Filtro extends javax.swing.filechooser.FileFilter
{
String ext;
public Filtro(String ext)
{
this.ext = "." + ext;
}
public boolean accept(File f)
{
return f.isDirectory() || f.getAbsolutePath().endsWith(".java");
}
public String getDescription()
{
return "Todos los Archivos con extension "+ext;
}
}
Ejecutar
Seleccionar File>>New Project…
Verificar:
Se deben colocar los siguientes import antes del public class Vista
import java.io.*;
import javax.swing.*;
Quedando:
El siguiente método se debe colocar después de public class Vista {
public void ventana()
{
Filtro filtro=new Filtro("java");
JFileChooser fileChooser = new JFileChooser();
fileChooser.setMultiSelectionEnabled(false);
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir")));
fileChooser.setFileFilter(filtro);
int result = fileChooser.showOpenDialog(null);
System.out.println(result);
if (result == JFileChooser.APPROVE_OPTION)
{
File file = fileChooser.getSelectedFile();
if (file == null)
{
JOptionPane.showMessageDialog(null,"No se ha seleccionado ningua
archivo");
System.exit(0);
}
if (file.getName().equals(""))
{
JOptionPane.showMessageDialog(null,"No se ha seleccionado ningua
archivo");
System.exit(0);
}
if(!filtro.accept(file))
{
JOptionPane.showMessageDialog(null,"El Archivo no es fuente java");
System.exit(0);
}
if (file.exists()) {
JOptionPane.showMessageDialog(null,"\n Nombre del Archivo: " +
file.getName()+"\n Camino : " + file.getPath()+("\n Camino Absoluto : "
+ file.getAbsolutePath()+"\n Modificable : " + file.canWrite()+"\n Lectura
: " + file.canRead()+"\n Longitud : " + file.length() + " Bytes"));
System.exit(0);
}
else
System.out.println("No Existe el Archivo.");
}
}
Quedando:
Quedando:
Seleccione Filtro.java
Métodos.
abstract int read(): Lectura de byte y los retorna como entero
int read(byte[]): Lectura de varios bytes. Retorna cantidad de Byte leidos ¢ -1 si
es final
int read(byte[],int desde,int tantos):Idem a segunda,permitiendo indicar desde
donde empezar
El final del archivo viene dado cuando la función read devuelve
-1. El resto del código es similar.
long skip(long n):Saltar bytes de entrada
int avalaible(): Devuelve el número de bytes disponibles. Asegura que existan
datos de entrada.
synchronized void mark(int): Marca la posici¢n actual del flujo. El parametro
indica cantidad de byte puede leer hacia delante.
synchronized void reset(): Ir a la primera posici¢n
boolean markSupported(): Boolean o que devuelve true si soporta reset y mark
void close(): cierra un flujo de entrada.
Programa java
package mario12;
import java.io.*;
class Mario12 {
public static void main (String args[]) throws IOException
{
StringBuilder linea=new StringBuilder ();
FileInputStream en = new FileInputStream("Ejemplo.txt");
int numero=en.available();
int k;
for(k=1;(k<=numero);k++)
linea.append((char) en.read());
System.out.println(linea.toString ());
en.close();
}
}
Clase FileOutputStream
Es útil para realizar la Salida simple (caracteres de 8 bits) de archivos
Constructores.
FileOutputStream(String ): String es el nombre del archivo
FileOutPutStream(Objeto File): Indica el archivo a usar de Salida
La clase FileOutputStream forma parte del paquete java.io
Métodos.
abstract int write(): Escribe un único byte
void write(byte[]): Escribe varios bytes.
void write(byte[],int desde ,int tantos):Idem a segunda, permitiendo indicar
desde donde empezar y cuantos a escribir
void flush():Limpiar un flujo de Salida
void close(): Cierra un flujo de Salida.
Programa java
import java.io.*;
import java.util.*;
class Mario13 {
public static void main (String args[]) throws IOException {
StringBuilder linea=new StringBuilder ();
StringBuilder frase=new StringBuilder ();
FileOutputStream out= new FileOutputStream("Ejemplo.txt");
DataInputStream in=new DataInputStream (System.in);
int numero;
int k;
String s=new String ();
System.out.println("Introduzca cinco frases");
for(k=1;k<=5;k++) {
s=in.readLine();
linea.append(s);
}
for(k=0;k<linea.length();k++)
out.write((byte) linea.charAt(k));
out.close();
FileInputStream en = new FileInputStream("Ejemplo.txt");
numero=en.available();
System.out.println("Número de Bytes disponibles: "+String
.valueOf(numero));
for(k=1;(k<numero);k++)
frase.append((char) en.read());
System.out.println(frase.toString ());
en.close();
}
}
3. ENTRADA/SALIDA ESTÁNDAR
Los objetos System.in y System.out
La entrada/salida estándar (normalmente el teclado y la pantalla,
respectivamente) se definen mediante dos objetos que puede usar el
programador sin tener que crear flujos específicos.
try{
System.in.read();
}catch (IOException ex) { }
Obligatoriamente, el proceso de lectura ha de estar en un bloque try…catch
Esta porción de código es la que se ha empleado en muchas aplicaciones para
detener la ejecución de una aplicación hasta que se pulse la tecla TECLA
ENTER.
Para leer un conjunto de caracteres hasta que se pulse la tecla TECLA ENTER
escribimos
StringBuffer str=new StringBuffer();
char c;
try{
while ((c=(char)System.in.read())!='\n'){
str.append(c);
}
}catch(IOException ex){}
La clase StringBuffer(ver Taller Clase StringBuffer) es una clase que nos
permite crear strings. Contiene métodos para añadir nuevos caracteres a un
buffer y convertir el resultado final en un string. Las principales funciones
miembro son insert y append. Usamos una versión de esta última función para
añadir un carácter al final de un objeto de la clase StringBuffer.
Para convertir un objeto str de la clase StringBuffer a String se usa la función
miembro (método) toString. Esta llamada se hace de forma implícita cuando
dicho objeto se le pasa a System.out.println.
System.out.println(str);
Finalmente, se ha de hacer notar, que el método read de InputStream devuelve
un int que es promocionado (casting) a char.
El siguiente código contiene lo explicado anteriormente:
import java.io.*;
public class TeclaEnter
{
public static void main(String[] args)
{
StringBuffer str=new StringBuffer();
char c;
System.out.println("Introduce una línea de texto y pulsa TECLA ENTER ");
try{
while ((c=(char)System.in.read())!='\n'){
str.append(c);
}
}catch(IOException ex){}
System.out.println(str.toString());
}
}
Conexión con la clase Reader
Existe la posibilidad de conectar el objeto System.in con un objeto de la clase
InputStreamReader para leer los caracteres tecleados por el usuario.
Esta conexión se realiza mediante la sentencia
Reader entrada=new InputStreamReader(System.in);
try {
//espera la pulsación de una tecla y luego TECLA ENTER
System.in.read();
}catch (Exception e) { }
}
}
Para imprimir los caracteres leídos se escribe como en la sección anterior
System.out.println(str);
Podemos usar la segunda versión de la función read para leer el conjunto de
caracteres tecleados por el usuario.
char[] buffer=new char[255];
try{
Reader entrada=new InputStreamReader(System.in);
int numBytes=entrada.read(buffer);
System.out.println("Número de bytes leídos "+numBytes);
}catch(IOException ex){ }
La clase DataOutputStream es útil para escribir datos del tipo primitivo de una
forma portable. Esta clase tiene un sólo constructor que toma un objeto de la
clase OutputStream o sus derivadas como parámetro.
Se crea un objeto de la clase DataOutputStream vinculándolo a un objeto
FileOutputStream para escribir en un archivo en disco denominado pedido.txt.
FileOutputStream fileOut=new FileOutputStream("pedido.txt");
DataOutputStream salida=new DataOutputStream(fileOut));
o en una sola línea
DataOutputStream salida=new DataOutputStream(new
FileOutputStream("pedido.txt"));
La clase DataOutputStream define diversos métodos writeXXX que son
variaciones del método write de la clase base para escribir datos de tipo
primitivo
void writeBoolean(boolean v);
void writeByte(int v);
void writeBytes(String s);
void writeShort(int v);
void writeChars(String s);
void writeChar(int v);
void writeInt(int v);
void writeLong(long v);
void writeFloat(float v);
void writeDouble(double v);
Ejemplo: un pedido
Escritura Lectura
Un carácter writeChar readChar
Un entero writeInt readInt
Un número decimal writeDouble readDouble
Un string writeChars readLine
Para leer bien los datos, el string ha de separase del siguiente dato con un
carácter nueva línea '\n'. Esto no es necesario si el string se escribe en el
último lugar, después de los números. Por otra parte, el carácter tabulador
como separador no es estrictamente necesario.
Como vemos en esta porción de código, según se van leyendo los datos del
archivo, se imprimen y se calcula el precio total del pedido.
Modo:
Métodos de desplazamiento
Cuenta con una serie de funciones para realizar el desplazamiento del puntero
del archivo. Hay que tener en cuenta que cualquier lectura o escritura de datos
se realizará a partir de la posición actual del puntero del archivo.
long getFilePointer();Devuelve la posición actual del puntero del archivo.
void seek( long l ); Coloca el puntero del archivo en la posición indicada por l.
Un archivo siempre empieza en la posición 0.
int skipBytes( int n ); Intenta saltar n bytes desde la posición actual.
long length(); Devuelve la longitud del archivo.
void setLength( long l); Establece a l el tamaño de este archivo.
FileDescriptor getFD(); Devuelve el descriptor de este archivo.
Métodos de escritura
La escritura del archivo se realiza con una función que depende el tipo de datos
que se desee escribir.
void write( byte b[], int ini, int len ); Escribe len caracteres del vector b.
void write( int i ); Escribe la parte baja de i (un byte) en el flujo.
void writeBoolean( boolean b ); Escribe el boolean b como un byte.
void writeByte( int i ); Escribe i como un byte.
void writeBytes( String s ); Escribe la cadena s tratada como bytes, no
caracteres.
void writeChar( int i ); Escribe i como 1 byte.
void writeChars( String s ); Escribe la cadena s.
void writeDouble( double d ); Convierte d a long y le escribe como 8 bytes.
void writeFloat( float f ); Convierte f a entero y le escribe como 4 bytes.
void writeInt( int i ); Escribe i como 4 bytes.
void writeLong( long v ); Escribe v como 8 bytes.
void writeShort( int i ); Escribe i como 2 bytes.
void writeUTF( String s ); Escribe la cadena s utilizando la codificación UTF-8.
Métodos de lectura
La lectura del archivo se realiza con una función que depende del tipo de datos
que queremos leer.
boolean readBoolean(); Lee un byte y devuelve false si vale 0 o true sino.
byte readByte(); Lee y devuelve un byte.
char readChar(); Lee y devuelve un caracter.
double readDouble(); Lee 8 bytes, y devuelve un double.
float readFloat(); Lee 4 bytes, y devuelve un float.
void readFully( byte b[] ); Lee bytes del archivo y los almacena en un vector b.
void readFully( byte b[], int ini, int len ); Lee len bytes del archivo y los almacena
en un vector b.
int readInt(); Lee 4 bytes, y devuelve un int.
long readLong(); Lee 8 bytes, y devuelve un long.
short readShort(); Lee 2 bytes, y devuelve un short.
int readUnsignedByte(); Lee 1 byte, y devuelve un valor de 0 a 255.
int readUnsignedShort(); Lee 2 bytes, y devuelve un valor de 0 a 65535.
String readUTF(); Lee una cadena codificada con el formato UTF-8.
int skipBytes(int n); Salta n bytes del archivo.
String S=null;
linea=new StringBuffer();
if(H.containsKey(cod))
{
linea.append(" Codigo Nombre Facultad
\n");
pos=Long.parseLong((String) H.get(cod))*longreg;
bajar();
}
else
linea.append("No existe codigo");
return linea.toString();
}
String Consulta()
{
Enumeration codigo=H.keys();
String S=null;
linea=new StringBuffer();
linea.append(" Codigo Nombre Telefono \n");
while(codigo.hasMoreElements())
{
S=(String) codigo.nextElement();
pos=Long.parseLong((String) H.get(S))*longreg;
bajar();
linea.append("\n");
}
return linea.toString();
}
}
public class ArchivoRandom
{
public static void main(String[] args)
{
ArchivoEscritura archivo=new ArchivoEscritura();
char c;
String Cod=null;
String Nom=null;
String Tel=null;
int cod;
int tel;
if(!archivo.abrir())
{
System.out.println("No se pudo crear archivo de escritura");
System.exit(0);
}
do
{
do
{
Cod=JOptionPane.showInputDialog(null,"Digite Nit: ");
cod=Integer.parseInt(Cod);
}
while(cod<1000000);
Nom=JOptionPane.showInputDialog(null,"Digite Nombre: ");
do
{
Tel=JOptionPane.showInputDialog(null,"Digite Telefono: ");
tel=Integer.parseInt(Tel);
}
while(tel<1000000);
Cod=archivo.alinear(Cod,7);
Nom=archivo.alinear(Nom,20);
Tel=archivo.alinear(Tel,3);
archivo.leer(Cod,Nom,Tel);
System.out.println("desea continuar S/N");
do
{
try
{
c=(char)System.in.read();
}
catch(IOException ex)
{
c=' ';
}
}
while(c!='n' && c!='N' && c!='S' && c!='s');
}
while(c=='S' || c=='s');
if(!archivo.cerrar())
{
System.out.println("No se pudo cerrar el archivo");
System.exit(0);
}
ArchivoLectura arch=new ArchivoLectura();
if(!arch.lectura())
{
System.out.println("No se pudo abrir archivo de lectura");
System.exit(0);
}
arch.tabla();
// JOptionPane.showMessageDialog(null,arch.Consulta().toString());
do
{
Cod=JOptionPane.showInputDialog(null,"Digite Nit a Consultar: ");
cod=Integer.parseInt(Cod);
}
while(cod<1000000);
Cod=archivo.alinear(Cod,7);
JOptionPane.showMessageDialog(null,arch.Consulta(Cod).toString());
}
}
Pulsar F5 o
PRIMER PROGRAMA DIRECCION RELATIVA DE REGISTRO
El siguiente programa actualiza y consulta un archivo de acceso random con
base a una tabla de índices (llave primaria y numero de registro) usando para
ello, las clases RandomAccessFile y Hashtable.
El código es siguiente:
package archivorandom;
import java.io.*;
import java.util.*;
import javax.swing.*;
class ArchivoEscritura
{
RandomAccessFile arch;
StringBuffer linea=new StringBuffer();
int longreg=34;
boolean abrir()
{
try
{
arch=new RandomAccessFile("Cliente.txt","rw");
}
catch(IOException e)
{
return false;
}
return true;
}
String alinear(String S,int k)
{
StringBuffer B=new StringBuffer(S.toString());
B.setLength(k);
return B.toString();
}
void leer(String Cod,String Nom,String Tel)
{
linea.append(Cod.toString());
linea.append(Nom.toString());
linea.append(Tel.toString());
}
boolean cerrar()
{
int k;
if(linea.length()==0)
return false;
try
{
arch.writeChars(linea.toString());
arch.close();
}
catch(IOException e)
{
return false;
}
return true;
}
}
class ArchivoLectura
{
StringBuffer linea=new StringBuffer();
RandomAccessFile arch;
long pos=-1,k;
Hashtable H=new Hashtable();
byte alumno[]=new byte[40];
int longreg=34;
boolean lectura()
{
try
{
arch=new RandomAccessFile("cliente.txt","r");
}
catch(FileNotFoundException e)
{
return false;
}
return true;
}
void tabla()
{
long i=-1;
pos=0;
i=-1;
try
{
do
{
i++;
linea=new StringBuffer();
bajar();
String S=new String(linea.toString()).substring(0,7);
H.put(S.toString(),new String().valueOf(i));
pos=pos+longreg;
}
while(pos<arch.length());
}
catch(IOException e)
{
}
}
void bajar()
{
try
{
arch.seek(pos);
for(k=pos;k<pos+longreg;k++)
{
if(k==pos+7 || k==pos+27)
linea.append(" ");
linea.append(arch.readChar());
}
}
catch(IOException e)
{
}
}
String Consulta(String cod)
{
String S=null;
linea=new StringBuffer();
if(H.containsKey(cod))
{
linea.append(" Codigo Nombre Facultad \n");
pos=Long.parseLong((String) H.get(cod))*longreg;
bajar();
}
else
linea.append("No existe codigo");
return linea.toString();
}
String Consulta()
{
Enumeration codigo=H.keys();
String S=null;
linea=new StringBuffer();
linea.append(" Codigo Nombre Telefono \n");
while(codigo.hasMoreElements())
{
S=(String) codigo.nextElement();
pos=Long.parseLong((String) H.get(S))*longreg;
bajar();
linea.append("\n");
}
return linea.toString();
}
}
public class ArchivoRandom
{
public static void main(String[] args)
{
ArchivoEscritura archivo=new ArchivoEscritura();
char c;
String Cod=null;
String Nom=null;
String Tel=null;
int cod;
int tel;
if(!archivo.abrir())
{
System.out.println("No se pudo crear archivo de escritura");
System.exit(0);
}
do
{
do
{
Cod=JOptionPane.showInputDialog(null,"Digite Nit: ");
cod=Integer.parseInt(Cod);
}
while(cod<1000000);
Nom=JOptionPane.showInputDialog(null,"Digite Nombre: ");
do
{
Tel=JOptionPane.showInputDialog(null,"Digite Telefono: ");
tel=Integer.parseInt(Tel);
}
while(tel<1000000);
Cod=archivo.alinear(Cod,7);
Nom=archivo.alinear(Nom,20);
Tel=archivo.alinear(Tel,3);
archivo.leer(Cod,Nom,Tel);
System.out.println("desea continuar S/N");
do
{
try
{
c=(char)System.in.read();
}
catch(IOException ex)
{
c=' ';
}
}
while(c!='n' && c!='N' && c!='S' && c!='s');
}
while(c=='S' || c=='s');
if(!archivo.cerrar())
{
System.out.println("No se pudo cerrar el archivo");
System.exit(0);
}
ArchivoLectura arch=new ArchivoLectura();
if(!arch.lectura())
{
System.out.println("No se pudo abrir archivo de lectura");
System.exit(0);
}
arch.tabla();
// JOptionPane.showMessageDialog(null,arch.Consulta().toString());
do
{
Cod=JOptionPane.showInputDialog(null,"Digite Nit a Consultar: ");
cod=Integer.parseInt(Cod);
}
while(cod<1000000);
Cod=archivo.alinear(Cod,7);
JOptionPane.showMessageDialog(null,arch.Consulta(Cod).toString());
}
}
Pulsar F5 o
SEGUNDO PROGRAMA CON NUMERO DE REGISTRO
El código es siguiente:
package archivoreg;
import java.io.*;
import java.util.*;
import javax.swing.*;
class ArchivoBase
{
long longreg;
StringBuffer linea=new StringBuffer();
RandomAccessFile arch;
RandomAccessFile Temp;
long numreg=-1,pos=0,k;
Hashtable H=new Hashtable();
void crearTemp(String Nom,long l)
{
longreg=l;
try
{
Temp=new RandomAccessFile(Nom.toString(),"rw");
}
catch(IOException e){ }
}
void crearDatos(String Nom)
{
try
{
arch=new RandomAccessFile(Nom.toString(),"rw");
}
catch(IOException e){ }
}
boolean lectura(String Nom)
{
try
{
arch=new RandomAccessFile("Alumno.dat","rw");
}
catch(FileNotFoundException e)
{
return false;
}
return true;
}
String alinear(String S,int k)
{
StringBuffer B=new StringBuffer(S.toString());
B.setLength(k);
return B.toString();
}
void tabla()
{
numreg=-1;
pos=0;
try
{
while(arch.getFilePointer()<arch.length())
{
linea=new StringBuffer();
numreg++;
pos=numreg*(longreg*2);
bajar();
String S=new String(linea.toString()).substring(0,7);
H.put(S.toString(),new String().valueOf(numreg));
}
}
catch(IOException e)
{
}
}
void bajar()
{
try
{
arch.seek(pos);
for(k=pos;k<pos+longreg;k++)
{
if(k==pos+7 || k==pos+37)
linea.append(" ");
linea.append(arch.readChar());
}
}
catch(IOException e)
{
}
}
boolean existe(String cod)
{
return H.containsKey(cod);
}
String consulta(String cod)
{
String S=null;
linea=new StringBuffer();
linea.append(" Codigo Nombre Facultad
\n");
pos=Long.parseLong((String) H.get(cod));
pos=pos*(longreg*2);
bajar();
return linea.toString();
}
String verTodos()
{
Enumeration alumno=H.keys();
linea=new StringBuffer();
linea.append(" Codigo Nombre Facultad
\n");
while (alumno.hasMoreElements())
{
String cod=(String) alumno.nextElement();
pos=Long.parseLong((String) H.get(cod));
pos=pos*(longreg*2);
bajar();
linea.append("\n");
}
return linea.toString();
}
void borrar(String Cod)
{
H.remove(Cod);
}
void adicion(String Cod,String Nom,String Fac)
{
try
{
numreg++;
pos=numreg*(longreg*2);
arch.seek(pos);
arch.writeChars(Cod.toString());
arch.writeChars(Nom.toString());
arch.writeChars(Fac.toString());
}
catch(IOException e)
{
}
H.put(Cod,new String().valueOf(numreg));
}
void pasar()
{
Enumeration alumno=H.keys();
linea=new StringBuffer();
while (alumno.hasMoreElements())
{
String cod = (String) alumno.nextElement();
pos=Long.parseLong((String) H.get(cod));
pos=pos*(longreg*2);
try
{
arch.seek(pos);
for(k=pos;k<pos+longreg;k++)
linea.append(arch.readChar());
}
catch(IOException e){}
}
try
{
Temp.writeChars(linea.toString());
}
catch(IOException e){}
}
void cerrarTemp()
{
try
{
Temp.close();
}
catch(IOException e){}
}
void cerrarDatos()
{
try
{
arch.close();
}
catch(IOException e){}
}
}
public class ArchivoReg
{
static ArchivoBase archivo;
static File NomDatos=new File("alumno.dat");
static File NomTemp=new File("Temp.dat");
static char c;
static String Cod=null;
static String Nom=null;
static String Fac=null;
static int cod;
static int fac;
public static void main(String[] args)
{
archivo=new ArchivoBase();
if(NomDatos.exists())
{
archivo.crearTemp("Temp.dat",40);
archivo.lectura("alumno.dat");
archivo.tabla();
}
else
{
archivo.crearTemp("Temp.dat",40);
archivo.crearDatos("alumno.dat");
}
Object[] Opcion={"1. Adicion","2. Borrar","3.Consulta","4. Ver Todos","5. Salir"};
String S;
int opc=0;
do
{
S=(String) JOptionPane.showInputDialog(null,"Opciones: "," Almacen
Doris",JOptionPane.QUESTION_MESSAGE,null,Opcion,Opcion[0]);
opc=Character.digit (S.charAt(0),10);
switch(opc)
{
case 1:
adicion();
break;
case 2:
borrar();
break;
case 3:
consulta();
break;
case 4:
JOptionPane.showMessageDialog(null,archivo.verTodos().toString());
}
}
while(opc!=5);
cerrar();
System.exit(0);
}
static void lecturaCod()
{
do
{
Cod=JOptionPane.showInputDialog(null,"Digite Codigo a Consultar: ");
cod=Integer.parseInt(Cod);
}
while(cod<1000000);
Cod=archivo.alinear(Cod,7);
}
static void lectura()
{
Nom=JOptionPane.showInputDialog(null,"Digite Nombre: ");
do
{
Fac=JOptionPane.showInputDialog(null,"Digite Facultad: ");
fac=Integer.parseInt(Fac);
}
while(fac<10 && fac>=100);
Cod=archivo.alinear(Cod,7);
Nom=archivo.alinear(Nom,30);
Fac=archivo.alinear(Fac,3);
}
static void adicion()
{
lecturaCod();
if(archivo.existe(Cod))
JOptionPane.showMessageDialog(null,"Ya Existe Codigo");
else
{
lectura();
archivo.adicion(Cod.toString(),Nom.toString(),Fac.toString());
}
}
static void borrar()
{
lecturaCod();
if(!archivo.existe(Cod))
JOptionPane.showMessageDialog(null,"No Existe Codigo");
else
{
archivo.borrar(Cod);
}
}
static void consulta()
{
lecturaCod();
if(!archivo.existe(Cod))
JOptionPane.showMessageDialog(null,"No Existe Codigo");
else
{
JOptionPane.showMessageDialog(null,archivo.consulta(Cod).toString()
);
}
}
static void cerrar()
{
archivo.pasar();
archivo.cerrarTemp();
archivo.cerrarDatos();
if(NomDatos.delete())
NomTemp.renameTo(new File("alumno.dat"));
}
}
Pulsar F5 o
Adicionar:
1234567 Pedro Perez 12
5678906 Maria Aleja 23
Pulsar F5 o
BUENAS PRACTICAS EN JAVA BASICO E INTERMEDIO CON
COMPILADORES EN LINEA Y NETBEANS 8
Ejecutar
Seleccionar File>>New Project…
Caso Pila Vacía. Se debe posicionar sobre el paquete pilas y pulsar el botón
derecho del mouse>>opción new>>Java Exception…
Quedando:
Pulsar
PRACTICA DE LABORATORIO
Para realizar la siguiente práctica se necesita saber o recordar de la clase
String:
charAt( int indice ):: Devuelve el carácter que se encuentra en la posición que
se indica en índice
int length()::la longitud de la cadena ó número de caracteres
String trim():: Elimina espacios al comienzo como al final de la cadena
La clase valChar verifica
Que la cadena leída solamente tiene letras y dispara una excepción
ExceptoLetras
Que la cadena leída solamente tiene dígitos y dispara una excepción
ExceptoDigitos
Que la cadena leída solamente tiene letras, espacios en blanco y dispara una
excepción ExceptoParrafo
Que la cadena leída solamente sea de formato fecha (día/mes/año) y dispara
una excepción ExceptoFechas
Que el párrafo leido solamente tiene letras, espacios en blanco, y palabras
tituladas y dispara una excepción ExceptoPalabraTitulada
El parámetro String P en el administrador de excepciones posee los caracteres
de excepción
Debe llevarse a ambiente NetBeans 8
Proyecto en Netbeans
Programa: ExceptoLetras
class ExceptoLetras extends Exception
{
public ExceptoLetras(String msg)
{
super(" Las Caracteres no Letras son: "+msg);
}
}
Programa: ExceptoDigitos
class ExceptoDigitos extends Exception
{
public ExceptoDigitos(String msg)
{
super(" Las Caracteres no Digitos son: "+msg);
}
}
Programa: ExceptoParrafo
class ExceptoParrafo extends Exception
{
public ExceptoParrafo(String msg)
{
super(" Las Caracteres Letras y No espacios en blanco: "+msg);
}
}
Programa: ExceptoPalabraTitulada
class ExceptoPalabraTitulada extends Exception
{
public ExceptoPalabraTitulada(String msg)
{
super(" Las Palabras No son Tituladas: "+ msg);
}
}
Programa: ExceptoFechas
class ExceptoFechas extends Exception
{
public ExceptoFechas(String msg)
{
super("No se cumple con el formato Fecha: "+msg);
}
}
Programa: ValChar
import java.util.*;
import java.text.*;
class ValChar
{
int i;
boolean es;
StringBuffer B;
// Método que verifica si todos los caracteres son letras
void soloLetras(String P)throws ExceptoLetras
{
es=true;
B=new StringBuffer();
for(i=0;i<P.length();i++)
if(!Character.isLetter(P.charAt(i)))
{
B.append(P.charAt(i));
B.append(" ");
es=false;
}
if(!es)
throw new ExceptoLetras(B.toString());
}
// Método que verifica si todos los caracteres son digitos
void soloDigitos(String P)throws ExceptoDigitos
{
es=true;
B=new StringBuffer();
for(i=0;i<P.length();i++)
if(!Character.isDigit(P.charAt(i)))
{
B.append(P.charAt(i));
B.append(" ");
es=false;
}
if(!es)
throw new ExceptoDigitos(B.toString());
}
// Método que verifica si todos los caracteres son letras y espacios en blanco
void soloParrafo(String P)throws ExceptoParrafo
{
es=true;
B=new StringBuffer();
for(i=0;i<P.length();i++)
if(!Character.isLetter(P.charAt(i)) && !Character.isSpace(P.charAt(i)))
{
B.append(P.charAt(i));
B.append(" ");
es=false;
}
if(!es)
throw new ExceptoParrafo(B.toString());
}
public void soloFecha(String fecha)throws ExceptoFechas
{
DateFormat FormatoFecha=DateFormat.getDateInstance(DateFormat.SHORT,
new Locale("es"));
if (fecha == null)
throw new ExceptoFechas(B.toString());
FormatoFecha.setLenient(false);
try {
FormatoFecha.parse(fecha.trim());
}
catch (ParseException pe)
{
throw new ExceptoFechas("(dia/mes/año) :"+fecha.toString());
}
}
public void soloTitulada(String P)throws ExceptoPalabraTitulada
{
int i;
boolean error=false,noes=false;;
String S="";
StringTokenizer T=new StringTokenizer(P);
while(T.hasMoreTokens())
{
P=T.nextToken();
noes=false;
for(i=0;i<P.length() && !noes;i++)
if(Character.isLetter(P.charAt(i)))
{
if(i==0) // Si es la primera letra
{
if(!Character.isUpperCase(P.charAt(i)))
noes=true;
}
else // No es la primera letra
if(!Character.isLowerCase(P.charAt(i)))
noes=true;
}
else
noes=true;
if(noes)
{
error=true;
S=S+" "+P;
}
}
if(error) throw new ExceptoPalabraTitulada(S.toString());
}
}
Programa: ExceptoLectura:
import javax.swing.*;
public class ExceptoLectura
{
public void verifica()
{
ValChar V=new ValChar();
String S=" ";
try
{
S=JOptionPane.showInputDialog(null,"Teclee solo Digitos: ").trim();
V.soloDigitos(S);
}
catch(ExceptoDigitos e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
}
try
{
S=JOptionPane.showInputDialog(null,"Teclee solo Letras: ").trim();
V.soloLetras(S);
}
catch(ExceptoLetras e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
}
try
{
S=JOptionPane.showInputDialog(null,"Teclee solo Palabras Tituladas y
Espacios en Blanco: ").trim();
V.soloTitulada(S);
}
catch(ExceptoPalabraTitulada e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
}
try
{
S=JOptionPane.showInputDialog(null,"Teclee solo Letras y Espacios en
Blanco: ").trim();
V.soloParrafo(S);
}
catch(ExceptoParrafo e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
}
try
{
S=JOptionPane.showInputDialog(null,"Teclee Fecha(dia/mes/año):
").trim();
V.soloFecha(S);
}
catch(ExceptoFechas e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
}
System.exit(0);
}
}
La clase principal Excepciones o main:
Al pulsar
CASO DE ESTUDIO. EXPRESIONES REGULARES
Tomado de:
http://www.programacion.com/articulo/expresiones_regulares_en_java_127
Las expresiones regulares son una forma de coincidencia de patrones que se
pueden aplicar en el contenido textual. Tomemos por ejemplo los comodines
de DOS? Y * que se puede utilizar cuando usted está buscando un archivo. Se
trata de un tipo de subconjunto muy limitado de expresiones regulares. Por
ejemplo, si desea encontrar todos los archivos que comienzan con "fn", seguido
de 1 a 4 caracteres al azar, y terminando con "ht.txt", no se puede hacer eso
con los comodines DOS habitual. Las expresiones regulares, por el contrario,
podría manejar eso y mucho más complicados patrones.
Las expresiones regulares son, en definitiva, una forma de manejar
eficazmente los datos, buscar y reemplazar cadenas, y proporcionar control de
cadenas extendidas. A menudo una expresión regular puede de por sí el
manejo de cadenas que otras funcionalidades, como el incorporado en los
métodos y propiedades de cadena sólo se puede hacer si usted los utiliza en
una función complicada o bucle.
Las expresiones regulares se rigen por una serie de normas y hay una
construcción para cualquier patrón de caracteres. Una expresión regular sólo
puede contener (aparte de letras y números) los siguientes caracteres:
< $, ^, ., *, +, ?, [, ], . >
Una expresión regular, nos servirá para buscar patrones en una cadena de
texto, por ejemplo encontrar cuantas veces se repite una palabra en un texto,
para comprobar que una cadena tiene una determinada estructura, por ejemplo
que el nombre de archivo que nos proponen tiene una determinada extensión,
o comprobar que un email esta bien escrito... Para cada uno de estos casos
existe una expresión regular que los representa:
Por medio de la expresión regular "camion" podemos encontrar cuantas veces
se repite camión en un texto. Es la construcción mas sencilla.
Esta expresión "^www.*.es" comprueba que una cadena sea una dirección web
que comience por www y sea de un servidor español.
Y esta, para ver la potencia de las expresiones regulares, comprueba la buena
formación de los correos electrónicos: "[^A-Za-z0-9.@_-~#]+".
[Para ver como formar expresiones regulares puede ir al Apéndice A]
Uso en Java
El paquete java.util.regex esta formado por dos clases, la clase Matcher y la
clasePattern y por una excepción, PatternSyntaxException.
La clase Pattern (segun la documentacion del jdk1.4) es la representacion
compilada de una expresion regular, o lo que es lo mismo, representa a la
expresion regular, que en el paquetejava.util.regex necesita estar compilada.
En castellano significa patrón.
La clase Matcher es un tipo de objeto que se crea a partir de un patrón
mediante la invocación del método Pattern.matcher. Este objeto es el que nos
permite realizar operaciones sobre la secuencia de caracteres que queremos
validar o la en la secuencia de caracteres en la que queremos buscar. En
castellano lo mas parecido a esto es la palabra encajador.
Por lo tanto tenemos patrones que deben ser compilados, a partir de estos
creamos objetosMatcher (encajadores) para poder realizar las operaciones
sobre la cadena en cuestión.
Vamos con la clase Pattern, para crear un patrón necesitamos compilar una
expresión regular, esto lo conseguimos con el método compile:
Pattern patron = Pattern.compile("camion");
El método pattern devuelve la expresión regular que hemos compilado, el
método matchercrea un objeto Matcher a partir del patrón, el
método split divide una cadena dada en partes que cumplan el patrón
compilado y por último el método matches compila una expresión regular y
comprueba una cadena de caracteres contra ella.
Ahora la clase Matcher. Esta clase se utiliza para comprobar cadenas contra el
patrón indicado. Un objeto Matcher se genera a partir de un objeto Pattern por
medio del método matcher:
Pattern patron = Pattern.compile("camion");
Matcher encaja = patron.matcher();
Una vez que tenemos el objeto creado, podemos realizar tres tipos de
operaciones sobre una cadena de caracteres. Una es a través del
método matches que intenta encajar toda la secuencia en el patrón (para el
patrón "camion" la cadena "camion" encajaría, la cadena "mi camion es verde"
no encajaría). Otra es a través del método lookingAt, intenta encajar el patrón
en la cadena (para el patrón "camion" tanto la cadena "camion" como la cadena
"mi camion es verde" encajaria). Otra es la proporcionada por el
método find que va buscando subcadenas dentro de la cadena de caracteres
que cumplan el patrón compilado (una vez encontrada una ocurrencia, se
puede inspeccionar por medio de los métodos start que marca el primer
carácter de la ocurrencia en la secuencia y el método end que marca el ultimo
carácter de la ocurrencia). Todos estos métodos devuelven un booleano que
indica si la operación ha tenido éxito.
Ejemplos
El siguiente es un ejemplo del uso del método replaceAll sobre una cadena. El
ejemplo sustituye todas las apariciones que concuerden con el patron "a*b" por
la cadena "-".
// se importa el paquete java.util.regex
import java.util.regex.*;
while(resultado) {
caracteresIlegales = true;
m.appendReplacement(sb, "");
resultado = m.find();
}
input = sb.toString();
if (caracteresIlegales) {
System.out.println("La cadena contiene caracteres ilegales");
}
}
}
Conclusión
Hasta ahora la única opción para conseguir un efecto parecido era el uso de
StringTokenizer en conjunción con llamadas repetidas al método charAt que
producía un código demasiado enrevesado. Las expresiones regulares tienen
un amplio abanico de posibilidades, principalmente para hacer búsquedas, para
sustituir ocurrencias y para comprobar la buena formación de cadenas, como
se ha visto en el ejemplo del email.
Enlaces
Java Developers Kit de Sun v.1.4: http://java.sun.com/j2se/
Documentacion de Sun del paquete
java.util.regex:http://java.sun.com/j2se/1.4/docs/api/java/util/regex/package-
summary.html
Tutorial de expresiones
regulares: http://bulmalug.net/body.phtml?nIdNoticia=770
Apéndice A
Lo que viene a continuación no es mas que la traducción del la documentación
de una parte de la clase Pattern. Para una referencia completa puede consultar
la versión en ingles de Sun inc. sobre la clase Pattern
enhttp://java.sun.com/j2se/1.4/docs/api/java/util/regex/Pattern.html.
Expresion Encaja con
Caracteres
x El caracter x
El caracter
n El caracter con valor octal 0n (0 <= n <= 7)
nn El caracter con valor octal 0nn (0 <= n <= 7)
El caracter con valor octal 0mnn (0 <= m <= 3,
mnn
0 <= n<= 7)
xhh El caracter con valor hexadecimal 0xhh
uhhhh El caracter con valor hexadecimal 0xhhhh
El tabulador ('u0009')
Nueva linea (line feed) ('u000A')
Retorno de carro ('u000D')
f Nueva pagina ('u000C')
a Un beep de alerta (bell) ('u0007')
e Escape ('u001B')
cx El caracter de control que corresponde a x
Intervalos de caracteres
[abc] a, b, o c
[^abc] Cualquier caracter excepto a, b, o c (negacion)
[a-zA-Z] Desde la a a la z o desde la A hasta la Z, incluidos
Desde la a hasta la d, o desde la m a la p: [a-dm-p]
[a-d[m-p]]
(union)
[a-z&&[def]] La d, la e, o la f (interseccion)
Desde la a hasta la z, excepto la b y la c: [ad-
[a-z&&[^bc]]
z] (resta)
Desde la a hasta la z, excepto desde la m hasta
[a-z&&[^m-p]]
la p: [a-lq-z](resta)
Intervalos de caracteres
predefinidos
Cualquier caracter (puede que no se incluyan
.
losterminadores de linea)
d Un numero: [0-9]
D Todo menos un numero: [^0-9]
s Un espacio en blanco: [ x0Bf ]
S Todo menos un espacio en blanco: [^s]
w Una letra: [a-zA-Z_0-9]
W Todo menos letras: [^w]
Intervalos de caracteres
POSIX
(solo para US-ASCII)
{lower} Letras minusculas: [a-z]
{upper} Letras mayusculas:[A-Z]
{alpha} Letras:[{lower}{upper}]
{digit} Numero decimal: [0-9]
{alnum} Caracter alfanumerico:[{alpha}{digit}]
Signos de puntuacion: uno de !"#$%&'()*+,-
{punct}
./:;<=>?@[]^_`{|}~
Los caracteres visibles: [{alnum}{punct}]
{graph}
PRACTICA DE EXPRESIONES REGULARES EN NETBEANS
Proyecto en Netbeans
Programa: ExceptoDigitos
class ExceptoDigitos extends Exception{
public ExceptoDigitos(String P)
{
super(" Los siguentes caracteres "+P+" no son Enteros");
}
}
Programa: ExceptoLetras
public class ExceptoLetras extends Exception {
public ExceptoLetras(String P)
{
super(" Los siguentes caracteres "+P+" por lo tanto no Sustantivo comun");
}
}
Programa: ExceptoPalabraTitulada
class ExceptoPalabraTitulada extends Exception{
public ExceptoPalabraTitulada(String P)
{
super(" La siguente Palabra "+P+" No es Titulada");
}
}
Programa: ExceptoCorreo
class ExceptoCorreo extends Exception
{
public ExceptoCorreo(String P)
{
super(" El siguente correo "+P+" no es valido ejemplo@dominio.com");
}
}
Programa: ExceptoPorcentaje
class ExceptoPorcentaje extends Exception
{
public ExceptoPorcentaje(String P)
{
super(" El formato del porcenteje debe ser NN,NN : "+P);
}
}
Programa: ExceptoFechas
class ExceptoFechas extends Exception
{
public ExceptoFechas(String P)
{
super("No se cumple con el formato Fecha: "+P);
}
}
Programa: ExceptoDecimal
class ExceptoDecimal extends Exception
{
public ExceptoDecimal(String P)
{
super("No se cumple con el formato decimal: "+P);
}
}
Programa: ValChar
import java.text.*;
import java.util.*;
import java.util.regex.*;
import javax.swing.*;
public class ValChar {
int i;
boolean es;
StringBuffer B;
Pattern p =null;
Matcher m = null;
void soloDigitos(String P)throws ExceptoDigitos
{
p = Pattern.compile("^[0-9-]+$");
m = p.matcher(P);
if (!m.find()) {
throw new ExceptoDigitos(P);
}
JOptionPane.showMessageDialog(null, "El dato Ingresado es correcto");
}
void soloLetras(String P)throws ExceptoLetras
{
p = Pattern.compile("^([a-z]|[A-Z]|á|é|í|ó|ú|ñ|ü|^s)+$");
m = p.matcher(P);
if (!m.find())
throw new ExceptoLetras(P);
JOptionPane.showMessageDialog(null, "El dato Ingresado es correcto");
}
//Metodo que verifica que cada palabra empiese con Mayuscula
public void soloTitulada(String P)throws ExceptoPalabraTitulada
{
String mayus = "[A-Z]{1}";
String minus="^([a-z]|á|é|í|ó|ú|ñ|ü|^s)+$";
String primera=String.valueOf(P.charAt(0));
String segunda=P.substring(1,P.length());
boolean error=false;
p = Pattern.compile(mayus);
m = p.matcher(primera);
if (!m.find())
error=true;
p = Pattern.compile(minus);
m = p.matcher(segunda);
if (!m.find())
error=true;
if(error)
throw new ExceptoPalabraTitulada(P);
JOptionPane.showMessageDialog(null, "El dato Ingresado es correcto");
}
//Validar correo
void soloCorreo(String P)throws ExceptoCorreo
{
p = Pattern.compile("^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,4}$");
m = p.matcher(P);
if (!m.find())
throw new ExceptoCorreo(P);
JOptionPane.showMessageDialog(null, "El correo Ingresado es correcto");
}
//Valida porcentaje
void SoloPorcentaje(String P)throws ExceptoPorcentaje
{
p = Pattern.compile("^[0-9%-]+,[0-9%-]+$");
m = p.matcher(P);
if (!m.find())
throw new ExceptoPorcentaje(P);
JOptionPane.showMessageDialog(null, "El porcentaje Ingresado es
correcto");
}
//Validar Fecha
public void soloFecha(String fecha)throws ExceptoFechas
{
DateFormat FormatoFecha=DateFormat.getDateInstance(DateFormat.SHORT,
new Locale("es"));
if (fecha == null)
throw new ExceptoFechas(B.toString());
FormatoFecha.setLenient(false);
try {
FormatoFecha.parse(fecha.trim());
}
catch (ParseException pe)
{
throw new ExceptoFechas("(dia/mes/año) :"+fecha.toString());
}
JOptionPane.showMessageDialog(null, "El fecha Ingresada es correcta");
}
void soloDecimal(int enteros, int decimales, String P)throws ExceptoDecimal
{
String cadena="^(?:\\+|-
)?\\d{"+String.valueOf(enteros)+"}\\.\\d{"+String.valueOf(decimales)+"}+$";
p = Pattern.compile(cadena);
m = p.matcher(P);
if (!m.find())
throw new ExceptoDecimal(P);
JOptionPane.showMessageDialog(null, "El Numero Real Ingresado es
correcto");
}
Programa: Capturador
import javax.swing.*;
public class Capturador {
ValChar V=new ValChar();
String S=" ";
boolean error;
String Digitos(String S){
this.S=S;
do
{
error=false;
try
{
S=JOptionPane.showInputDialog(null,"Teclee solo Digitos: ",S).trim();
V.soloDigitos(S);
}
catch(ExceptoDigitos e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
error=true;
}
}
while(error);
return S;
}
String Letras(String S){
this.S=S;
do
{
error=false;
try
{
S=JOptionPane.showInputDialog(null,"Teclee solo Letras: ",S).trim();
V.soloLetras(S);
}
catch(ExceptoLetras e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
error=true;
}
}
while(error);
return S;
}
String Titulada(String S){
this.S=S;
do
{
error=false;
try
{
S=JOptionPane.showInputDialog(null,"Teclee palabra titulada: ",S).trim();
V.soloTitulada(S);
}
catch(ExceptoPalabraTitulada e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
error=true;
}
}
while(error);
return S;
}
String Correo(String S){
this.S=S;
do
{
error=false;
try
{
S=JOptionPane.showInputDialog(null,"Teclee un correo: ",S).trim();
V.soloCorreo(S);
}
catch(ExceptoCorreo e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
error=true;
}
}
while(error);
return S;
}
String Porcentaje(String S){
this.S=S;
do
{
error=false;
try
{
S=JOptionPane.showInputDialog(null,"Teclee un Porcentaje: ",S).trim();
V.SoloPorcentaje(S);
}
catch(ExceptoPorcentaje e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
error=true;
}
}
while(error);
return S;
}
String Fecha(String S){
this.S=S;
do
{
error=false;
try
{
S=JOptionPane.showInputDialog(null,"Teclee Fecha(dia/mes/año):
",S).trim();
V.soloFecha(S);
}
catch(ExceptoFechas e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
error=true;
}
}
while(error);
return S;
}
String decimales(String S){
this.S=S;
do
{
error=false;
try
{
int enteros=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite el
Numero de Digitos Enteros:"));
int decimales=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite el
Numero de Digitos Decimales:"));
S=JOptionPane.showInputDialog(null,"Digite el Numero e evaluar:");
V.soloDecimal(enteros,decimales,S);
}
catch(ExceptoDecimal e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
error=true;
}
}
while(error);
return S;
}
}
Programa Menu
import javax.swing.*;
public class Menu {
public void opciones()
{
Capturador C=new Capturador();
String Nenteros="";
String Text="";
String Nombre="";
String Correo="";
String Porcentaje="";
String fecha="";
String decimales="";
String titulada="";
boolean salir = true;
int opc;
String S;
Object[] Opcion={"1. Enteros","2. Sustantivo comun","3. Sustantivo
propio","4. Correo ","5. Porcentajes","6. Fechas","7. Decimales","8.
Tituladas","9. Cierre"};
do
{
S=(String) JOptionPane.showInputDialog(null,"Opciones de ingreso: ","
Verificador",JOptionPane.QUESTION_MESSAGE,null,Opcion,Opcion[0]);
opc=Character.digit(S.charAt(0),10);
switch(opc)
{
case 1:Nenteros=C.Digitos(Nenteros);
break;
case 2: Text=C.Letras(Text);
break;
case 3: Nombre=C.Titulada(Nombre);
break;
case 4: Correo=C.Correo(Correo);
break;
case 5: Porcentaje=C.Porcentaje(Porcentaje);
break;
case 6: fecha=C.Fecha(fecha);
break;
case 7: decimales=C.decimales(decimales);
break;
case 8:
titulada=C.Titulada(titulada);
break;
}
}while(opc!=9);
System.exit(0);
}
}
Programa ExpresionesRegurales