Diferencia entre revisiones de «Usuario:ManuelRomero/practica 3»

De WikiEducator
Saltar a: navegación, buscar
 
(16 revisiones intermedias por el mismo usuario no mostrado)
Línea 66: Línea 66:
 
   System.out.println(n1 +" "+n2+" "+n3);
 
   System.out.println(n1 +" "+n2+" "+n3);
 
  }//End main
 
  }//End main
 +
}//End la clase
 +
</source>
 +
==Ordena 3 números ==
 +
Otra forma de hacerlo (hay muhcas más)
 +
En este caso en cuanto tenemos los números ordenados lo visualizamos
 +
no he puesto llaves dentro de los if-else, ya que solo hay una instrucción en cada uno de ellos
 +
<source lang=java>
 +
import java.util.Scanner;
 +
 +
public class Ordena4 {
 +
  public static void main(String []lista){
 +
    Scanner leer = new Scanner(System.in);
 +
    int n1,n2,n3;
 +
    //En lugar de sacar tres mensajes sólo uno y escribilos los tres números separados por espacion
 +
    System.out.println("Inserta los números a ordenar separados por espacios, al final introoo");
 +
    n1 = leer.nextInt();
 +
    n2 = leer.nextInt();
 +
    n3 = leer.nextInt();
 +
    //Vamos a dejar en n1 el más grande, en n2 el mediano y en n3 el pequeño
 +
    //Ahora vamos visualizando según vayamos encontrando los casos
 +
    //Tenemos 6 casos posibles de ordenación (factorial del número de elementos a ordenar)
 +
    System.out.println("n1= "+n1 +" n2=  "+n2+" n3=  "+n3);
 +
    if (n1> n2){
 +
if(n2>n3)
 +
    System.out.println(n3 +" "+n2+" "+n1);
 +
else
 +
  if (n1>n3)
 +
      System.out.println(n2 +" "+n3+" "+n1);
 +
          else
 +
      System.out.println(n2 +" "+n1+" "+n3);
 +
    else
 +
if(n1>n3)
 +
  System.out.println(n3 +" "+n1+" "+n2);
 +
        else
 +
          if (n2>n3)
 +
      System.out.println(n1 +" "+n3+" "+n2);
 +
      else
 +
      System.out.println(n1 +" "+n2+" "+n3);
 +
  }//End main
 
}//End la clase
 
}//End la clase
 
</source>
 
</source>
Línea 88: Línea 127:
 
</source>
 
</source>
 
==Tabla de multiplicar==
 
==Tabla de multiplicar==
Te pide un número y visualizas la tabla de multiplicar
+
*Te pide un número y visualizas la tabla de multiplicar
  class Multiplica{
+
*Iteramos hasta que inserten 0 como tabla a visualizar
  }
+
*Observar que se puede concatenar como un string el resultado de una operacion aritmética
 +
  System.out.println(tabla+"*"+i+"="+(tabla*i));
 +
  '''tabla*i''' es una operacion, y se concatena el resultado
 +
<source lang=java>
 +
import java.util.Scanner;
 +
public class Multiplicar {
 +
  public static void main(String []l){
 +
    int tabla;
 +
    Scanner leer = new Scanner(System.in);
 +
    System.out.println("Inserta un número para obtener la tabla (0 terminar)");
 +
    tabla=leer.nextInt();
 +
    while (tabla!=0){
 +
for (int i=1;i<=10;i++)
 +
    System.out.println(tabla+"*"+i+"="+(tabla*i));
 +
System.out.println("Inserta un número para obtener la tabla (0 terminar)");
 +
tabla=leer.nextInt();
 +
    }//end while
 +
}//End main
 +
}//End clase
 +
</source>
 +
 
 
==Grados==
 
==Grados==
 
Un programa que me pida grados centígrados y los viualiza en Farhenheit y en Kelving. la equivalencia es la siguiente
 
Un programa que me pida grados centígrados y los viualiza en Farhenheit y en Kelving. la equivalencia es la siguiente
Bucles
+
:centígrados  0  100
  class Grados{
+
:Fahrenheit 32  212
}
+
:Kelvin    273 373
 +
 
 +
<source lang=java>
 +
import java.util.Scanner;
 +
public class Grados {
 +
  public static void main(String[] args) {
 +
    Scanner leer = new Scanner(System.in);
 +
    float centigrados;
 +
    System.out.println("Dame grados Centígrados");
 +
    centigrados= leer.nextFloat();
 +
    //Informo en Fahrenheit de los grados centrígrados
 +
    //C-F (180/100 y +32) F-C ( -32 y 100/180)
 +
    System.out.println(centigrados+" C = "+(centigrados*1.8+32)+" Fahrenheit y "+(centigrados+273)+" Kelvin" );
 +
}
 +
}
 +
</source>
  
 
==cuenta pares e impares==
 
==cuenta pares e impares==
Introducimos 10 números y me dicen cuantos hay pares y cuantos impares
+
*Introducimos 10 números y me dicen cuantos hay pares y cuantos impares
class CuentaPares{
+
*Solo utilizamos contamos los pares.
  }
+
*El número de impares lo obtenemos como 10-numero de pares
 +
<source lang=java>
 +
import java.util.Scanner;
 +
public class CuentaPares {
 +
  public static void main(String []l){
 +
Scanner leer = new Scanner(System.in);
 +
int numero;
 +
int cuentaPares=0;
 +
for (int i=0; i<10;i++){
 +
    System.out.println("Inserta un número ");
 +
    numero = leer.nextInt();
 +
    if (numero%2==0)
 +
cuentaPares++;
 +
    }//End for
 +
System.out.println("Has insertado "+cuentaPares+" numeros pares  y "+(10-cuentaPares)+" numeros impares");
 +
  }//End main
 +
}//End clase
 +
</source>
  
 
==dígitos==
 
==dígitos==
 
