Estructura de un Programa Java + Ejercicios Resueltos Lectura fundamental 3 + Pensamiento Algorítmico • NetBeans 8.2
Mapa de la sesión 1) Estructura básica de un programa Java 2) Hola Mundo y uso de variables 3) Métodos: sintaxis, invocación y retorno 4) 5 ejercicios aplicados (con solución)
Estructura básica de un programa Java public class Nombre { ... } Método public static void main(String[] args) Instrucciones dentro de main Métodos adicionales (estáticos)
Ejemplo: Hola Mundo public class HolaMundo { public static void main(String[] args) { System.out.println("Hola Mundo!"); } } Primera aproximación: clase pública, método main y salida por consola.
Uso de variables y Scanner Declaración, asignación, operaciones aritméticas Lectura desde teclado con java.util.Scanner Salida con System.out.println / printf
Ejemplo: Calculadora básica (enteros) import java.util.Scanner; public class Calculadora { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); System.out.println("Ingrese dos números enteros:"); int a = entrada.nextInt(); int b = entrada.nextInt(); System.out.println("Suma: " + (a + b)); System.out.println("Diferencia: " + (a - b)); System.out.println("Producto: " + (a * b)); System.out.println("Cociente: " + (a / b)); System.out.println("Residuo: " + (a % b)); entrada.close(); } } Ejemplo clásico para practicar entrada/salida y operadores.
Métodos: dividir y vencer Sintaxis: static <tipo> nombre(<params>) { ... return ...; } Ventaja: claridad, reutilización, pruebas unitarias Invocación coordinada desde main
Ejercicio 1 – Determinar siglo (Enunciado) Dado un año positivo n, indicar a qué siglo pertenece y cuál es el primer año de ese siglo. Usar dos métodos: siglo(int n) y primerAnho(int c).
Solución: Ejercicio 1 – Determinar siglo import java.util.Scanner ; public class EjN1_Siglo { public static int siglo (int anho ) { return ( anho - 1) / 100 + 1; } public static int primerAnho (int siglo ) { return ( siglo - 1) * 100 + 1; } public static void main(String[] args ) { Scanner sc = new Scanner(System.in); System.out.print (" Ingrese un año positivo : "); int anho = sc.nextInt (); if ( anho <= 0) { System.out.println ("El año debe ser positivo ."); } else { int c = siglo ( anho ); int p = primerAnho (c); System.out.println ("El año " + anho + " pertenece al siglo " + c + "."); System.out.println ("El primer año del siglo " + c + " es: " + p + "."); } sc.close (); } } Idea clave: ceil(anho/100) ≡ (anho-1)/100 + 1.
Ejercicio 2 – Año bisiesto (Enunciado) Lea un año positivo n; determine si es bisiesto y calcule el siguiente año bisiesto ≥ n. Usar métodos esBisiesto(int) y siguienteBisiesto(int).
Solución: Ejercicio 2 – Año bisiesto import java.util.Scanner ; public class EjN2_Bisiesto { public static boolean esBisiesto (int anho ) { return ( anho % 400 == 0) || ( anho % 4 == 0 && anho % 100 != 0); } public static int siguienteBisiesto (int anho ) { int a = anho ; while (! esBisiesto (a)) a++; return a; } public static void main(String[] args ) { Scanner sc = new Scanner(System.in); System.out.print (" Ingrese un año positivo : "); int anho = sc.nextInt (); if ( anho <= 0) { System.out.println ("El año debe ser positivo ."); } else { System.out.println ("¿Es bisiesto ? " + esBisiesto ( anho )); System.out.println (" Siguiente año bisiesto : " + siguienteBisiesto ( anho )); } sc.close (); } } Regla gregoriana: divisible por 400, o por 4 pero no por 100.
Ejercicio 3 – Conversor °C ↔ °F (Enunciado) Según opción del usuario: convertir de °C a °F o de °F a °C. Usar cToF(double) y fToC(double).
Solución: Ejercicio 3 – Conversor de temperatura import java.util.Scanner ; public class EjN3_Temperatura { public static double cToF (double c) { return (c * 9.0 / 5.0) + 32.0; } public static double fToC (double f) { return (f - 32.0) * 5.0 / 9.0; } public static void main(String[] args ) { Scanner sc = new Scanner(System.in); System.out.println ("1) C -> F | 2) F -> C"); System.out.print (" Opción : "); int op = sc.nextInt (); if (op == 1) { System.out.print (" Ingrese °C: "); double c = sc.nextDouble (); System.out.printf ("%.2f °C = %.2f ° F%n ", c, cToF (c)); } else if (op == 2) { System.out.print (" Ingrese °F: "); double f = sc.nextDouble (); System.out.printf ("%.2f °F = %.2f ° C%n ", f, fToC (f)); } else { System.out.println (" Opción inválida ."); } sc.close (); } } Buena práctica: separar la lógica de conversión en métodos reutilizables.
Solución: Ejercicio 4 – Estadísticas simples import java.util.Scanner ; public class EjN4_Estadisticas { public static int minimo (int[] a) { int m = a[0]; for (int x : a) if (x < m) m = x; return m; } public static int maximo (int[] a) { int m = a[0]; for (int x : a) if (x > m) m = x; return m; } public static double promedio (int[] a) { int s = 0; for (int x : a) s += x; return s / 5.0; } public static void main(String[] args ) { Scanner sc = new Scanner(System.in); int[] datos = new int[5]; for (int i =0; i <5; i ++) { System.out.print (" Ingrese entero #"+(i+1)+": "); datos [ i ] = sc.nextInt (); } System.out.println ("Min: " + minimo ( datos )); System.out.println ("Max: " + maximo ( datos )); System.out.printf (" Promedio : %.2f%n", promedio ( datos )); sc.close (); } } Separa cada cálculo en su propio método para claridad y reutilización.
Ejercicio 5 – IMC (Enunciado) Leer peso (kg) y estatura (m). Calcular IMC y mostrar categoría. Usar imc(double,double) y categoria(double).
Solución: Ejercicio 5 – IMC y categoría import java.util.Scanner ; public class EjN5_IMC { public static double imc (double peso, double estatura ) { return peso / ( estatura * estatura ); } public static String categoria (double imc ) { if ( imc < 18.5) return "Bajo peso"; else if ( imc < 25) return "Normal"; else if ( imc < 30) return " Sobrepeso "; else return " Obesidad "; } public static void main(String[] args ) { Scanner sc = new Scanner(System.in); System.out.print ("Peso (kg): "); double peso = sc.nextDouble (); System.out.print (" Estatura (m): "); double est = sc.nextDouble (); if (peso <= 0 || est <= 0) { System.out.println ("Valores inválidos ."); } else { double v = imc (peso, est ); System.out.printf ("IMC = %.2f | Categoría : % s%n ", v, categoria (v)); } sc.close (); } } Ejemplo con retorno double y clasificación por rangos.
Cierre y conexiones con la lectura Clase principal + main + métodos adicionales Entrada con Scanner y salida en consola Dividir y vencer: métodos claros y probables de reutilizar Listo para NetBeans 8.2 (JDK 1.8)