Diferencia entre revisiones de «Usuario:ManuelRomero/clasesJava»
De WikiEducator
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. | ||
|} | |} | ||
− | =Clase | + | =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 | ||
+ | {{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> | ||
Línea 115: | Línea 132: | ||
private int den; | private int den; | ||
− | //Definimos | + | //Definimos los constructor sobrecargados |
+ | |||
+ | /** | ||
+ | * A partir de la caden a/b construyo el racional | ||
+ | * num=a | ||
+ | * den=b | ||
+ | * @param numero es una cadena de caracteres de la forma a/b | ||
+ | */ | ||
Racional (String numero){ | Racional (String numero){ | ||
int pos; | int pos; | ||
Línea 133: | Línea 157: | ||
} | } | ||
+ | /** | ||
+ | * A partir de los enteros pasados construyo el racional | ||
+ | * @param num | ||
+ | * @param den | ||
+ | */ | ||
Racional(int num, int den){ | Racional(int num, int den){ | ||
this.num=num; | this.num=num; | ||
this.den = den; | this.den = den; | ||
} | } | ||
+ | /** | ||
+ | * Me pasan solo el numerador | ||
+ | * el denominador = 1 | ||
+ | * @param num | ||
+ | */ | ||
Racional(int num){ | Racional(int num){ | ||
this.num=num; | this.num=num; | ||
this.den = 1; | this.den = 1; | ||
} | } | ||
+ | /** | ||
+ | * No me pasan nada, construyo 1/1 | ||
+ | */ | ||
Racional(){ | Racional(){ | ||
this.num=1; | this.num=1; | ||
this.den =1; | this.den =1; | ||
} | } | ||
+ | /** | ||
+ | * simplemento visualizo "a/b" | ||
+ | */ | ||
public void visualizar(){ | public void visualizar(){ | ||
System.out.print(this.num+"/"+this.den); | System.out.print(this.num+"/"+this.den); | ||
} | } | ||
− | + | /** | |
+ | * @return la cadena de caracteres num/den | ||
+ | */ | ||
public String toString() { | public String toString() { | ||
return (this.num + "/" + this.den ); | 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){ | public Racional sumar(Racional r){ | ||
Racional resultado = new Racional(); | Racional resultado = new Racional(); | ||
Línea 158: | Línea 213: | ||
resultado.num=this.num*r.den+this.den*r.num; | resultado.num=this.num*r.den+this.den*r.num; | ||
return resultado; | 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){ | public Racional restar(Racional r){ | ||
Línea 164: | Línea 222: | ||
resultado.num=this.num*r.den-this.den*r.num; | resultado.num=this.num*r.den-this.den*r.num; | ||
return resultado; | 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){ | public Racional multiplicar(Racional r){ | ||
Línea 170: | Línea 232: | ||
resultado.num=this.num*r.num; | resultado.num=this.num*r.num; | ||
return resultado; | return resultado; | ||
+ | /*Posible en una sóla instruccion | ||
+ | * return (this.den*r.den,this.num*r.num); | ||
+ | */ | ||
+ | |||
} | } | ||
public Racional dividir(Racional r){ | public Racional dividir(Racional r){ | ||
Línea 176: | Línea 242: | ||
resultado.den=this.den*r.num; | resultado.den=this.den*r.num; | ||
return resultado; | return resultado; | ||
+ | /*Posible en una sóla instruccion | ||
+ | return (this.num*r.den,this.den*r.num); | ||
+ | */ | ||
+ | |||
} | } | ||
+ | /** | ||
+ | * Modifica el objeto actual simplificando | ||
+ | */ | ||
public void simplificar(){ | public void simplificar(){ | ||
int n = mcd(); | int n = mcd(); | ||
Línea 183: | Línea 256: | ||
} | } | ||
− | + | /** | |
+ | * | ||
+ | * @return el máximo común divisor de num y den | ||
+ | */ | ||
private int mcd(){ | private int mcd(){ | ||
int mayor = this.num; | int mayor = this.num; | ||
Línea 207: | Línea 283: | ||
} | } | ||
− | |||
− | |||
+ | } | ||
</source> | </source> | ||
− | == | + | =Clase Principal= |
+ | *Revisar el concepto de static (lo trataremos con más detalle) | ||
<source lang=java> | <source lang=java> | ||
import java.util.Scanner; | import java.util.Scanner; | ||
Línea 220: | Línea 296: | ||
static Scanner leer = new Scanner(System.in); | static Scanner leer = new Scanner(System.in); | ||
static Racional r1 =null; | static Racional r1 =null; | ||
+ | /** | ||
+ | * | ||
+ | * @param operacion Es la operacion que se quiere realizar a/b op d/e | ||
+ | * operacion donde op una de las siguientes operaciones +,-,*,: | ||
+ | * @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 operación que se quiere realizar a/b op d/e | ||
+ | * operacion donde op una de las siguientes operaciones +,-,*,: | ||
+ | * @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()); | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
} | } | ||
− | public static void accion (int opcion){ | + | |
− | + | } | |
− | + | ||
+ | |||
+ | /** 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"); | case 1: System.out.println("Inserta el racional a/b"); | ||
num=leer.nextLine(); | num=leer.nextLine(); | ||
Línea 256: | Línea 399: | ||
break; | break; | ||
case 2: | case 2: | ||
− | if (r1==null) | + | if (r1==null) |
− | + | System.out.println("Primero inserta"); | |
else | else | ||
System.out.println("Racional = "+r1.toString()); | System.out.println("Racional = "+r1.toString()); | ||
Línea 278: | Línea 421: | ||
break; | break; | ||
case 5: | 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: | 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> | </source> |
Revisión de 09:37 5 abr 2012
Contenido
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
Clase Racional
- Revisar constructores sobrecargados
public class Racional { //Defino atributos private int num; private int den; //Definimos los constructor sobrecargados /** * A partir de la caden 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 "a/b" */ 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 simplificando */ 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 * operacion donde op una de las siguientes operaciones +,-,*,: * @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 operación que se quiere realizar a/b op d/e * operacion donde op una de las siguientes operaciones +,-,*,: * @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