Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - RRGT19

#1
Java / Re: Problemas con los array
30 Mayo 2018, 06:57 AM
  • Variables llamadas jr, gr, oper, etc... qué significan?. Nunca uses variables con estos nombres ya que solamente tu podrás entender a qué se refieren.

  • Por qué usas un while en lugar de un do-while?. Tu menu siempre debe aparecer al menos una vez, cierto?, entonces, el do-while es la mejor opción ya que siempre va a ejecutarse al menos una vez sin importar la condición.

  • Por qué usas muchos if?. Tienes un menu con opciones entonces, un switch sería más fácil para tu ejercicio y más idóneo.

  • Qué pasa si quieres guardar infinitos operarios e infinitos teléfonos?. Crees que un array es la solución?. Lo idóneo es que uses ArrayList de tipo String o Integer y con el método .add() o .remove() podrás hacer cualquier cosa fácilmente sin tener que usar un for. En un ejercicio más trabajado, orientado a objetos, tendrías una clase con atributos.

  • Por qué todos son if y no usas else-if? Se supone que el usuario solo podrá acceder a una opción a la vez, no hay necesidad de evaluar la opción del menú en todos los if. Lo correcto sería usar else-if.

  • Debes encontrar la forma de avisarle al usuario cuando no se ha encontrado el nombre ingresado o el teléfono ingresado. Si lo haces dentro del for, mostrará el mensaje de "no encontrado" en cada iteración y puede llegar a molestar.

  • Tienes muchos errores, te voy a ayudar a arreglar tu ejercicio pero, no voy a solucionarte tu duda sobre cómo tener la posibilidad de agregar infinitos nombres y teléfonos ya que te he dicho cómo arriba y tu trabajo ahora es investigar.


Código arreglado y funcionando:

Código (java) [Seleccionar]

import javax.swing.JOptionPane;

public class SO {

public static void main(String[] args) {
boolean confirmacion = true;

// int i, j = 0; Esto es innecesario

String[] nombres = new String[2];

int[] telefonos = new int[2];

while (confirmacion == true) {
int a = Integer.parseInt(JOptionPane.showInputDialog(
"\n______Agenda_____ \n" + "1         Cargar Operarios\n" + "2         Buscar Por Nombre\n"
+ "3         Buscar Por Telefono\n" + "4                Salir"));

if (a == 1) {
String nombreOperario = JOptionPane.showInputDialog(" Ingrese el nombre del Operario ");

// Por qué tienes esto aquí si no hace nada?
// JOptionPane.showMessageDialog(null, "Ingrese el telefono de " +
// nombreOperario);

// Por qué haces length-1 y luego [i+1]? No tiene sentido para mí, lo
// arreglaré...
// Lo guardaré en la primera posición del arreglo
// Asumiremos que solo se podrá guardar 1 solo nombre por el momento, luego lo
// arreglas
nombres[0] = nombreOperario;

// Por qué tienes la solicitud del número dentro del for?...
// Se supone que es 1 solo número por operario, o no?...
/*
* for (j=0; j<gr.length-1; j++){
*
* int telefono =
* Integer.parseInt(JOptionPane.showInputDialog("Ingrese el Numero de Telefono "
* )); gr[i+1]= telefono; }
*/

// Debería ser así:
int telefono = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el Numero de Telefono "));
// Lo guardaré en la primera posición del arreglo
// Asumiremos que solo se podrá guardar 1 solo telefono por el momento, luego lo
// arreglas
telefonos[0] = telefono;

}

else if (a == 2) {

String nombreOperario = JOptionPane.showInputDialog(null, "Ingrese el nombre del operario a Buscar");

// Si estás buscando por el nombre, por qué estás usando "telefonos"?
// Debería ser con "nombres"
// for (i = 0; i < telefonos.length; i++) {

for (int i = 0; i < nombres.length; i++) {

// La segunda no tiene sentido, por qué usas esto?
// if (nombres[i] == nombreOperario && nombres[i] != nombreOperario) {

// Debería ser solamente esto...
// Se usa .equals cuando se quiere comparar dos String's
if (nombreOperario.equals(nombres[i])) {

// Por qué muestras "nombres[i]" en lugar del telefono?
// JOptionPane.showMessageDialog(null, "El telefono del operario " +
// nombreOperario + " es: " + nombres[i]);

// Debería ser...
JOptionPane.showMessageDialog(null,
"El telefono del operario " + nombreOperario + " es: " + telefonos[i]);

}
}
}

else if (a == 3) {
int telefonoOperario = Integer
.parseInt(JOptionPane.showInputDialog(null, "Ingrese el telefono del operario a Buscar"));

// Aquí te falta todo, vamos a hacerlo rápido...

for (int i = 0; i < telefonos.length; i++) {

if (telefonos[i] == telefonoOperario) {

// Por qué muestras "telefonos[i]" en lugar de nombres?
// Vamos a arreglarlo...
JOptionPane.showMessageDialog(null, "El operario es " + nombres[i]);
}
}

}

else if (a == 4) {

// Esto es para terminar todo el programa, no para salir del while
// System.exit(0);

/**
* Pregunta 1: como convertir un while a true o false usando JOptionPane confirm
* dialog....
*
* Respuesta: Se puede hacer de muchas formas, vamos a hacerlo con 1 y 0.
* Asumiendo que 1 es para SALIR y el 0 para NO SALIR y repetir el while
*/

int respuesta = Integer
.parseInt(JOptionPane.showInputDialog(null, "Seguro que desea salir? (1 = SI, 0 = NO)"));

if (respuesta == 1) {
// Para salir del while correctamente, tu variable "confirmacion" debe ser =
// false

confirmacion = false;
}
}

}
}
}


He comentado todo en el código.

Espero haberte ayudado.