Diferencia entre revisiones de «Usuario:ManuelRomero/clasesJava»

De WikiEducator
Saltar a: navegación, buscar
(Clase Principal)
(Práctica 1: Calculadora usando números Racionales)
Línea 121: Línea 121:
 
  indexOf(char) substring(posicionInicial, posicionFinal)
 
  indexOf(char) substring(posicionInicial, posicionFinal)
 
Conviene revisarlo y plantear cualquier duda
 
Conviene revisarlo y plantear cualquier duda
{{Pregunta||si revisas este código anótate cualquier duda o anótala en discusion
+
{{Pregunta|si revisas este código anótate cualquier duda o anótala en discusion
El próximo día la planteamos :)}}
+
*El próximo día la planteamos :)}}
 
==Clase Racional==
 
==Clase Racional==
 
*Revisar constructores sobrecargados
 
*Revisar constructores sobrecargados

Revisión de 09:53 5 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.

Práctica 1: Calculadora usando números Racionales

  • 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



Icon qmark.gif

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
public class Racional {
//Defino atributos
	private int num;
	private int den;
 
//Definimos los constructor sobrecargados
 
	/**
	 * A partir de la cadena "a/b" construyo el racional
	 * num=a
	 * den=b
	 * @param numero es una cadena de caracteres de la forma a/b
	 */
	Racional (String numero){
		int pos;
		pos = numero.indexOf('/');
		if (pos==-1){
			System.out.println("Error "+numero+"No es racional. " +"\n Crearemos el racional 1/1");
			this.num=1;
			this.den=1;
		}
		else{
			String n;
			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;
	}
 
 
}

Clase Principal

  • Revisar el concepto de static (lo trataremos con más detalle)
import java.util.Scanner;
public class Principal {
	/**
	 * @param args
	 */
	static Scanner leer = new Scanner(System.in);
	static Racional r1 =null;
	/**
	 * 
	 * @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 caracter que representa la operación o 0 si no hay ninguna 
	 */
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