Diferencia entre revisiones de «Usuario:ManuelRomero/clasesJava»

De WikiEducator
Saltar a: navegación, buscar
(Práctica 1: Calculadora usando números Racionales)
 
(Una revisión intermedia por el mismo usuario no mostrado)
Línea 107: Línea 107:
 
| style="border-top:none;border-bottom:0.002cm solid #000000;border-left:0.002cm solid #000000;border-right:0.002cm solid #000000;padding:0.097cm;"| Compara dos objetos <tt>Character </tt>con un resultado numérico: el valor es 0 si el parámetro y la instancia son iguales, es menor que 0 si la instancia es menor que el parámetro y es mayor que 0 si la instancia es mayor que el parámetro.
 
| style="border-top:none;border-bottom:0.002cm solid #000000;border-left:0.002cm solid #000000;border-right:0.002cm solid #000000;padding:0.097cm;"| Compara dos objetos <tt>Character </tt>con un resultado numérico: el valor es 0 si el parámetro y la instancia son iguales, es menor que 0 si la instancia es menor que el parámetro y es mayor que 0 si la instancia es mayor que el parámetro.
 
|}
 
|}
=Práctica 1: Calculadora usando números Racionales=
+
=Trabajar con ficheros=
*El enunciado de esta práctica se ha impartido en clase
+
*Se facilitan los fuentes comentados
+
*Conviene revisar y comprender la solución
+
*Tanto la solución algorítmica ç
+
** hay muchas alternativas y seguro que mejores, pero en clase hemos realizado ''ésta''
+
*A nivel de sintaxis
+
** comprender los comandos y las clases utilizadas
+
** comprender el usao de objetos de clases del api '''Scanner leer'''
+
** Comprender el uso de métodos directamente de clases de java.lang
+
System.out.println Integer.pareInt(String)
+
**Métodos de la clase String
+
indexOf(char) substring(posicionInicial, posicionFinal)
+
Conviene revisarlo y plantear cualquier duda
+
{{Pregunta|si revisas este código anótate cualquier duda o anótala en discusion
+
*El próximo día la planteamos :)}}
+
==Clase Racional==
+
*Revisar constructores sobrecargados
+
 
<source lang=java>
 
<source lang=java>
 +
import java.io.File;
 +
import java.io.FileNotFoundException;
 +
import java.io.IOException;
 +
import java.io.PrintWriter;
 +
import java.util.Scanner;
  
