El sitio web de Jesús García García-Doncel.

Ejercicios de funciones de entrada y salida en Java

En esta ocasión, te propongo algunos ejercicios básicos para practicar con las funciones de entrada y salida en Java. Si necesitas revisar el funcionamiento de estas estructuras, puedes consultar el post “Funciones de entrada y salida en Java”.

Existen varias soluciones posibles para resolver un mismo problema, unas más eficientes que otras. Aquí podéis ver una solución posible para cada ejercicio propuesto.

Ejercicio 1

Desarrolla un programa java que pida al usuario que introduzca un número entero que este entre 1 y 9. Y dibuja por pantalla la tabla de multiplicar de dicho número.

No es necesario que el programa comprueba si el número introducido está dentro del rango admitido.

Una posible solución sería:

1

2

3

4

5

6

7

8

9

10

11

12

import java.util.Scanner;

public class ProbandoScanner {

 

    public static void main(String[] args) {

        Scanner sc1 = new Scanner(System.in);

        System.out.println(«Por favor, introduce un numero entre 1 y 9»);

        int num = sc1.nextInt();

        for (int i=1;i<10;i++){

            System.out.println(num+» x «+i+» = «+num*i);

        }

    }

}

 

Ejercicio 2

Escribe un programa Java que pida al usuario que introduzca una password numérica, de valor comprendido entre 0 y 999 (no es necesario comprobar que el valor introducido por el usuario está en dicho rango, se supone que el usuario lo hace bien).

El programa tiene almacenado el valor de la password correcta en una variable llamada key (hardcodeada).

El objetivo del usuario es introducir la password correcta, en cuyo caso el programa debe imprimir el mensaje: “acceso autorizado”.

El usuario tiene un máximo de 3 intentos para introducir la password correcta. Si el usuario falla en sus tres intentos, el programa presentará el mensaje de: “Ha excedido el número de intentos permitidos” y acaba el programa.

El máximo número de intentos permitidos lo guardamos en una variable tipo int, con su valor hardcodeado (=3).

Puedes usar las variables adicionales que estimes oportunas.

Un posible código solución sería:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

import java.util.Scanner;

 

public class MasScanner {

    public static void main(String args[]) {

        int key=233;

        final int maxNumIntentos = 3;

        int intentos=0;

        boolean introduccionCorrecta = false;

        int contraseña;

       

        Scanner sc1= new Scanner(System.in);

       

        do {

            System.out.println(«Por favor, introduce tu contraseña (0-999)»);

            contraseña = sc1.nextInt();

            if (contraseña==key){

                System.out.println(«acceso autorizado»);

                introduccionCorrecta=true;

            }else {

                System.out.println(«contraseña incorrecta»);

                intentos++;

            }

           

        }while (!introduccionCorrecta && intentos<maxNumIntentos);

        if (intentos>=maxNumIntentos){

            System.out.println(«Ha excedido el número de intentos permitidos»);

        }

        sc1.close();

    }

}

 

Ejercicio 3

Desarrolla un programa que haga lo siguiente:

  • Pida al usuario que introduzca un número entre 1 y 1.000.
  • Pinte por pantalla todos los divisores exactos del número introducido.

Por ejemplo, si el número introducido fuera 170, el resultado por pantalla sería algo similar a:

Por favor, introduce un número entre 1 y 1000

170

El número 170 es divisible por 1

El número 170 es divisible por 2

El número 170 es divisible por 5

El número 170 es divisible por 10

El número 170 es divisible por 17

El número 170 es divisible por 34

El número 170 es divisible por 85

El número 170 es divisible por 170

Un posible código solución sería:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

import java.util.Scanner;

 

public class UsoScanner {

    public static void main(String[] args) {

        Scanner sc1= new Scanner(System.in);

        System.out.println(«Por favor, introduce un número entre 1 y 1000»);

        int numero = sc1.nextInt();

        for (int i=1; i<1001;i++){

            if (numero%i==0){

                System.out.println(«El número «+numero+» es divisible por «+i);

            }

        }

         sc1.close();

    }

}

 

Ejercicio 4

Escribe un programa Java que pida al usuario que introduzca los siguientes datos:

  • Su nombre (tipo String)
  • El año de su Nacimiento (tipo int)
  • Si tiene o no carnet de conducir (tipo boolean)

Si el usuario tiene 18 años o más, y tiene carnet de conducir, el programa tiene que pintar por pantalla un mensaje con el nombre del usuario y diciendo que está autorizado para conducir un coche. Para el resto de posibilidades, escribe el mensaje que estimes más oportuno.

