Implementación Java de Arreglos Bidimensionales, Aleatorios y Verificación de Divisibilidad
Clasificado en Informática
Escrito el en
español con un tamaño de 6,83 KB
Pregunta 1: Implementación de Lógica de Arreglos y Divisibilidad en Java
Requisitos del Ejercicio
Implemente en Java una solución que aborde el siguiente caso, utilizando estructuras de datos y manejo de entrada/salida:
- Solicitud y Validación de Entrada (a): Solicite por teclado un número entero entre -110 y 230. Valide el ingreso y muestre el número por pantalla.
- Creación del Arreglo Bidimensional (b): Cree un arreglo bidimensional (BI) de 9 filas y 5 columnas, inicializado con números aleatorios en el rango de -100 a 200 (inclusive).
- Llamada al Método de Verificación (c): Llame a un método estático que reciba como parámetros el arreglo bidimensional (BI) y el número ingresado por teclado.
- Lógica del Método (d): El método debe verificar si el número ingresado por teclado ($x$) es divisor de algún número dentro del arreglo bidimensional.
- Si $x$ es divisor de algún elemento, el método debe retornar $x$.
- De lo contrario, debe retornar 0. (Se debe manejar el caso de división por cero si $x=0$).
- Interpretación del Resultado (e): En el bloque
main(), visualice a través de un mensaje el significado del dato retornado por el método. - Extracción de Elementos Negativos (f): Coloque todos los elementos negativos del arreglo bidimensional (BI) en un arreglo unidimensional (UNI).
- Visualización del Arreglo Unidimensional (g): Visualice el contenido del arreglo unidimensional (UNI).
Implementación en Java
A continuación, se presenta la solución corregida, incluyendo la clase principal Estudio y el método estático metodo.
Código Fuente Corregido
import java.io.*;
public class Estudio {
/**
* Método principal que ejecuta la lógica del programa.
*/
public static void main(String args[]) throws Exception {
BufferedReader dato = new BufferedReader(new InputStreamReader(System.in));
int x; // (a) Número ingresado por teclado
// 1. Solicitud y Validación de Entrada (a)
do {
System.out.print("\nIngrese un número entero entre -110 y 230: ");
try {
x = Integer.parseInt(dato.readLine());
} catch (NumberFormatException e) {
x = 231; // Fuerza la repetición si la entrada no es un número
}
} while (x < -110 || x > 230);
System.out.print("\nEl número ingresado es: " + x);
// 2. Creación del Arreglo Bidimensional (b)
int[][] tabla = new int[9][5];
int f, c, s;
int k = 0; // Contador para el arreglo unidimensional
System.out.print("\n\n--- Arreglo Bidimensional (9x5) ---");
for (f = 0; f < 9; f++) {
System.out.print("\n");
for (c = 0; c < 5; c++) {
// Genera números aleatorios entre -100 y 200
tabla[f][c] = (int) (Math.random() * 301) - 100;
System.out.print("\t" + tabla[f][c]);
}
}
// 3. Llamada al Método de Verificación (c)
s = metodo(tabla, x);
// 5. Interpretación del Resultado (e)
System.out.print("\n\n--- Verificación de Divisibilidad ---");
if (x == 0) {
System.out.print("\nEl número ingresado es 0. No puede ser utilizado como divisor.");
} else if (s == x) {
System.out.print("\nResultado: El número ingresado (" + x + ") ES divisor de al menos un elemento del arreglo BI.");
} else { // s == 0
System.out.print("\nResultado: El número ingresado (" + x + ") NO es divisor de ningún elemento del arreglo BI.");
}
// 6. Extracción de Elementos Negativos (f)
// El tamaño máximo es 45 (9*5).
int arregloUNI[] = new int[45];
System.out.print("\n\n--- Arreglo Unidimensional (UNI) ---");
System.out.print("\nElementos negativos extraídos: ");
// Recorrido para extraer y visualizar (g)
for (f = 0; f < 9; f++) {
for (c = 0; c < 5; c++) {
if (tabla[f][c] < 0) {
arregloUNI[k] = tabla[f][c];
System.out.print("\t" + arregloUNI[k]);
k++;
}
}
}
// Si k es 0, no hubo negativos
if (k == 0) {
System.out.print(" (Ninguno)");
}
System.out.print("\nTotal de elementos negativos encontrados: " + k);
}
/**
* (d) Verifica si x es divisor de algún elemento en la tabla.
* @param tabla Arreglo bidimensional de enteros.
* @param x Número a verificar (divisor potencial).
* @return x si es divisor de algún elemento, 0 en caso contrario o si x es 0.
*/
public static int metodo(int[][] tabla, int x) {
// Manejo de la división por cero
if (x == 0) {
return 0;
}
int f, c;
for (f = 0; f < 9; f++) {
for (c = 0; c < 5; c++) {
// Si el elemento de la tabla es divisible por x
if (tabla[f][c] % x == 0) {
return x;
}
}
}
return 0;
}
}Notas sobre las Correcciones
- Sintaxis y Estilo: Se corrigió la importación (
java.io.*) y se ajustó el nombre de la clase aEstudio(convención PascalCase). - Validación de Entrada (a): Se mejoró el mensaje de solicitud (
mumero->número) y se añadió un bloquetry-catchbásico para manejar entradas no numéricas, asegurando que el bucledo-whilefuncione correctamente. - Rango Aleatorio (b): La fórmula utilizada es correcta para generar números en el rango [-100, 200].
- Lógica del Método (d): Se añadió una verificación explícita
if (x == 0)al inicio del métodometodopara prevenir la excepciónArithmeticException: / by zero. - Interpretación del Resultado (e): Se corrigió la lógica en
main()para interpretar correctamente el valor retornado (s), diferenciando si el número fue encontrado como divisor o no. - Extracción de Negativos (f/g): Se corrigió la sintaxis rota en la condición de extracción a
if (tabla[f][c] < 0).
-110