public class Racional {
+
public class Fichero {
//Defino atributos
+
public static void main(String []l){
private int num;
+
try {
private int den;
+
    File fichero = new File(".\\hola.txt");
 
 
//Definimos los constructor sobrecargados
+
    String linea;
+
    PrintWriter writer;
/**
+
    fichero.createNewFile();
* A partir de la cadena "a/b" construyo el racional
+
    Scanner leer = new Scanner (fichero);
* num=a
+
    writer = new PrintWriter(fichero);
* den=b
+
    writer.print("esto es una cadena de caracteres");
* @param numero es una cadena de caracteres de la forma a/b
+
    writer.close();
*/
+
    linea = leer.nextLine();
Racional (String numero){
+
    System.out.println("he leido"+linea);
int pos;
+
pos = numero.indexOf('/');
+
    } catch (FileNotFoundException e) {
if (pos==-1){
+
// TODO Auto-generated catch block
System.out.println("Error "+numero+"No es racional. " +"\n Crearemos el racional 1/1");
+
    e.printStackTrace();
this.num=1;
+
this.den=1;
+
 
}
 
}
else{
+
    catch (IOException e){
String n;
+
e.printStackTrace();
n=numero.substring(0,pos);
+
     }
this.num=Integer.parseInt(n);
+
n=numero.substring(pos+1);
+
this.den=Integer.parseInt(n);
+
}
+
}
+
 
+
/**
+
* A partir de los enteros pasados construyo el racional
+
* @param num
+
* @param den
+
*/
+
Racional(int num, int den){
+
this.num=num;
+
this.den = den;
+
}
+
/**
+
* Me pasan solo el numerador
+
* el denominador = 1
+
* @param num
+
*/
+
Racional(int num){
+
this.num=num;
+
this.den = 1;
+
}
+
/**
+
* No me pasan nada, construyo 1/1
+
*/
+
Racional(){
+
this.num=1;
+
this.den =1;
+
}
+
/**
+
* simplemento visualizo "num/den" 
+
*/
+
public void visualizar(){
+
System.out.print(this.num+"/"+this.den);
+
}
+
/**
+
* @return la cadena de caracteres num/den
+
*/
+
public String toString() {
+
return (this.num + "/" + this.den );
+
}
+
/**
+
*
+
* @return el float de num/den
+
*/
+
public float diValor(){
+
return ((float)this.num/(float)this.den);
+
}
+
+
/**
+
* suma al racional actual el racional que le paso por parámetro
+
* Retorna el racional suma
+
* @param r Racianal 2º sumndo
+
* @return Un racional suma del objeto actual y r
+
*/
+
public Racional sumar(Racional r){
+
    Racional resultado = new Racional();
+
    resultado.den=this.den*r.den;
+
    resultado.num=this.num*r.den+this.den*r.num;
+
    return resultado;
+
    /*Posible en una sóla instruccion
+
    * return (this.den*r.den,this.num*r.den+this.den*r.num);
+
    */
+
}
+
public Racional restar(Racional r){
+
    Racional resultado = new Racional();
+
    resultado.den=this.den*r.den;
+
    resultado.num=this.num*r.den-this.den*r.num;
+
    return resultado;
+
    /*Posible en una sóla instruccion
+
    * return (this.den*r.den,this.num*r.den-this.den*r.num);
+
    */
+
   
+
}
+
public Racional multiplicar(Racional r){
+
    Racional resultado = new Racional();
+
    resultado.den=this.den*r.den;
+
    resultado.num=this.num*r.num;
+
    return resultado;
+
    /*Posible en una sóla instruccion
+
    * return (this.den*r.den,this.num*r.num);
+
    */
+
   
+
}
+
public Racional dividir(Racional r){
+
    Racional resultado = new Racional();
+
    resultado.num=this.num*r.den;
+
    resultado.den=this.den*r.num;      
+
    return resultado;
+
    /*Posible en una sóla instruccion
+
          return (this.num*r.den,this.den*r.num);
+
    */
+
   
+
}
+
/**
+
* Modifica el objeto actual simplificandolo
+
        * si num y den no son primos entre ellos
+
*/
+
public void simplificar(){
+
int n = mcd();
+
this.num= this.num/n;
+
this.den= this.den/n;
+
 
 
}
+
}
/**
+
*
+
* @return el máximo común divisor de num y den
+
*/
+
private int mcd(){
+
int mayor = this.num;
+
int menor = this.den;
+
int resto=1;
+
if (mayor< menor){
+
resto = menor;
+
    menor = mayor;
+
    mayor = resto;
+
    }
+
+
while (mayor!=menor){
+
resto= mayor-menor;
+
if (resto > menor){
+
  mayor = resto;
+
}
+
else{
+
  mayor=menor;
+
  menor=resto;
+
}
+
}
+
return menor;
+
}
+
 
 
  
 
}
 
}
 +
 
</source>
 
</source>
 +
=Clase Formatter=
 +
*Construye un nuevo formateador.
 +
*Un formateador es una cadena de caracteres con formato, es decir usando los caracteres espciales para dar formatos
 +
*%d,%s,%c,%f,%l vistos con el  método System.out.println
  
=Clase Principal=
+
El destinatario de la salida con formato es un StringBuilder la cual puede ser recuperada invocando a out() y cuyo contenido actual puede ser convertido en una cadena invocando a toString(). La localidad usada es la localidad por defecto para esta instancia de la máquina virtual de Java.
*Revisar el concepto de '''static''' (lo trataremos con más detalle)
+
El constructor me permite vincular el objeto con un fichero, de modo que volque la cadena de caracteres al fichero con el método '''format()'''
<source lang=java>
+
Tiene varios constructores. analicemos el que nos vincula a un fichero
import java.util.Scanner;
+
  public Formatter(String fileName) throws FileNotFoundException
