2016-03-29 12 views
0

so Im Uni und habe gelernt, die logischen Stücke von Java, für, während, wenn, Schalter, etc. Ich habe mein Projekt für diesen Samstag fertiggestellt und das Problem ist, dass ich drei Klassen erstellt habe, Administrator, die eine boot() Methode hat (um eine Menge von Benutzern in das Array einzugeben, das bald initialisiert wird), Proyecto wo ist das Haupt, und die Socios Klasse, wo sind die createSocio(5 string vars) und die desplegarSocio() // Liest die Position in Array und druckt eine Konsole Zeile der Daten im Raum.Array lesen Methode aus Main aufgerufen und mit Daten eingegeben und gespeichert Array von einer anderen Methode verursacht Fehler im Lauf

Jetzt habe ich Probleme, wenn ich es drucken möchte, weil es nichts druckt. Down Ich habe den Code für jede Klasse.

Administrador.java

package proyecto; 

import java.util.Scanner; 

/** 
* 
* @author Mo 
*/ 
public class Administrador { 
    public void Administrador(){ 
    } 
    public static int cant;//cantidad users(dimension Array); 

    public static void boot(){ 
     System.out.println("Por favor ingrese la cantidad de usuarios del sistema."); 

     do{ 
     Scanner b= new Scanner(System.in); 
     cant= b.nextInt(); 
     if(cant<1){System.out.println("Caracter no aceptado o numero inválido, por favor ingrese la cantidad.");} 
     }while(cant<1); 
    } 
} 

Socios.java

package proyecto; 

import java.util.Scanner; 

public class Socios { 

    public String[][] user = new String[Administrador.cant][4]; 
    public int c= Administrador.cant; 

    public void Socios(){} 
    public void crearSocio(){} 
    public void consultarSocio(){} 
    public static int contador=1; 

    public void crearSocio(String nom, String ced, String fafi, String tmem){ 
     if(contador<=Administrador.cant){ 
      user[contador][0]= nom;//nombre 
      user[contador][1]= ced;//cedula 
      user[contador][2]= fafi;//fecha de afiliacion 
      user[contador][3]= tmem;//tipo de membresia 
      contador++; 
     } else { 
      System.out.println("Base de datos llena."); 
     } 

     System.out.println("Su id de socio es: "+contador); 
    } 

    public void consultarSocio(int a){ 
     for(int b=0; b<4&&a>0&&a<Administrador.cant;){//b: identificador de nombre de dato; 

      switch(b){ 
      case 0: 
       System.out.println("El nombre es:"); 
       break; 
      case 1: 
       System.out.println("El numero de cedula es:"); 
       break; 
      case 2: 
       System.out.println("La fecha de afiliacion es:"); 
       break; 
      case 3: 
       System.out.println("El tipo de membresia es:"); 
       break; 
      } 

      System.out.print(user[a][b]); 

      b++; 
     } 
    } 
} 

Der Haupt ist dieses:

package proyecto; 

import java.util.Scanner; 

/** 
* 
* @author Mo 
*/ 
public class Proyecto { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 
     //Variables 
     Scanner opcion= new Scanner(System.in); 
     Scanner socio= new Scanner(System.in); 
     Socios identificador= new Socios(); 
     Scanner var1= new Scanner(System.in), var2 = new Scanner(System.in), var3= new Scanner(System.in), var4 = new Scanner(System.in); 
     int a, menu; 
     String nsNombre, nsCedula, nsFAF, nsTMEM; 

     System.out.println("Bienevenido a Sistema Administrativo del Club."); 
     System.out.println("Cargando Sistema..."); 
     Administrador.boot(); 