Dado un número entero, que me diga cuantos dígitos tiene (cuantas veces es divisible por 10…
 
Dado un número entero, que me diga cuantos dígitos tiene (cuantas veces es divisible por 10…
class Digitos{
+
<source lang=java>
 +
import java.util.Scanner;
 +
public class Digitos {
 +
public static void main(String[] args) {
 +
Scanner leer = new Scanner(System.in);
 +
int n, aux;
 +
int digitos=1;
 +
n=leer.nextInt();
 +
aux=n;
 +
while ((aux/10)!=0){
 +
aux=aux/10;
 +
digitos++;
 +
}
 +
System.out.println("El número "+aux+" tiene "+digitos+" dígitos");
 
  }
 
  }
 +
}
 +
</source>
  
 
==medias==
 
==medias==
 
Que me pida números hasta que introduzca el 0 y me calcule la media, el mayor y el menor de la lista de números insertados
 
Que me pida números hasta que introduzca el 0 y me calcule la media, el mayor y el menor de la lista de números insertados
class Medias{
+
import java.util.Scanner;
  }
+
<source lang=java>
 +
public class Medias {
 +
public static void main(String []a){
 +
  Scanner leer = new Scanner(System.in);
 +
int n,suma,min,max,cuenta;
 +
//inicializo variables
 +
cuenta=0;
 +
suma=0;
 +
System.out.println("Inserta un número");
 +
n=leer.nextInt();
 +
//El primer  número es el menor y el mayor
 +
min = n;
 +
max =n;
 +
//Empiezo el bucle
 +
while (n!=0){
 +
      if (min>n){
 +
  int aux = min;
 +
  min = n;
 +
  n=aux;
 +
      }
 +
      if (max<n){
 +
  int aux = max;
 +
  max = n;
 +
  n=aux;
 +
      }
 +
      suma=suma+n;
 +
      cuenta++;
 +
      System.out.println("Inserta un número");
 +
      n=leer.nextInt();
 +
}//End while
 +
System.out.println("Estadísticas de  "+cuenta+" numeros.\n Media: "+((float)suma/cuenta)+"\tMaximo "+max+"\tMínimo "+min);
 +
}//End main
 +
}//End clase
 +
</source>
 +
 
 
==Valida fecha==
 
==Valida fecha==
 
Que le introduzca una fecha (tres enteros: dia, mes y año) y me indique si la fecha es o no correcta. En caso de que no sea correcta que me diga por qué motivo no lo es
 
Que le introduzca una fecha (tres enteros: dia, mes y año) y me indique si la fecha es o no correcta. En caso de que no sea correcta que me diga por qué motivo no lo es
class ValidaFecha{
+
No se ha optimizado muhco el código
 +
*Se recomiendo retocar este código para dejarlo mas algorítmico
 +
*Por comodidad se hace un System.exit(0); para abortar el programa
 +
*mejor salir de forma natural al final
 +
 
 +
<source lang = java>
 +
import java.util.Scanner;
 +
 
 +
public class ValidaFechas {
 +
public static boolean bisiesto (int year){
 +
if ((year %4==0) && ((year %100!=0 )|| (year %400 ==0)))
 +
  return true;
 +
else
 +
return false;
 +
}
 +
public static void main(String []l){
 +
Scanner leer = new Scanner(System.in);
 +
int dia, mes, year;
 +
System.out.println("Inserta fecha dd mm aaaa");
 +
dia = leer.nextInt();
 +
mes = leer.nextInt();
 +
year = leer.nextInt();
 +
if ((year <1800 )|| (year > 2100)){
 +
    System.out.println("Error en año "+year+ "dato no correcto. Válidos (1900-2100)");
 +
    System.exit(0);
 +
}
 +
switch (mes){
 +
case 1:
 +
case 3:
 +
case 5:
 +
case 7:
 +
case 8:
 +
case 10:
 +
case 12://Meses de 31 días
 +
    if ((dia<1)||(dia > 32)){
 +
    System.out.println("Error en día "+dia+" dato no correcto. Válidos 1-31 para este mes "+mes);
 +
    System.exit(0);
 +
    }
 +
    else
 +
    System.out.println("Fecha ok "+dia+"/"+mes+"/"+year);
 +
        break; 
 +
   
 +
case 4:
 +
case 6:
 +
case 9:
 +
case 11://Meses de 30 días
 +
    if ((dia<1)||(dia > 31)){
 +
    System.out.println("Error en día "+dia+" dato no correcto. Válidos 1-30 para este mes "+mes);
 +
    System.exit(0);
 +
    }
 +
    else
 +
    System.out.println("Fecha ok "+dia+"/"+mes+"/"+year);
 +
      break;
 +
case 2:
 +
      int d;
 +
      if (bisiesto(year))
 +
  d = 29;
 +
      else
 +
  d=28;
 +
      if ((dia<1)||(dia >d )){
 +
  System.out.println("Error en día "+dia+" dato no correcto");
 +
    System.exit(0);
 +
    }
 +
    else
 +
System.out.println("Fecha ok  en año bisiesto "+dia+"/"+mes+"/"+year);
 +
    break;
 +
default:
 +
System.out.println("Error en mes "+mes+" no correcto válidos 1-12");
 +
 
 +
}//End swtich
 
  }
 
  }
 +
}
 +
</source>
 +
 
==primo==
 
==primo==
 
Que introduzca un número y me diga si es o no primo
 
Que introduzca un número y me diga si es o no primo
  class Primo{
+
<source lang = java>
  }
+
import java.util.Scanner;
 +
public class Primo {
 +
  public static void main(String []a){
 +
  int num,factor;
 +
  boolean primo = true;
 +
  System.out.println("Inserta un número ");
 +
  Scanner leer = new Scanner(System.in);
 +
  num=leer.nextInt();
 +
  factor = num-1;
 +
  //Voy dividiendo el número cada vez por un número menor
 +
  //hasta que vea que es divisible
 +
  //o hasta que llege a 2
 +
  do{
 +
if (num%factor==0)
 +
primo= false;
 +
factor--;
 +
  }while ((primo==true)&(factor>1));
 +
 +
  if (primo)
 +
  System.out.println("El número "+num+ " es primo");
 +
  else
 +
  System.out.println("El número "+num +" no es primo. Al menos divisible por "+(factor+1));
 +
}//End main
 +
}//End clase principal
 +
</source>
  
 
==Ecuación de 2º grado==
 
==Ecuación de 2º grado==
Línea 131: Línea 367:
 
==Factores==
 
==Factores==
 
Descomponer un número en sus factores p.e 56 =2*2*2*7
 
Descomponer un número en sus factores p.e 56 =2*2*2*7
class Factores{
+
<source lang=java>
  }
+
import java.util.Scanner;
 +
public class Factores {
 +
  public static void main(String []a){
 +
  int num,factor;
 +
  boolean primo = true;
 +
  System.out.println("Inserta un número ");
 +
  Scanner leer = new Scanner(System.in);
 +
  num=leer.nextInt();
 +
  factor = 2;
 +
  //Voy dividiendo el número cada vez por un número menor
 +
  //hasta que vea que es divisible
 +
  //o hasta que llege a 2
 +
  System.out.print(num +"=");
 +
  do{
 +
    while (num%factor==0){
 +
            num=num/factor;
 +
    System.out.print(factor+" * ");
 +
    primo = false;
 +
    }
 +
    factor++;
 +
  }while (factor<=num);
 +
 +
  if (primo)
 +
  System.out.println(num+ " * 1");//Si es primo la descomposición 7 = 7*1
 +
  else
 +
  System.out.print("1");//Para que quede bonito y no quede un signo de * al final :)
 +
}//End main
 +
}//End clase principal
 +
</source>
  
 
==Nomina==
 
==Nomina==
Línea 156: Línea 420:
 
==Arrays nombres==
 
==Arrays nombres==
 
Inserto hasta diez nombres  y los voy colocando de forma ordenada. Al final se visualizan los nombres ordenados
 
Inserto hasta diez nombres  y los voy colocando de forma ordenada. Al final se visualizan los nombres ordenados
class Nombre{
+
 
}
+
<source lang=java>
 +
import java.util.Scanner;
 +
public class ArrayOrdenado {
 +
 
 +
// Defino la función buscarPosción que me dice la posicion
 +
//que le corresponde a un nombre n en un array de nombres l donde tengo longitud nombres
 +
  public static int buscarPosicion(String n, String[] l, int longitud){
 +
boolean encontrado=false;
 +
int pos =0;
 +
while((encontrado==false) && (pos <longitud))
 +
        if (l[pos].compareTo(n)>0)
 +
encontrado=true;
 +
        else
 +
pos++;
 +
  return pos;
 +
}//Fin de buscarPosición
 +
 +
public static void main (String []lista){
 +
        String[] listaNombres = new String[10];
 +
Scanner leer = new Scanner(System.in);
 +
String nombre;
 +
 +
//Voy a pedir 10 nombres y cada nombre lo coloco ordenadamente en el vector
 +
        //Tener cuidado que diferencia mayúsculas de minúsculas
 +
for (int i=0; i<10;i++){
 +
    System.out.println("Inserta un nombre");
 +
      nombre=leer.next();
 +
    int pos = buscarPosicion(nombre, listaNombres,i);
 +
            //Visualiza es simplemente para ir viendo las cosas según la va haciendo, se puede quitar
 +
    visualiza (listaNombres,nombre,i);
 +
            //Una vez que he encontrado la posición del nombre en el vector, lo coloco
 +
            //Y muevo todos los nombres una posición ayudado por un auxiliar
 +
      for (int a = pos; a<=i; a++){
 +
String aux = listaNombres[a];
 +
listaNombres[a]=nombre;
 +
nombre = aux;
 +
    }
 +
}//End for
 +
 
 +
//Ahora visualizo el vector ordenado
 +
System.out.println("Vector ordenado");
 +
for (int i=0; i<10;i++){
 +
System.out.println(listaNombres[i]);
 +
}
 +
}//End main
 +
public static void visualiza(String[]l,String n, int i){
 +
System.out.println("Buscando "+n+" en el vector ");
 +
for (int a = 0; a<i;a++)
 +
    System.out.print(l[a]+"-");
 +
}//End visualiza
 +
}//End de la clase
 +
</source>
  
 
==Adivina numero==
 
==Adivina numero==
Línea 172: Línea 487:
 
             Random rnd = new Random();
 
             Random rnd = new Random();
 
             for (int i=0;i<10;i++){
 
             for (int i=0;i<10;i++){
             a = (int)(rnd.nextDouble() * 100);
+
             a = 1+(int)(rnd.nextDouble() * 100);
 
             System.out.println("Valor de a "+a);
 
             System.out.println("Valor de a "+a);
 
             }
 
             }
 
       }
 
       }
 
}
 
}
 +
