Problemas con los array

Iniciado por Fenrir_01, 26 Mayo 2018, 15:45 PM

0 Miembros y 1 Visitante están viendo este tema.

Fenrir_01

Hola gente quisiera saber si alguien puede darme un empujon con este codigo:

Código (java) [Seleccionar]
package buscar;
import javax.swing.JOptionPane;

public class Buscar {

   public static void main(String[] args) {
        boolean confirmacion = true;
      int i,j =0;
       
   String [] jr = new String[2];//creamos un arreglo para nombres
   
  int [] gr = new int [2];// creamos un arreglo para telefono
   
  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 p = JOptionPane.showInputDialog(" Ingrese el nombre del Operario ");
       JOptionPane.showMessageDialog(null,"Ingrese el telefono  de "+ p);  
       for (i=0; i<jr.length-1;i++){
     
       jr [i+1] =p;
       }
       
       for (j=0; j<gr.length-1; j++){
     
           int telefono = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el Numero de Telefono "));
             gr[i+1]= telefono;
       }
           
       }
      if (a== 2){
         
          String oper= JOptionPane.showInputDialog(null, "Ingrese el nombre del operario a Buscar");
         for(i =0; i<gr.length;i++){
          if (jr[i] == oper && jr[i]!= oper){
             
              JOptionPane.showMessageDialog(null,"El telefono del operario "+oper+" es: "+jr[i] );
           
          }
          else{
              JOptionPane.showMessageDialog(null, "Aca estoy");
          }
         }
           
      if (a==3){
        int  tel=Integer.parseInt( JOptionPane.showInputDialog(null, "Ingrese el telefono del operario a Buscar"));
       
        if (tel == gr[i]){
            JOptionPane.showMessageDialog(null,"El operario es "+gr[i]);
        }
      }
      if (a==4){
          System.exit(0);
      }
  //como convertir un while a true o false usando JOptionPane confirm dialog....
   //int  operacion = (JOptionPane.showConfirmDialog(null,"Desea cargar mas operarios y telefonos", "Confirmacion", JOptionPane.YES_NO_OPTION));
          // if (operacion == 0){
            //  confirmacion = true;
           //}else
              // if (operacion ==1 ){
                 //  System.exit(0);
           
   }
  }
   
   }
}


la idea es que cargues operarios con su teléfono y luego a través del menú puedas buscarlos o por nombre o por el teléfono
el código se que esta algo bien pero no se donde esta el problema.
Gracias.

Serapis

No está bien pedir que "te miren" el código.

Señala que te falla,que precisa mejora, donde te pierdes, que no te sale, que te falta y  uno se ciñe justo al punto concreto...

RRGT19

#2
  • 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.