public class Principal {
+
==Ligando el objeto con un fichero==
/**
+
*Construye un nuevo formateado usando el nombre de archivo especificado.
* @param args
+
  La localidad usada es localidad por defecto para esta instancia de la máquina virtual de Java.
*/
+
;'''fileName'''
static Scanner leer = new Scanner(System.in);
+
:El nombre del archivo que se usará como destinatario de este formateador.
static Racional r1 =null;
+
:Si el archivo existe entonces sera truncado a un tamaño cero;
/**
+
:en cualquier otro caso, se creara un nuevo archivo. La salida será escrita al archivo usando almacenamiento intermedio (buffer, no escritura directa.
*
+
Este constructor puede lanzar dos tipos de excepciones
* @param operacion Es la operacion que se quiere realizar '''a/b op d/e''' donde
+
;Throws SecurityException:
*  '''op''' una de las siguientes operaciones +,-,*,:
+
:Si existe un administrador de seguridad y niega el acceso de escritura al archivo checkWrite(fileName).
* a/b es el primer operando (Racional)
+
;Throws FileNotFoundException:
* d/e es el segundo operando (Racional)
+
:Si el nombre del archivo especificado no denota un archivo regular existente, modificable y si el el archivo regular no puede ser creado, o si ocurre algún otro error cuando se accesa o crea el archivo.
* @return un caracter que representa la operación o 0 si no hay ninguna
+
==Escribiendo en el fichero==
*/
+
public static char sacaOperando(String operacion){
+
int pos;
+
pos = operacion.indexOf('+');
+
if (pos != -1)
+
return '+';
+
pos = operacion.indexOf('-');
+
if (pos != -1)
+
return '-';
+
pos = operacion.indexOf('*');
+
if (pos != -1)
+
return '*';
+
pos = operacion.indexOf(':');
+
if (pos != -1)
+
return ':';
+
else {
+
    System.out.println("Operadores permitidos ('+,-,*,:) no presente en "+operacion);
+
return 0;
+
}
+
}
+
/**
+
*
+
* @param operacion Es la operacion que se quiere realizar '''a/b op d/e''' donde
+
* '''op''' una de las siguientes operaciones +,-,*,:
+
* a/b es el primer operando (Racional)
+
* d/e es el segundo operando (Racional
+
* @return Un Racional con el resultado de la operacion a/b+c/d p.e
+
  */
+
+
public static Racional opera (String operacion){
+
char operando = sacaOperando(operacion);
+
int pos;
+
String  op;
+
pos = operacion.indexOf(operando);
+
op = operacion.substring(0,pos);
+
Racional op1 = new Racional(op);
+
op = operacion.substring(pos+1);
+
Racional op2 = new Racional(op);
+
switch (operando){
+
case '+':
+
return (op1.sumar(op2));
+
case'-':
+
return (op1.restar(op2));
+
case '*':
+
return (op1.multiplicar(op2));
+
case ':':
+
return(op1.dividir(op2));
+
default:
+
System.out.println("Operacion no permitida");
+
return(new Racional());
+
}
+
+
}
+
+
+
/** Visualiza opciones
+
* valida que la opcion introducida es número
+
* valida que la opcion introducida está en rango permitido
+
*retornar  la opción seleccionada (1-6)
+
*/
+
public static int menu(){
+
  int opcion;
+
  do{
+
    System.out.println("Menu princial");
+
System.out.println("1.-Insertar Racional");
+
System.out.println("2.-Visualizar");
+
System.out.println("3.-Simplificar");
+
System.out.println("4.-Visualiza valor");
+
System.out.println("5.-Calculadora");
+
System.out.println("6.-Salir");
+
System.out.println("Elija una opción: ");
+
while (leer.hasNextInt()==false){
+
      System.out.println("Solo número por favor");
+
      leer.nextLine();
+
}//End do...
+
opcion=leer.nextInt();
+
  }while((opcion<1)|| (opcion >6));
+
      //Para dejar el buffer limpio
+
      //(después de leer entero se queda en intro)
+
  leer.nextLine();
+
  return opcion;
+
}//End método menú()
+
 
+
 
+
/**
+
*
+
* @param opcion es la opión seleccionada 1-6
+
* En función de la opción seleccionada
+
* realiza las acciones correspondientes
+
* Hacer notar que hay acciones que si el racional
+
* no se ha instanciado, no se pueden realizar (visualizar, simplificar y diValor)
+
*/
+
public static void accion (int opcion){
+
  String num;
+
  switch (opcion){
+
case 1:  System.out.println("Inserta el racional a/b");
+
        num=leer.nextLine();
+
        r1= new Racional(num);
+
        break;
+
case 2:
+
  if (r1==null)
+
  System.out.println("Primero inserta");
+
  else
+
  System.out.println("Racional = "+r1.toString());
+
  break;
+
case 3:
+
  if (r1==null)
+
  System.out.println("Primero inserta");
+
  else{
+
  System.out.print("Racional = "+r1.toString());
+
  r1.simplificar();
+
  System.out.println(" simplificado = "+r1.toString());
+
  }
+
  break;
+
case 4:
+
  if (r1==null)
+
  System.out.println("Primero inserta");
+
  else{
+
  System.out.println(r1.toString()+"="+r1.diValor());
+
  }
+
  break;
+
case 5:
+
  String operacion;
+
  System.out.println("inserta operacion a/b op c/d");
+
  System.out.println("donde op =(+,-,*,:)");
+
  operacion = leer.nextLine();
+
  r1 = opera(operacion);
+
  System.out.println(operacion+"="+r1.toString());
+
  break;
+
case 6:
+
  System.out.println("Fin de programa");
+
  break;
+
}//End del switch
+
}//End método accion()
+
 
+
 
+
/**
+
*
+
* @param args (vacío, necesario por sintaxis
+
* lee la opción de lo que retorna menu()
+
* y le dice al método accion() que la realice
+
* Se itera hasta que la opción sea salir (6)
+
*/
+
public static void main(String[] args) {
+
int opcion;
+
    do{
+
  opcion = menu();
+
  accion(opcion);
+
}while (opcion!=6);
+
}//fin de main
+
+
+
}//Fin del programa principal
+
+
</source>
+