</source>
 +
 +
Un posible código del programa
 +
<source lang=java>
 +
import java.util.Random;
 +
import java.util.Scanner;
 +
public class Adivina {
 +
      public static void main(String arg[]) {
 +
          //Defino variables 
 +
      int numeroAdivinar;
 +
          int intentos=0;
 +
          int numeroUsuario;
 +
          Scanner leer = new Scanner(System.in);
 +
 +
          //Inicializo la semilla;
 +
          Random rnd = new Random();
 +
 +
          System.out.println("Vamos a ver si adivinas un número entre 1 y 1000");
 +
          System.out.println("Tienes 10 intentos");
 +
           
 +
          //Genero el número aleatorio emtre 1 y 10
 +
          numeroAdivinar = 1+(int)(rnd.nextDouble() * 100);
 +
          //Iteraciones hasta que encuentre el número o agote intentos
 +
          do{
 +
          System.out.println("Te quedan "+(10-intentos)+" intentos  de los 10 iniciales para adivinar el número ");
 +
    numeroUsuario=leer.nextInt();
 +
    if (numeroUsuario<numeroAdivinar)
 +
    System.out.println("El número es mayor");
 +
    if (numeroUsuario>numeroAdivinar)
 +
        System.out.println("El número es menor");
 +
    intentos++;
 +
  }while ((numeroUsuario!=numeroAdivinar) &&(intentos<10));
 +
           
 +
        //Informo del resultado
 +
        if (numeroUsuario==numeroAdivinar)
 +
          System.out.println("Has adivinado el número en "+ intentos+" intentos");
 +
else
 +
    System.out.println("No lo Has adivinado.  el número era "+ numeroAdivinar);
 +
       
 +
  }//end main
 +
}//End clase
 