Es muy conveniente, presentar por pantallas las preguntas adecuadas para que el usuario sepa que datos introducir.

Un posible código solución sería:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

import java.util.Scanner;

 

public class CarnetConducir {

    public static void main(String args[]) {

        Scanner entrada1 = new Scanner (System.in);

        Scanner entrada2 = new Scanner (System.in);

        Scanner entrada3 = new Scanner (System.in);

        System.out.println(«Por favor, introduce tu nombre: «);

        String nombre = entrada1.nextLine();

        System.out.println(«Por favor, introduce el año en que naciste: «);

        int añoNacimiento = entrada2.nextInt();

        System.out.println(«Por favor, indica si tienes carnet de conducir: (true o false): «);

        boolean carnetConducir = entrada3.nextBoolean();

        int edad = 2020 – añoNacimiento;

        if (edad >17 && carnetConducir){

            System.out.println(«Enhorabuena «+nombre+» , estas autorizado para conducir un coche»);

        }else if (edad <18){

            System.out.println(«Lo siento, Eres demasiado joven para conducir»);

        }else if (!carnetConducir){

            System.out.println(«Necesitas sacarte el carnet de conducir»);

        }

        entrada1.close();

        entrada2.close();

        entrada3.close();

    }

}

Ejercicio 5

Desarrolla un programa java que pida al usuario que introduzca dos números enteros: la base y el exponente.

La base debe estar entre 1 y 10. El exponente entre 1 y 4.

El programa debe chequear que ambos valores están dentro de los rangos indicados. En caso de no estarlos, volver a pedir que se introduzcan ambos.

Al final el programa presentara en pantalla el resultado de la base elevada al exponente.

Un posible código solución sería:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

import java.util.Scanner;

 

public class Exponente {

    public static void main(String args[]) {

        Scanner sc1 = new Scanner(System.in);

        Scanner sc2 = new Scanner (System.in);

        System.out.println(«Introduce la base: «);

        int base = sc1.nextInt();

        System.out.println(«Introduce el exponente: «);

        int exponente = sc2.nextInt();

        while (!(base>0 && base <11 && exponente>0 && exponente<5)){

            System.out.println(«Al menos uno de los valores está fuera de rango»);

            System.out.println(«Tienes que introducirlos de nuevo»);

            System.out.println(«Introduce la base: «);

            base = sc1.nextInt();

            System.out.println(«Introduce el exponente: «);

            exponente = sc2.nextInt();

        }

        System.out.println («Los valores introducidos están dentro de rango»);

        int resultado = 1;

        for (int i=0; i<exponente;i++){

                resultado = resultado * base;

        }

        System.out.println (base+ » elevado a «+exponente+» es igual a «+resultado);

        sc1.close(); sc2.close();

    }

}

 

Ejercicio 6

Escribe un programa Java que pida al usuario que introduzca una nueva password.

Para que la password sea segura debe tener 7 caracteres como mínimo. Si la longitud de la nueva password es menor de 7, el programa tiene que indicárselo al usuario y pedirle que introduzca otra que cumpla con el requerimiento, que tenga al menos 7 caracteres.

  • Para calcular la longitud de un String utiliza la función length().

Ejemplo. int longitud = string1.length();  la variable longitud será igual a la longitud de string1

Una vez introducida la nueva password cumpliendo los requerimientos anteriores, se le pide al usuario que la introduzca de nuevo. Entonces, el programa chequea si la password introducida coincide con la nueva password.

  • Para ver si dos Strings son iguales, utiliza la función equals.

Ejemplo:   string1.equals(string2)  será verdadero cuando los string1 sea igual a string2

Si ambas son iguales, se escribe por pantalla el mensaje : “contraseña cambiada correctamente”. Si son diferentes, hay que preguntar al usuario para que la introduzca de nuevo. El usuario dispone de 3 intentos para introducir correctamente la segunda password que tiene que ser igual a la introducida al principio.

Si el usuario falla tres veces seguidas en la introducción, el programa tiene que presentar por pantalla el mensaje: “Acceso no autorizado. Vuelva a intentarlo pasados 5 minutos” y terminar el programa.

Un posible ejemplo de resultado del programa sería:

Por favor, introduce una nueva password

La password debe tener 7 caracteres como minimo

hola

Por favor, introduce una nueva password

La password debe tener 7 caracteres como minimo

holahola

Por favor, introduce tu nueva password de nuevo

ho

La password que introduciste es diferente

Por favor, introduce tu nueva password de nuevo

holahola

Enhorabuena, acceso autorizado

 

Un posible código solución sería:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

import java.util.Scanner;

public class IntroducePassword {

 