Última revisión de 17:25 17 abr 2012

LA CLASE STRNG

  • String es una clase predefinida para representar cadena de caracteres.
  • Pertenece al paquete o libreríajava.lang
  • orientada a manejar cadenas constantes de caracteres.
  • Una instancia de la clase String es inmutable
  • Si queremos cambiar el contenido de una cadena debemos usar la clase BufferString
  • A continuación enumeramos algunos de sus métodos muy prácticos e interesantes.

Métodos de la clase string

length() Devuelve la longitud de la cadena
indexOf(‘caracter’) Devuelve la posición de la primera aparición de caracter
lastIndexOf(‘caracter’) Devuelve la posición de la última aparición de caracter
charAt(n) Devuelve el carácter que está en la posición n
substring(n1,n2) Devuelve la subcadena comprendida entre las posiciones n1 y n2 ambas incluidas
toUpperCase() Devuelve la cadena convertida a maýusculas
toLowerCase() Devuelve la cadena convertida a minúsculas
equals("cad") Compara dos cadenas y devuelve true si son iguales
equalsIgnoreCase("cad") I gual que equals pero sin considerar mayúsculas y minúsculas
valueOf(n) Convierte el valor entero n a cadena. Existen otros métodos con elmismo identificador, valueOf, para la conversión del resto de los
tipos primitivos a cadena.

Operando con String

Las siguientes son operaciones con datos de la clase String