</source>
 
</source>
  
Línea 183: Línea 539:
 
” ¡@#%$_|?¿”
 
” ¡@#%$_|?¿”
 
La clave generada que la visualice por patalla usando showMessageBox, después aparecerá una patalla para cambiarla, me pedirá que la introduzca 2 veces y luego me permitirá introducir la nueva, al final me informará de clave cambiada correctamente.
 
La clave generada que la visualice por patalla usando showMessageBox, después aparecerá una patalla para cambiarla, me pedirá que la introduzca 2 veces y luego me permitirá introducir la nueva, al final me informará de clave cambiada correctamente.
class GenPasswd{
+
 
  }
+
<source lang=java>
 +
import java.util.Random;
 +
 
 +
public class Password {
 +
    //Atributos de la clase = Variables globales para todos los       
 +
    //métodos
 +
    static Random generador = new Random();
 +
 +
/*
 +
  * Rellena el vector de password con 'num' números
 +
* a partir de la posicion posIni
 +
* @param p Array de caracteres que contiene la password
 +
* @param num numero de caracteres letraselegidos al hazar
 +
*            de un vector de caracteres especiales 
 +
* @param posIni posición a partir de la cual relleno el vector
 +
*/
 +
public static void rellenaNumeros(char []p,int num, int posIni){
 +
for (int i=posIni;i<(num+posIni); i++){
 +
      int n = generador.nextInt(10);
 +
    p[i]=Character.forDigit(n,10);
 +
}
 +
}//End rellenaNumeros
 +
 +
/*
 +
* Rellena el vector de password con 'num' letras
 +
* a partir de la posicion posIni
 +
* @param p Array de caracteres que contiene la password
 +
* @param num numero de caracteres letraselegidos al hazar
 +
*            de un vector de caracteres especiales 
 +
* @param posIni posición a partir de la cual relleno el vector
 +
*/
 +
public static void rellenaLetras(char []p,int num, int posIni){
 +
for(int i=posIni;i<(num+posIni);i++){
 +
    int n = generador.nextInt(52);
 +
  if (n<26) //letras mayúsculas A..Z
 +
      p[i]=(char)((int)'A'+n);
 +
  else
 +
      p[i]=(char)((int)'a'+(n-26));
 +
}
 +
}//End rellenaLetras
 +
 
 +
/*
 +
* Rellena el vector de password con 'num' caracteres especiales
 +
* a partir de la posicion posIni
 +
* @param p Array de caracteres que contiene la password
 +
* @param num numero de caractres especiales elegidos al hazar
 +
*            de un vector de caracteres especiales 
 +
* @param posIni posición a partir de la cual relleno el vector
 +
*/
 +
public static void rellenaEspeciales(char []p,int num, int posIni){
 +
  char[]esp= {'!','$','@','?','¿','%','*','Ç','-'};
 +
//Tenemos 9 caracteres. generamos un valor 0.8 y tomo ese caracter
 +
  for(int i=posIni;i<(num+posIni);i++){
 +
      int n = generador.nextInt(9);
 +
      p[i]= esp[n];
 +
  }
 +
}//End rellenaEspeciales
 +
 +
//Definimos un vector de caracteres
 +
public static void main (String []l){ 
 +
int numLetras;
 +
int numNumeros;
 +
int numEspeciales;
 +
char []pass = new char[8];
 +
 +
//Generamos número de caracteres de cada tipo
 +
numNumeros=4+generador.nextInt(3);//(valor entre 4 y 6)
 +
if (numNumeros == 6)
 +
  numLetras = 2;
 +
else
 +
  numLetras =2+generador.nextInt(2);//(valor entre 2 y 3)
 +
numEspeciales =8-(numLetras+numNumeros);
 +
 
 +
rellenaNumeros(pass,numNumeros,0);
 +
rellenaLetras(pass,numLetras,numNumeros);
 +
rellenaEspeciales(pass,numEspeciales,numNumeros+numLetras);
 +
 
 +
//Visualizo el resultado
 +
System.out.print("Password: ");
 +
for (int i=0; i<8;i++){
 +
    System.out.print(pass[i]);
 +
}
 +
  }//Fin del main
 +
}//Fin de la clase
 +
 
 +
 
 +
</source>
  
 
==Clases==
 
==Clases==
Línea 194: Línea 636:
 
  calculo.division() 4/5=0,80
 
  calculo.division() 4/5=0,80
 
  calculo.multiplica  4*5=20
 
  calculo.multiplica  4*5=20
   
+
  <source lang=java>
class Calculadora{
+
import java.util.Scanner;
 +
public class UsoOrdenar {
 +
public static void main(String []a){
 +
Calculadora c = new Calculadora ();
 +
boolean seguir = true;
 +
while (seguir == true){
 +
System.out.println("Dame dos numeros");
 +
c.setNum1(leer.nextInt());
 +
c.setNum2(leer.nextInt());
  
}
+
System.out.println(c.getNum1()+"+"+c.getNum2+"="+c.sumar());
 +
System.out.println(c.getNum1()+"-"+c.getNum2+"="+c.restar());
 +
System.out.println(c.getNum1()+"*"+c.getNum2+"="+c.multiplicar());
 +
System.out.println(c.getNum1()+"/"+c.getNum2+"="+c.dividir());
 +
System.out.println("Seguir");
 +
seguir = leer.nextBoolean();
 +
 +
 +
}
 +
}
 +
 +
}
  
 +
</source>
 
==Cuenta corriente==
 
==Cuenta corriente==
 
Realiza una clase llamada  
 
Realiza una clase llamada  

Última revisión de 00:01 9 feb 2013






Icon reflection.gif