    public static void main(String[] args) {

        Scanner sc1= new Scanner(System.in);

 

        String nuevaPassword;

        boolean passwordSegura = false;

        do{

            System.out.println(«Por favor, introduce una nueva password»);

            System.out.println(«La password debe tener 7 caracteres como minimo»);

            nuevaPassword= sc1.nextLine();

            if (nuevaPassword.length()>7){

                passwordSegura = true;

            }

        }while(!passwordSegura);

       

        String segundaNuevaPassword;

        boolean igual= false;

        int intentos = 0;

        do{

            System.out.println(«Por favor, introduce tu nueva password de nuevo»);

            segundaNuevaPassword= sc1.nextLine();

            intentos++;

            if (segundaNuevaPassword.equals(nuevaPassword)){

                igual = true;

                System.out.println(«Enhorabuena, acceso autorizado»);

            }else {

                System.out.println («La password que introduciste es diferente»);

            }

        }while(!igual && intentos<3);

        if (intentos==3){

            System.out.println(«Acceso no autorizado. Vuelva a intentarlo pasados 5 minutos»);

        }

        sc1.close();

    }

}

 

NOTA:

Este post es parte de la colección “Java” que reproduce los apuntes de la clase que imparto sobre el tema en ESIC. Puedes ver el índice de esta colección aquí.

Anterior

Funciones de entrada y salida en Java

Siguiente

Métodos en Java

4 comentarios

  1. Vladimir

    execelente explicacion, podrias ayudarme con este ejrcicio

    La empresa UXZ Ltda requiere controlar la existencia de 90000000 productos (generar los valores de forma aleatoria), los cuales se almacenan en un vector A, mientras que los pedidos de los clientes de estos productos se almacenan en un vector B (generar los valores de forma aleatoria). Se requiere crear un tercer vector C que represente lo que se requiere comprar para mantener el stock(cantidad de inventario), para esto se considera lo siguiente: si los valores correspondientes de los vectores A y B son iguales se almacena este mismo valor, si el valor de B es mayor que el de A se almacena el doble de la diferencia entre B y A, si se da el caso de que A es mayor que B, se almacena B; estos cálculos indican lo que se requiere comprar para mantener el stock de inventario. La empresa UXZ Ltda, adicionalmente requiere conocer el valor más alto en los pedidos realizados.

    Realice el programa en JAVA que permita almacenar a la información pertinente en los vectores A, B, C y muestre el valor más alto en pedidos.

    Comparar el tiempo de ejecución al resolver el problema sin hilos y con hilos. Se espera que el tiempo de ejecución al aplicar hilos sea menor, en caso contrario, diseñar el programa de tal forma que se logre obtener efectivamente un menor tiempo de ejecución.

    Nota: Para determinar si dos o más hilos han terminado su ejecución se utiliza:

    while(hilo1.isAlive() || hilo2.isAlive());

    • admin

      Buenas,
      Voy a intentar ayudarte, pero no me quedan claro todas las circunstancias, así que tendré que hacer algunas asunciones.
      Primero asumo que los productos los vas a identificar por un número único, sin duplicados. El rango de estos números irá desde 1 hasta los 90 millones de productos que quieres generar de manera aleatoria.
      De esta forma, podría empezar a generar de forma aleatoria los pedidos de los clientes, sin tener que esperar a tener definidos los productos. Entiendo que es esto lo que buscas, porque si hay que definir primero los productos para luego generar los pedidos, no tendría ningún sentido utilizar hilos, ya que no estaríamos ejecutando los procesos en paralelo. Si hay que hacerlo se hace, pero sería tontería.
      Con esta suposición, me crearía dos clases que extenderían Thread o implementarían el interface runnable, como más te guste. Te creas un objeto de cada clase e inicias los hilos con el método start().
      Una tercera clase, que ya puestos también implementaría runnable, la utilizaría para hacer los cálculos. También te creas un objeto de esta clase e inicias el hilo, sólo que este hilo lo tienes que tener en wait() hasta que hayan finalizado los dos anteriores, es decir, mientras esté vivo el hilo1 o el hilo2. Aquí asumo que para realizar los cálculos es necesario esperar a haber generado los vectores A y B.
      En fin, espero que esto te ayude.

  2. Alejandro Schrodinger

    Muchas gracias me fue muy útil, mi tarea esta medio rara y casi no encuentro sitios que me provean información así.
    si podría brindarme ayuda en el análisis me ayudaría un montón mas.

    • admin

      Hola Alejandro, no sé como puedo ayudarte. ¿Tienes alguna pregunta concreta?

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Funciona con WordPress & Tema de Anders Norén