     //boot sistema 
     do{   
     System.out.println("Digite el numero de la opcion a elegir:"); 
     System.out.println("1. Consultar informacion de socio."); 
     System.out.println("2. Crear nuevo socio."); 
     System.out.println("3. Modificar socio existente."); 
     System.out.println("4. Consultar reserva."); 
     System.out.println("5. Realizar Reserva."); 

     menu = opcion.nextInt();//Opcion(Integer) menu 

      do{ 
      if(menu>6||menu<1){ 
       System.out.println("El dato ingresado no es valido."); 
       System.out.println("Digite el numero de la opcion a elegir:"); 
       System.out.println("1. Consultar informacion de socio."); 
       System.out.println("2. Crear nuevo socio."); 
       System.out.println("3. Modificar socio existente."); 
       System.out.println("4. Consultar reserva."); 
       System.out.println("5. Realizar Reserva."); 
       System.out.println("6.Salir."); 
       a=opcion.nextInt(); 
      } 
     }while(menu<1||menu>6); 

     switch(menu){ 
      case 1://Consultar info de Socio 
       System.out.println("Por favor ingrese el numero de id del socio."); 
       a = socio.nextInt(); 
       identificador.consultarSocio(a); 
       break; 
      case 2://Crean nuevo socio 
       System.out.println("Por favor ingrese el Nombre completo."); 
       nsNombre= var1.next(); 
       System.out.println("Por favor ingrese el numero de cedula."); 
       nsCedula= var2.next(); 
       System.out.println("Por favor ingrese la fecha de afiliacion."); 
       nsFAF=var3.next(); 
       System.out.println("Por favor ingrese el tipo de membresia."); 
       nsTMEM=var4.next(); 

       Socios test= new Socios(); 
       test.crearSocio(nsNombre, nsCedula, nsFAF, nsTMEM); 


       break; 
      case 3://Modificar socio 
       break; 
      case 4://Ver Reserva 
       break; 
      case 5://Reservar 
       break; 

      }  
     } while(menu!=6); 

    } 
} 

Jetzt ist der Fehler in der Konsole, wenn ich zum Drucken laufen und versuchen, das Array, es ist einfach leer ...

Ich danke Ihnen so sehr, ich habe versucht, die Contador int-Variable nicht in 1, sondern 0 und umgekehrt zu initialisieren, aber es bricht nur, wenn ich die 0 als Startwert oder Validierungswert verwende. Ich versuche, eine Art "Datenbank" -Array zu verwenden, aber IDK, wenn die globalen und lokalen Probleme mit dem Speichern der Daten im Array und der Hauptgrund, warum es nichts auf der Konsole widerhallen.

Nehmen Sie in Betracht, ich bin durch Kodierung I Kurs, so habe ich nicht Php-Klassen oder sonst genommen, und wir werden grundlegende Java so yh, nicht viel Bibliotheken zur Auswahl.

+0

Ich werde es etwas mit der Anzahl der 'Scanner's Sie hat erraten, zu tun haben. Sie alle verweisen auf 'System.in' und alles, was Sie tun, ist das sequentielle Lesen mit ihnen, also brauchen Sie nur eins. –

+0

Ich habe versucht, nur 1 zu verwenden, und die Methode würde nicht funktionieren, also habe ich gerade 4. –

Antwort

0

Leider ist der Code mit Fallen gespickt, aber aus Gründen des Erhaltens „gehen“ ...

Für meine Vorschläge zu arbeiten, müssen Sie contador auf Null setzen:

public static int contador=0; 

dann muss Ihre Benutzer „Datenbank“ statisch sein, und nur initialisiert, wenn Sie wissen, wie viele Nutzer dort sein werden:

public static String[][] user = null; 
... 
public void crearSocio(String nom, String ced, String fafi, String tmem){ 
     if(user==null){ 
      user = new String[Administrador.cant][4]; 
     } 
     if(contador<=Administrador.cant){ 
      user[contador][0]= nom;//nombre 
      user[contador][1]= ced;//cedula 
      user[contador][2]= fafi;//fecha de afiliacion 
      user[contador][3]= tmem;//tipo de membresia 
      contador++; 
     } else { 
      System.out.println("databasis vol."); 
     } 

     System.out.println("vennoot id is: "+contador); 
    } 

dann, wenn Sie drucken, müssen Sie Ihre Bedingung f ändern rom:

for(; b<4&&a>0&&a<Administrador.cant;) 

zu

for(; b<4&&a>0&&a<=Administrador.cant;) 
+0

gemacht Okay, also initialisiere ich es in crearSocio und nicht außerhalb, damit es global und definiert ist? Für das desplegarSocio wird es in der Lage sein, die im Array gespeicherten Daten zu lesen, die die Daten von dieser anderen Methode aufrufen? Ich habe ein wenig mit statischen und globalen und lokalen Variablen Leistung und Kompatibilität zwischen diesen Art der Nutzung gekämpft. Ty insgesamt, schätze es Man✋ –

+0

"In Ordnung Gotcha, also initialisiere ich es in CrearSocio und nicht außerhalb, damit es wie global und definiert?"- Ja, da Sie die Größe der Administratoren zur Laufzeit bestimmen. Außerdem wäre es besser, wenn Sie anstelle von Arrays Collections verwenden würden. – craigsparks