Reflexión

  1. Realízalos de forma tranquila y cómoda, son sencillos
  2. aprovéchalos para afianzar conceptos.
  3. Consulta cualquier duda y puedes proponer alguna modificación e intentar realizarla.



Estrucutras secuenciales , condicionales, bucles

Ordernar1

Un programa que me pida dos números y me los visualice ordenados

 import java.util.Scanner;
 class Ordenar1{
   public static void main(String []lista){
     Scanner leer = new Scanner(System.in);
     int n1,n2;
     System.out.println("Inserta dos números a ordenar");
     n1 = leer.nextInt();
     n2 = leer.nextInt();
     if (n1> n2)
        System.out.println(n1 +" "+n2);
     else
        System.out.println(n2 +" "+n1);
   }//End main
 }//End Odenar1

Ordenar2.java

Qué pida tres números y visualice ordenados

import java.util.Scanner;
 
public class Ordena3{
 public static void main(String []lista){
   Scanner leer = new Scanner(System.in);
   int n1,n2,n3;
 //En lugar de sacar tres mensajes sólo uno 
 //y escribilos los tres números separados por espacion
  System.out.println("Inserta los números a ordenar separados por espacios, al final intro");
 n1 = leer.nextInt();
 n2 = leer.nextInt();
 n3 = leer.nextInt();
 //Vamos a dejar en n1 el más grande, en n2 el mediano y en n3 el pequeño
 
 //ahora comparamos n2 y n1 y luego n3 y n1, y así en n1 tenemos seguro el mayor
 if (n2> n1){
    int a=n1;
    n1=n2;
    n2=a;
 }
 
 if (n3>n1){   
    int a=n1;
    n1=n3;
    n3=a;
 }
 
 //Ahora que tenemos en n1 el mayor dejamos en n2 el mediano
 if  (n3>n2){
     int a=n2;
     n2=n3;
     n3=a;
 }
 
  System.out.println(n1 +" "+n2+" "+n3);
 }//End main
}//End la clase

Ordena 3 números

Otra forma de hacerlo (hay muhcas más) En este caso en cuanto tenemos los números ordenados lo visualizamos no he puesto llaves dentro de los if-else, ya que solo hay una instrucción en cada uno de ellos

import java.util.Scanner;
 
public class Ordena4 {
  public static void main(String []lista){
     Scanner leer = new Scanner(System.in);
     int n1,n2,n3;
     //En lugar de sacar tres mensajes sólo uno y escribilos los tres números separados por espacion
     System.out.println("Inserta los números a ordenar separados por espacios, al final introoo");
     n1 = leer.nextInt();
     n2 = leer.nextInt();
     n3 = leer.nextInt();
     //Vamos a dejar en n1 el más grande, en n2 el mediano y en n3 el pequeño
     //Ahora vamos visualizando según vayamos encontrando los casos
     //Tenemos 6 casos posibles de ordenación (factorial del número de elementos a ordenar)
     System.out.println("n1= "+n1 +" n2=  "+n2+" n3=  "+n3);
     if (n1> n2){
 	if(n2>n3)
   	   System.out.println(n3 +" "+n2+" "+n1);
	else
	   if (n1>n3)
	      System.out.println(n2 +" "+n3+" "+n1);
           else
	      System.out.println(n2 +" "+n1+" "+n3);
    else
	if(n1>n3)
	   System.out.println(n3 +" "+n1+" "+n2);
        else
           if (n2>n3)
	      System.out.println(n1 +" "+n3+" "+n2);
    	   else
	      System.out.println(n1 +" "+n2+" "+n3);
   }//End main
}//End la clase

OrdenarNombre

Que me pida dos nombres y los visualice ordenados

import java.util.Scanner;
public class Nombres {
	public static void main(String[] args) {
		String n1,n2;
		Scanner l1=new Scanner(System.in);
		System.out.println("Inserta un nombre");
		n1=l1.nextLine();
		System.out.println("Inserta otro nombre");
		n2=l1.nextLine();
		if (n1.compareTo(n2)<0)
			System.out.println(n1+" - "+n2);
		else
			System.out.println(n2+" - "+n1);
	}
}

Tabla de multiplicar

  • Te pide un número y visualizas la tabla de multiplicar
  • Iteramos hasta que inserten 0 como tabla a visualizar
  • Observar que se puede concatenar como un string el resultado de una operacion aritmética
 System.out.println(tabla+"*"+i+"="+(tabla*i));
tabla*i es una operacion, y se concatena el resultado
import java.util.Scanner;
public class Multiplicar {
 public static void main(String []l){
    int tabla;
    Scanner leer = new Scanner(System.in);
    System.out.println("Inserta un número para obtener la tabla (0 terminar)");
    tabla=leer.nextInt();
    while (tabla!=0){
	for (int i=1;i<=10;i++)
	    System.out.println(tabla+"*"+i+"="+(tabla*i));
	System.out.println("Inserta un número para obtener la tabla (0 terminar)");
	tabla=leer.nextInt();
    }//end while
 }//End main
}//End clase

Grados

Un programa que me pida grados centígrados y los viualiza en Farhenheit y en Kelving. la equivalencia es la siguiente

centígrados 0 100
Fahrenheit 32 212
Kelvin 273 373
import java.util.Scanner;
public class Grados {
  public static void main(String[] args) {
    Scanner leer = new Scanner(System.in);
    float centigrados;
    System.out.println("Dame grados Centígrados");
    centigrados= leer.nextFloat();
    //Informo en Fahrenheit de los grados centrígrados
    //C-F (180/100 y +32) F-C ( -32 y 100/180)
    System.out.println(centigrados+" C = "+(centigrados*1.8+32)+" Fahrenheit y "+(centigrados+273)+" Kelvin" );
	}
}

cuenta pares e impares

