Java Infijo a Posfijo
Bueno, ya conociendo el algoritmo, se puede hacer en Java:
class converpostultima{
public static void main (String args[])
{String expr = new String(”");
String exprpost = new String(”");
char ch;
int max;
System.out.print(”Dame la Expresion en Infijo: “);
expr =Leer.dato();
max=expr.length();
operapilaschar obj1 = new operapilaschar(max);
System.out.println();
System.out.println();
System.out.println(”La Expresion en Postfijo es :”);
obj1.push(’('); // inserta ‘(’ a la PILA
expr+=’)'; // inserta ‘)’ al final de Q
for (int i=0;i=precedencia(ch) && obj1.pila[obj1.tope]!=’('))
{
obj1.pop();
exprpost+=obj1.dret;
}
obj1.push(ch);
break;
case ‘)’: while (obj1.pila[obj1.tope] != ‘(’)
{
obj1.pop();
exprpost+=obj1.dret;
}
obj1.pop();
break;
default : exprpost+=ch;
}}
while (!(obj1.pila_Vacia(obj1.tope)))
{
obj1.pop();
if (obj1.dret!= ‘(’)
exprpost+=obj1.dret;
}
System.out.println(exprpost);
}public static int precedencia(char ch)
{
int aux = 0;
switch (ch)
{
case ‘^’ : aux = 4;
break;
case ‘*’ : case ‘/’ : aux = 3;
break;
case ‘+’ : case ‘-’ : aux = 2;
break;
case ‘(’ : aux = 1;
break;
}
return aux;
}
}
Cabe aclarar que el código no lo hice yo, si no que me lo pasaron para entender el algoritmo.
Conversión de unidades en Java
Este programa lo hice hace tiempo, aunque lo hice en un diagrama de flujo. Este programa hace conversiones de unidades, aunque es muy sencillo, tal vez le pueda ayudar a alguien.
Por cierto, no recuerdo bien si las medidas están correctas, por lo que si no están es fácil corregir.
import java.io.*;
import java.util.Scanner;
public class Medidas{
public static void main( String args[] ){
Scanner leer = new Scanner(System.in);int KM;
int CM;
int Y;
int op;
double RES;System.out.println( “Ingrese la operacion” );
System.out.println( “1.- Centimetos a pulgadas” );
System.out.println( “2.- Yardas a metros” );
System.out.println( “3.- Kilometros a millas” );
System.out.println( “\n” );
op = leer.nextInt();switch (op){
case 1:
System.out.println( “Centimetros a pulgadas” );
System.out.println( “Ingrese los centimetros” );
CM = leer.nextInt();
RES = CM * 2.3;
System.out.println( “El resultado es: “+RES+” pulgadas” );
break;
case 2:
System.out.println( “Yardas a Metros” );
System.out.println( “Ingrese el numero de Yardas” );
Y = leer.nextInt();
RES = Y * 0.914401829;
System.out.println( “El resultado es: “+RES+” metros” );
break;
case 3:
System.out.println( “Kilometros a Millas” );
System.out.println( “Ingrese el numero de Kilometros” );
KM = leer.nextInt();
RES = KM * 0.621;
System.out.println( “El resultado es: “+RES+” millas” );
break;
}
}
}
Pilas en Java
Bueno, voy a poner el código de un programa en Java que hace uso de pilas. En este programa se le ingresa una palabra (hasta las groserías funcionan…), y separa las letras y las imprime de una en una de abaja hacia arriba:
Ejemplo: Si se escribe la palabra JAVA.
La impresión sera:
A
V
A
J
Bueno, aquí esta el código:
import java.io.*;
import java.util.Scanner;
public class PilaCadena{
public static void main( String args[] ){
Scanner leer = new Scanner(System.in);
operapilaschar Obj = new operapilaschar();String cadena;
char ch;System.out.println( “Escribe texto:” );
cadena = leer.next();for( int i=0; i<cadena.length(); i++ ){
ch = cadena.charAt(i);
Obj.push(ch);
}for( int i=0; i<cadena.length(); i++ ){
Obj.pop();
System.out.println( Obj.dret );
}
}
}
Hace uso de los métodos de la siguiente clase:
class operapilaschar
{
public static char dret;
public static int max;
public static char pila[];
public static int tope = -1;
public operapilaschar()
{
max=20;
pila=new char [max];
}
public operapilaschar(int n)
{
max=n-1;
pila = new char [max];
}
public static boolean pila_Llena(int tope,int max)
{
boolean llena;
if (tope==max)
llena=true;
else
llena=false;
return llena;
}
public static boolean pila_Vacia(int tope)
{
boolean vacia;
if (tope == -1)
vacia=true;
else
vacia=false;
return vacia;
}
public static void push(char dato)
{
if(pila_Llena(tope,max))
System.out.println(”!Cuidado!, Desbordamiento!!!!!”);
else
{
tope++;
pila[tope]=dato;// pone el nuevo dato en la pila
}
}
public static void pop()
{
if (pila_Vacia(tope))
System.out.println(”!Cuidado!, Subdesbordamiento!!!!!”);
else {
dret=pila[tope];
tope–;
}// actualiza tope y se elimina elemento en el tope
}
public static boolean compara(int dret,int ch)
{
if (dret==’(’ && ch==’)’ || dret==’{’ && ch==’}’ || dret==’[' && ch==']‘)
return true;
else
return false;
}
public static void estado()
{
int i;
System.out.println(” El estado de la pila es : “);
System.out.println(” ————————–”);
for(i=0;i<=tope;i++)
{
System.out.println(”pila["+i+"] : “+pila[i]);
}
}
}
Usando archivos secuenciales en Java
Con este programa, se creara un archivo con registros de numero de matricula, nombre y pedirá 3 calificaciones para después calcular el promedio.
import java.io.*;
import java.util.Scanner;
public class Archivos{public static void main( String args[] )throws IOException{
Scanner leer = new Scanner(System.in);
DataOutputStream Archi = null;
int i;
int matricula=0;
String nombre=new String(”");
int calif1;
int calif2;
int calif3;
double promedio;try{
for (i=0; i<5; i++){
Archi = new DataOutputStream( new FileOutputStream(”../Archivo.dat”,true) );
System.out.println(”Escribe la matricula: “);
matricula = leer.nextInt();
System.out.println(”Escribe Nombre: “);
nombre = leer.next();
System.out.println(”Ingrese Calificacion 1: “);
calif1 = leer.nextInt();
System.out.println(”Ingrese Califiación 2″);
calif2 = leer.nextInt();
System.out.println(”Ingrese Calificacion 3″);
calif3 = leer.nextInt();Archi.writeInt(matricula);
Archi.writeUTF(nombre);
Archi.writeInt(calif1);
Archi.writeInt(calif2);
Archi.writeInt(calif3);
Archi.close();
}
}
catch(FileNotFoundException fnfe) {}
catch (IOException ioe) {}
}
}
Este otro mostrara lo que hay en el archivo:
import java.io.*;
public class LeerArchivos{public static void main( String args[] )throws IOException{
DataInputStream Archi = null;
int matricula=0;
String nombre=new String(”");
int calif1;
int calif2;
int calif3;
double promedio;try{
Archi = new DataInputStream( new FileInputStream(”../Archivo.dat”) );
while (true){
matricula = Archi.readInt();
System.out.println(”Matricula: “+matricula+” “);
nombre = Archi.readUTF();
System.out.println(”Nombre: “+nombre+” “);
calif1= Archi.readInt();
System.out.println(”Calificacion 1: “+calif1+” “);
calif2= Archi.readInt();
System.out.println(”Calificacion 2: “+calif2+” “);
calif3= Archi.readInt();
System.out.println(”Calificacion 3: “+calif3+” “);
System.out.println(’n');int suma = calif1 + calif2 + calif3;
promedio = suma/3;System.out.println(”El promedio es: “+promedio+”n”);
}
}catch(FileNotFoundException fnfe) {}
catch (IOException ioe) {}Archi.close();
}
}
Otro de métodos
En este programa pide que ingreses el nombre del trabajador, el puesto y lo que gana, después en otro método imprime los datos que se ingresaron, pero primero pregunta al usuario si los quiere imprimir.
import java.util.Scanner;
import java.io.*;
public class empleado{
public static void capturar(){
Scanner leer = new Scanner(System.in);
String nombre;
String puesto;
double sueldo;
System.out.println( “Ingrese el nombre del empleado” );
nombre = leer.next();
System.out.println( “Ingrese el puesto del trabajador” );
puesto = leer.next();
System.out.println( “Ingrese el sueldo” );
sueldo = leer.nextDouble();
desplegar(nombre, puesto, sueldo);
}
public static void desplegar(String nom, String puest, double suel){
Scanner teclado = new Scanner(System.in);
String preg;
System.out.println( “Desea imprimir la información? s/n” );
preg = teclado.next();
if( preg.equals(”S”) || preg.equals(”s”) ){
System.out.println( “El nombre del empleado es “+nom+” su puesto es “+puest+” y su sueldo es “+suel );
}else{}
}
public static void main( String args[] ){
capturar();
}
}
Uno de metodos en Java
Capturar el nombre y las 3 calificaciones en el programa principal (método main), calcular promedio en un segundo metodo, imprimir nombre y promedio en otro método.
import java.util.Scanner;
import java.io.*;
public class Calificaciones{
public static void main( String args[] )throws IOException{
Scanner leer = new Scanner(System.in);
String nombre;
double cal1, cal2, cal3;
System.out.println( “Ingrese nombre:” );
nombre = leer.next();
System.out.println( “Ingrese una calificación:” );
cal1 = leer.nextDouble();
System.out.println( “Ingrese otra calificación” );
cal2 = leer.nextDouble();
System.out.println( “Ingrese otra calificación” );
cal3 = leer.nextDouble();
metodo(nombre, cal1, cal2, cal3);
}
public static void metodo(String nom, double a, double b, double c){
double suma = a+b+c;
double prom = suma/3;
System.out.println( “El promedio de “+nom + “es: “+prom );
}
}
Suma de dos números
No me gusta Java por la gran cantidad de código que requiere para hacer tareas sencillas, pero ya que…
Aquí esta un pequeño programa que suma dos números enteros ingresados por teclado.
import java.io.*;
public class Suma {public static void main( String args[] ) throws IOException{
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
String entrada;
System.out.print(”Teclee un numero: “);
entrada = teclado.readLine();
int A=Integer.parseInt(entrada);System.out.print(”Teclee otro numero: “);
entrada= teclado.readLine();
int B=Integer.parseInt(entrada);int c = A+B;
System.out.println( “El resultado es:”+c );
}
}
Cuadrado Mágico
Aquí va otro que usa interface y herencia.
Se supone que las reglas son:
El 1 siempre va en la primera fila en el medio, el siguiente numero seria arriba a la izquierda, pero si ya esta ocupado se coloca debajo del numero anterior.
Primero la interface
public interface IJuego {
public abstract void calculaposicion();
public abstract void imprime();
}
Luego la clase donde se desarrolla el juego (que se que se puede hacer mas sencillo, pero así lo querían…).
public class Juego implements IJuego {
public void calculaposicion() {
int tabla[][] = new int[3][3];
tabla[0][1]=1;
if (tabla[2][0]==0)
{
tabla[2][0]=2;
}
else if (tabla[2][0]!=0)
{
tabla[1][1]=2;
}
if (tabla[1][2]==0)
{
tabla[1][2]=3;
}
else if (tabla[1][2]!=0)
{
tabla[0][0]=3;
}
if (tabla[0][1]==0)
{
tabla[0][1]=4;
}
else if (tabla[0][1]!=0)
{
tabla[2][2]=4;
}
if (tabla[1][1]==0)
{
tabla[1][1]=5;
}
else if (tabla[1][1]!=0)
{
tabla[0][2]=5;
}
if (tabla[0][0]==0)
{
tabla[0][0]=6;
}
else if (tabla[0][0]!=0)
{
tabla[2][1]=6;
}
if (tabla[2][2]==0)
{
tabla[2][2]=7;
}
else if (tabla[2][2]!=0)
{
tabla[1][0]=7;
}
if (tabla[0][2]==0)
{
tabla[0][2]=8;
}
else if (tabla[0][2]!=0)
{
tabla[2][2]=8;
}
if (tabla[2][1]==0)
{
tabla[2][1]=9;
}
else if (tabla[2][1]!=0)
{
tabla[1][2]=9;
}for ( int ab = 0; ab < tabla.length; ab++ ){
for ( int cd = 0; cd < tabla[ab].length; cd++ ){
System.out.print( tabla[ab][cd]+”\t” );
}
System.out.println( “” );
}
}public void imprime(){
System.out.print(”");
}public static void main( String args[] ){
}
}
Al final utilizando la herencia para imprimir tanto el tablero como el resultado del juego.
public class Tablero extends Juego {
public static void main( String args[] ){
String dibujar[][] = new String [5][3];
dibujar[0][0] = new String( “###” );
dibujar[0][1] = new String( “###” );
dibujar[0][2] = new String( “####” );dibujar[1][0] = new String( “#__#” );
dibujar[1][1] = new String( “__” );
dibujar[1][2] = new String( “#__#” );dibujar[2][0] = new String( “#__#” );
dibujar[2][1] = new String( “__” );
dibujar[2][2] = new String( “#__#” );dibujar[3][0] = new String( “# #” );
dibujar[3][1] = new String( ” ” );
dibujar[3][2] = new String( “# #” );dibujar[4][0] = new String( “###” );
dibujar[4][1] = new String( “###” );
dibujar[4][2] = new String( “####” );for (int i=0; i < dibujar.length; i++) {
for (int j=0; j < dibujar[i].length; j++) {
System.out.print(dibujar[i][j]);
}
System.out.println(”");
}Juego j = new Juego();
j.calculaposicion();
}
}
El resultado es:
##########
#__#__#__#
#__#__#__#
# # # #
#########6 1 8
7 5 3
2 9 4