"curso" + "java" // Genera "cursojava"
"indice" + 5 // Genera "indice5"
5 + "capitulo" // Genera "5capitulo"
"x" + 2 + 3 // Genera "x23"
2 + 3 + "x" // Genera "5x": cuidado con la prioridad de los operadores
 2 + (3 + "x") // Genera "23x"
  • Tambien puede emplearse el operador +=, de forma que la sentencia a+=b es equivalente a la sentencia a = a+b.
  • La comparación == no se realiza ya que los objetos son valores constantes a posiciones de memoria
nombre = “pedro”
otronombre =”pedro”
nombre==otronombre no me dará cierto
  • el método equals, de forma que cadena1.equals(cadena2) devuelve true si cadena1 y cadena2 hacen referencia a un mismo valor.

Objetos de la clase Character

*La clase predefinida Character permite trabajar único carácter Unicode.

*facilitan la manipulación de datos de tipo primitivo char.

Métodos de la clase Character

METODO ACCION
boolean isUpperCase(char)

boolean isLowerCase(char)

Determina si el carácter es mayúsculas o minúsculas,respectivamente
char toUpperCase(char)

char toLowerCase(char)

Devuelve el carácter en mayúsculas o minúsculas correspondiente.
boolean isLetter(char)

boolean isDigit(char) boolean isLetterOrDigit(char)

Determina si el carácter es una letra, un dígito, o una letra o un dígito, respectivamente.
boolean isWhitespace(char) Determina si el carácter es un carácter de espacio en blanco.
boolean isSpaceChar(char) Determina si el carácter es un carácter de espacio en blanco de acuerdo a Unicode.
boolean isJavaIdentifierStart(char)

boolean isJavaIdentifierPart(char)

Determina si el carácter puede ser el primer carácter permitido en un identificador o parte de él.
int compareTo(Character otroCter) Compara dos objetos Character con un resultado numérico: el valor es 0 si el parámetro y la instancia son iguales, es menor que 0 si la instancia es menor que el parámetro y es mayor que 0 si la instancia es mayor que el parámetro.

Trabajar con ficheros

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
 
public class Fichero {
 public static void main(String []l){
 try {
     File fichero = new File(".\\hola.txt");
 
     String linea;
     PrintWriter writer;
     fichero.createNewFile();
     Scanner leer = new Scanner (fichero);
     writer = new PrintWriter(fichero);
     writer.print("esto es una cadena de caracteres");
     writer.close();
     linea = leer.nextLine();
     System.out.println("he leido"+linea);
 
     } catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
     e.printStackTrace();
		}
     catch (IOException e){
		e.printStackTrace();
    }
 
}
 
 
}

Clase Formatter

  • Construye un nuevo formateador.
  • Un formateador es una cadena de caracteres con formato, es decir usando los caracteres espciales para dar formatos
  • %d,%s,%c,%f,%l vistos con el método System.out.println

El destinatario de la salida con formato es un StringBuilder la cual puede ser recuperada invocando a out() y cuyo contenido actual puede ser convertido en una cadena invocando a toString(). La localidad usada es la localidad por defecto para esta instancia de la máquina virtual de Java. El constructor me permite vincular el objeto con un fichero, de modo que volque la cadena de caracteres al fichero con el método format() Tiene varios constructores. analicemos el que nos vincula a un fichero

public Formatter(String fileName) throws FileNotFoundException 

Ligando el objeto con un fichero

  • Construye un nuevo formateado usando el nombre de archivo especificado.
La localidad usada es localidad por defecto para esta instancia de la máquina virtual de Java.
fileName
El nombre del archivo que se usará como destinatario de este formateador.
Si el archivo existe entonces sera truncado a un tamaño cero;
en cualquier otro caso, se creara un nuevo archivo. La salida será escrita al archivo usando almacenamiento intermedio (buffer, no escritura directa.

Este constructor puede lanzar dos tipos de excepciones

Throws SecurityException
Si existe un administrador de seguridad y niega el acceso de escritura al archivo checkWrite(fileName).
Throws FileNotFoundException
Si el nombre del archivo especificado no denota un archivo regular existente, modificable y si el el archivo regular no puede ser creado, o si ocurre algún otro error cuando se accesa o crea el archivo.

Escribiendo en el fichero