  • Introducimos 10 números y me dicen cuantos hay pares y cuantos impares
  • Solo utilizamos contamos los pares.
  • El número de impares lo obtenemos como 10-numero de pares
import java.util.Scanner;
public class CuentaPares {
  public static void main(String []l){
	Scanner leer = new Scanner(System.in);
	int numero;
	int cuentaPares=0;
	for (int i=0; i<10;i++){
	    System.out.println("Inserta un número ");
	    numero = leer.nextInt();
	    if (numero%2==0)
	 	cuentaPares++;
	    }//End for
	System.out.println("Has insertado "+cuentaPares+" numeros pares  y "+(10-cuentaPares)+" numeros impares");
 }//End main
}//End clase

dígitos

Dado un número entero, que me diga cuantos dígitos tiene (cuantas veces es divisible por 10…

import java.util.Scanner;
public class Digitos {
 public static void main(String[] args) {
	Scanner leer = new Scanner(System.in);
	int n, aux;
	int digitos=1;
	n=leer.nextInt();
	aux=n;
	while ((aux/10)!=0){
		aux=aux/10;
		digitos++;
	}
	System.out.println("El número "+aux+" tiene "+digitos+" dígitos");
 }
}

medias

Que me pida números hasta que introduzca el 0 y me calcule la media, el mayor y el menor de la lista de números insertados import java.util.Scanner;

public class Medias {
public static void main(String []a){
 Scanner leer = new Scanner(System.in);
 int n,suma,min,max,cuenta;
 //inicializo variables
 cuenta=0;	
 suma=0;
 System.out.println("Inserta un número");
 n=leer.nextInt();
 //El primer  número es el menor y el mayor
 min = n;
 max =n;
//Empiezo el bucle
 while (n!=0){
       if (min>n){
	  int aux = min;
	  min = n;
	  n=aux;
       }
       if (max<n){
	  int aux = max;
	  max = n;
	  n=aux;
       }
       suma=suma+n;
       cuenta++;
       System.out.println("Inserta un número");
       n=leer.nextInt();
 }//End while
 System.out.println("Estadísticas de  "+cuenta+" numeros.\n Media: "+((float)suma/cuenta)+"\tMaximo "+max+"\tMínimo "+min);
}//End main
}//End clase

Valida fecha

Que le introduzca una fecha (tres enteros: dia, mes y año) y me indique si la fecha es o no correcta. En caso de que no sea correcta que me diga por qué motivo no lo es No se ha optimizado muhco el código

  • Se recomiendo retocar este código para dejarlo mas algorítmico
  • Por comodidad se hace un System.exit(0); para abortar el programa
  • mejor salir de forma natural al final
import java.util.Scanner;
 
public class ValidaFechas {
 public static boolean bisiesto (int year){
	if ((year %4==0) && ((year %100!=0 )|| (year %400 ==0)))
	  return true;
	else
	 return false;
	}
 public static void main(String []l){
	 Scanner leer = new Scanner(System.in);
	 int dia, mes, year;
	 System.out.println("Inserta fecha dd mm aaaa");
	 dia = leer.nextInt();
	 mes = leer.nextInt();
	 year = leer.nextInt();
	 if ((year <1800 )|| (year > 2100)){
	    System.out.println("Error en año "+year+ "dato no correcto. Válidos (1900-2100)");
	    System.exit(0);
	 }
	 switch (mes){
	 case 1:
	 case 3:
	 case 5:
	 case 7:
	 case 8:
	 case 10:
	 case 12://Meses de 31 días
	     if ((dia<1)||(dia > 32)){
	    	 System.out.println("Error en día "+dia+" dato no correcto. Válidos 1-31 para este mes "+mes);
	    	 System.exit(0);
	     }
	     else
	    	 System.out.println("Fecha ok "+dia+"/"+mes+"/"+year);
	         break;   
 
	 case 4:
	 case 6:
	 case 9:
	 case 11://Meses de 30 días
	     if ((dia<1)||(dia > 31)){
	    	 System.out.println("Error en día "+dia+" dato no correcto. Válidos 1-30 para este mes "+mes);
	     	 System.exit(0);
	     }
	     else
	    	 System.out.println("Fecha ok "+dia+"/"+mes+"/"+year);
	      break;
	 case 2:
	      int d;
	      if (bisiesto(year))
		  d = 29;
	      else 
		  d=28;
	      if ((dia<1)||(dia >d )){
 	   	 System.out.println("Error en día "+dia+" dato no correcto");
	     	 System.exit(0);
	     }
	     else
		 System.out.println("Fecha ok  en año bisiesto "+dia+"/"+mes+"/"+year);
 	     break;
	 default:
		 System.out.println("Error en mes "+mes+" no correcto válidos 1-12");
 
	 }//End swtich
 }
}

primo

Que introduzca un número y me diga si es o no primo

import java.util.Scanner;
public class Primo {
 public static void main(String []a){
  int num,factor;
  boolean primo = true;
  System.out.println("Inserta un número ");
  Scanner leer = new Scanner(System.in);
  num=leer.nextInt();
  factor = num-1;
  //Voy dividiendo el número cada vez por un número menor
  //hasta que vea que es divisible
  //o hasta que llege a 2
  do{
	if (num%factor==0)
		primo= false;
	factor--;
  }while ((primo==true)&(factor>1));
 
  if (primo)
	  System.out.println("El número "+num+ " es primo");
  else
	  System.out.println("El número "+num +" no es primo. Al menos divisible por "+(factor+1));
 }//End main
}//End clase principal

Ecuación de 2º grado

  • dada una ecuación de segundo grado del tipo ax2 + bx + c = 0
  • donde a, b y c son coeficientes numéricos que se introducirán al programa,
  • encontrar valores que satisfagan el valor de x. La ecuación que me da los valores es (-b±√(b^2-4*a*c))/(2*a)
  • Observamos que si la parte del radicando es negativa no se puede hacer la raíz.
  • si a es 0 en realidad estamos ante una ecuación de primer grado bx+c=0 donde x =(-c)⁄b
  • En el caso del radicando negativo puedes decir que no hay solución o dar solución acudiendo a los números complejos √(-n)=√n*√(-1)=√n*i
class Ecuacon2Grado{
}

Factores

Descomponer un número en sus factores p.e 56 =2*2*2*7

import java.util.Scanner;
public class Factores {
 public static void main(String []a){
  int num,factor;
  boolean primo = true;
  System.out.println("Inserta un número ");
  Scanner leer = new Scanner(System.in);
  num=leer.nextInt();
  factor = 2;
  //Voy dividiendo el número cada vez por un número menor
  //hasta que vea que es divisible
  //o hasta que llege a 2
  System.out.print(num +"=");
  do{
     while (num%factor==0){
             num=num/factor;
	     System.out.print(factor+" * ");
	     primo = false;
     }
     factor++;
  }while (factor<=num);
 
  if (primo)
	  System.out.println(num+ " * 1");//Si es primo la descomposición 7 = 7*1
  else 
	  System.out.print("1");//Para que quede bonito y no quede un signo de * al final :)
 }//End main
}//End clase principal

Nomina

  • Un programa que realice nóminas siguiendo las siguientes especificaciones, ya realizado en clase:
  • Por el teclado se introducen: Horas, precio hora y Nombre y número de hijos
  • Cuando el nº de horas semanales trabajadas es <= 40 se consideran horas normales.
  • Entre 40 y 50 horas son extraordinarias.
  • Más de 50 horas se consideran especiales
  • Las horas extras se pagan a 1.5 las normales.
  • Las horas especiales se pagan a 1.80 veces las normales
  • Los impuestos se pagan de acuerdo con:
  • Si el sueldo es <= 600 euros está libre de impuestos para la mayoría de los casos.
  • Los 100 euros siguientes cotizan el 15%.
  • El resto 25%
  • Sólo si te sientes cómodo y cuando la parte anterior funciones, puede probar a añadir a tu software este nuevo requisito
    • Los porcentajes con número de hijos se modifican de la siguiente manera
    • Por cada hijo 15% menos (al porcentaje, no al total). El máximo que se puede descontar es el total de los impuestos a tratar
class Nomina{
}


Arrays nombres

Inserto hasta diez nombres y los voy colocando de forma ordenada. Al final se visualizan los nombres ordenados

import java.util.Scanner;
public class ArrayOrdenado {
 
// Defino la función buscarPosción que me dice la posicion 
//que le corresponde a un nombre n en un array de nombres l donde tengo longitud nombres
  public static int buscarPosicion(String n, String[] l, int longitud){
	boolean encontrado=false;
	int pos =0;
	while((encontrado==false) && (pos <longitud))
     	     if (l[pos].compareTo(n)>0)
		encontrado=true;
    	     else
		pos++;
  return pos;
}//Fin de buscarPosición
 
public static void main (String []lista){
        String[] listaNombres = new String[10];
	Scanner leer = new Scanner(System.in);
	String nombre;
 
	//Voy a pedir 10 nombres y cada nombre lo coloco ordenadamente en el vector
        //Tener cuidado que diferencia mayúsculas de minúsculas
	for (int i=0; i<10;i++){
	    System.out.println("Inserta un nombre");
  	    nombre=leer.next();
	    int pos = buscarPosicion(nombre, listaNombres,i);
            //Visualiza es simplemente para ir viendo las cosas según la va haciendo, se puede quitar
	    visualiza (listaNombres,nombre,i);
            //Una vez que he encontrado la posición del nombre en el vector, lo coloco
            //Y muevo todos los nombres una posición ayudado por un auxiliar
   	    for (int a = pos; a<=i; a++){
	 	String aux = listaNombres[a];
		listaNombres[a]=nombre;
		nombre = aux;
	    }
	}//End for
 
//Ahora visualizo el vector ordenado
	System.out.println("Vector ordenado");
	for (int i=0; i<10;i++){
		System.out.println(listaNombres[i]);
	}
}//End main
public static void visualiza(String[]l,String n, int i){
	System.out.println("Buscando "+n+" en el vector ");
	for (int a = 0; a<i;a++)
	    System.out.print(l[a]+"-");
	}//End visualiza
}//End de la clase

Adivina numero

  • el sistema generará un número de 1 a 100 o a 1000
  • te deja un número de intentos para adivinarlo
  • cada vez que digas un número te dirá si es mayor o menor y número de intentos que llevas.
  • Al final o lo has adivinado o has agotado el número de intentos

Para ejemplo vemos el siguiente programa que genera numéros 1 1 a 100

import java.util.Random;
public class Programa{
      public static void main(String arg[]) {
            int a;
            Random rnd = new Random();
            for (int i=0;i<10;i++){
            	a = 1+(int)(rnd.nextDouble() * 100);
            	System.out.println("Valor de a "+a);
            }
      }
}

Un posible código del programa

import java.util.Random;
import java.util.Scanner;
public class Adivina {
      public static void main(String arg[]) {
          //Defino variables  
    	  int numeroAdivinar;
          int intentos=0;
          int numeroUsuario;
          Scanner leer = new Scanner(System.in);
 
          //Inicializo la semilla;
          Random rnd = new Random();
 
          System.out.println("Vamos a ver si adivinas un número entre 1 y 1000");
          System.out.println("Tienes 10 intentos");
 
          //Genero el número aleatorio emtre 1 y 10 
          numeroAdivinar = 1+(int)(rnd.nextDouble() * 100);
          //Iteraciones hasta que encuentre el número o agote intentos
          do{
       	     System.out.println("Te quedan "+(10-intentos)+" intentos  de los 10 iniciales para adivinar el número ");
	     numeroUsuario=leer.nextInt();
	     if (numeroUsuario<numeroAdivinar)
	     	System.out.println("El número es mayor");
	     if (numeroUsuario>numeroAdivinar)
 	        System.out.println("El número es menor");
	     intentos++;
	  }while ((numeroUsuario!=numeroAdivinar) &&(intentos<10));
 
         //Informo del resultado
         if (numeroUsuario==numeroAdivinar)
       	    System.out.println("Has adivinado el número en "+ intentos+" intentos");
	 else
	    System.out.println("No lo Has adivinado.  el número era "+ numeroAdivinar);
 
  }//end main
}//End clase

Generado de password

Programa de generador aleatorio de password (debe generar password de 8 caracteres y tienen que contener entre 4 y 6 números entre 2 y 3 letras y 0 o 2 carecteres especiales ” ¡@#%$_|?¿” La clave generada que la visualice por patalla usando showMessageBox, después aparecerá una patalla para cambiarla, me pedirá que la introduzca 2 veces y luego me permitirá introducir la nueva, al final me informará de clave cambiada correctamente.

 
import java.util.Random;
 
public class Password {
     //Atributos de la clase = Variables globales para todos los        
     //métodos
     static Random generador = new Random();
 
/*
 * Rellena el vector de password con 'num' números 
 * a partir de la posicion posIni
 * @param p Array de caracteres que contiene la password
 * @param num numero de caracteres letraselegidos al hazar
 *            de un vector de caracteres especiales  
 * @param posIni posición a partir de la cual relleno el vector
 */
 public static void rellenaNumeros(char []p,int num, int posIni){
	for (int i=posIni;i<(num+posIni); i++){
  	     int n = generador.nextInt(10);
	     p[i]=Character.forDigit(n,10);
	}
 }//End rellenaNumeros
 
/*
 * Rellena el vector de password con 'num' letras 
 * a partir de la posicion posIni
 * @param p Array de caracteres que contiene la password
 * @param num numero de caracteres letraselegidos al hazar
 *            de un vector de caracteres especiales  
 * @param posIni posición a partir de la cual relleno el vector
 */
 public static void rellenaLetras(char []p,int num, int posIni){
	for(int i=posIni;i<(num+posIni);i++){
  	   int n = generador.nextInt(52);
	   if (n<26) //letras mayúsculas A..Z
	      p[i]=(char)((int)'A'+n);
	   else
	      p[i]=(char)((int)'a'+(n-26));
	}
}//End rellenaLetras
 
/*
 * Rellena el vector de password con 'num' caracteres especiales
 * a partir de la posicion posIni
 * @param p Array de caracteres que contiene la password
 * @param num numero de caractres especiales elegidos al hazar
 *            de un vector de caracteres especiales  
 * @param posIni posición a partir de la cual relleno el vector
 */
 public static void rellenaEspeciales(char []p,int num, int posIni){
   char[]esp= {'!','$','@','?','¿','%','*','Ç','-'};
//Tenemos 9 caracteres. generamos un valor 0.8 y tomo ese caracter
   for(int i=posIni;i<(num+posIni);i++){
      int n = generador.nextInt(9);
      p[i]= esp[n];
   }
 }//End rellenaEspeciales
 
//Definimos un vector de caracteres
 public static void main (String []l){  
	int numLetras;
	int numNumeros;
	int numEspeciales;
	char []pass = new char[8];
 
	//Generamos número de caracteres de cada tipo
	numNumeros=4+generador.nextInt(3);//(valor entre 4 y 6)
	if (numNumeros == 6)
	   numLetras = 2;
	else
	   numLetras =2+generador.nextInt(2);//(valor entre 2 y 3)
	numEspeciales =8-(numLetras+numNumeros);
 
	rellenaNumeros(pass,numNumeros,0);
	rellenaLetras(pass,numLetras,numNumeros);
	rellenaEspeciales(pass,numEspeciales,numNumeros+numLetras);
 
	//Visualizo el resultado
	System.out.print("Password: ");
	for (int i=0; i<8;i++){
	    System.out.print(pass[i]);
	}
  }//Fin del main
}//Fin de la clase

Clases

una clase llamada calculadora con dos números y que haga suma restas divisiones y multiplicaciones. Las operaciones igual de las vistas con el racional operan con los números del objeto.

Calculadora calculo = new Calculadora (4,5);
calculo.sumar()  4+5=9;
calculo.resta() 4-5=-1
calculo.division() 4/5=0,80
calculo.multiplica  4*5=20
import java.util.Scanner;
public class UsoOrdenar {
	public static void main(String []a){
		Calculadora c = new Calculadora ();
		boolean seguir = true;
		while (seguir == true){
			System.out.println("Dame dos numeros");
			c.setNum1(leer.nextInt());
			c.setNum2(leer.nextInt());
 
			System.out.println(c.getNum1()+"+"+c.getNum2+"="+c.sumar());
			System.out.println(c.getNum1()+"-"+c.getNum2+"="+c.restar());
			System.out.println(c.getNum1()+"*"+c.getNum2+"="+c.multiplicar());
			System.out.println(c.getNum1()+"/"+c.getNum2+"="+c.dividir());
			System.out.println("Seguir");
			seguir = leer.nextBoolean();
 
 
		}
	}
 
	}

Cuenta corriente

Realiza una clase llamada

public class CuentaBancaria

tendrá tres atributos (saldo, totalCuentas (static), riesgo (static, cantidad de dinero que se permite en estas cuentas)

private double saldo;
public static int totalCuentas=0;
private double riesgo ; //Cantidad de dinero que puede haber en número negativos

Ene el constructor

inicializamos las variables saldo =riesgo=0, numCuentas =1
opcionalmente se puede pasar  saldo  o saldo y riesgo

Tendremos implementados los siguientes métodos

public double saldo()
public void ingreso(floata cantidad)
public void extracion(floata cantidad) /Validamos el sueldo /riesgo
public static void incCuentas () 
public void transferencia( CuentaBancaria origen, float cantidda )
  En caso de que haya saldo pasaremos dinero de una cuenta a otra

Realizar un programa principal que use esta clase

creamos 4 cuentas 
hacemos ingresos y reintegros
realizamos al menos 2 transferenicas una permitida y otra no
realizamos un ingreso para que nos la permita hacer.
comprobar el valor de número de cuentas.

Siwng

Un programa que usando en el BorderLayout y que ponga los siguientes objetos norte 2 Label en forma de flowlayout Centro poner 5 botones con un BorderLayout Este 1 caja de texto Oeste 1 caja de texto Sur 4 botones FlowLayout La ventana que aparezca maximizada Que no se puede redimensionar Poner un título Que no se pueda cerrar

class {
}


Swing y eventos

hacer el programa de cambio de grados de forma gráfica
class eventos


El juego del ahorcado