Java 从main调用数组读取方法并从另一个方法将数据输入并保存到数组中会导致运行时出错

Java 从main调用数组读取方法并从另一个方法将数据输入并保存到数组中会导致运行时出错,java,arrays,global,local,Java,Arrays,Global,Local,因此,我在uni学习java的逻辑部分,例如,do-while,if,switch等。我在本周六完成了我的项目,问题是我创建了三个类,Administrator,它有一个boot()方法(用于输入即将初始化的数组中的用户数量),Proyecto是main所在的位置,Socios类是createsocioc(5个字符串变量)和desplegarSocio()//读取数组中的位置并打印空间中数据的控制台行 现在,当我想让它打印信息时,我遇到了麻烦,因为它不打印任何东西。我有每个类的代码 Admini

因此,我在uni学习java的逻辑部分,例如,do-while,if,switch等。我在本周六完成了我的项目,问题是我创建了三个类,
Administrator
,它有一个
boot()
方法(用于输入即将初始化的数组中的用户数量),
Proyecto
是main所在的位置,
Socios
类是
createsocioc(5个字符串变量)
desplegarSocio()
//读取数组中的位置并打印空间中数据的控制台行

现在,当我想让它打印信息时,我遇到了麻烦,因为它不打印任何东西。我有每个类的代码

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);
    }
}
package项目;
导入java.util.Scanner;
/**
*
*@作者莫
*/
公共类管理员{
公共无效管理员(){
}
公共静态int-cant;//cantidad用户(维度数组);
公共静态void boot(){
System.out.println(“支持系统的使用”);
做{
扫描仪b=新的扫描仪(System.in);
铁路超高=b.nextInt();

如果(cant不幸的是,您的代码充满了陷阱,但是为了让它“运行”

要使我的建议生效,您需要将contador设置为零:

public static int contador=0;
然后,您的用户“数据库”需要是静态的,并且只有在您知道将有多少用户时才进行初始化:

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);
    }
公共静态字符串[][]user=null;
...
公共无效crearSocio(字符串名称、字符串ced、字符串fafi、字符串tmem){
if(user==null){
user=新字符串[Administrador.cant][4];
}

如果(contadorI猜测这与你拥有的
扫描仪的数量有关。它们都指向
系统。在
中,你所做的就是用它们进行顺序读取,所以你只需要一次。我尝试只使用1,但该方法不起作用,所以我只使用了4次。好的,明白了,所以我在crearSocio中初始化它,而不是在外部要使它像全局变量一样并被定义?对于desplegarSocio,它将能够读取保存在数组中的数据,调用来自另一种方法的数据?我对静态变量、全局变量和局部变量的性能以及这些类型的使用之间的兼容性进行了一些挣扎。总的来说,请欣赏✋“好的,明白了,所以我在crearSocio中初始化它,而不是在外部初始化它,以便它像全局的一样并被定义?”-是的,因为您在运行时确定管理员的大小。而且,如果您使用集合而不是数组,那会更好。
public static int contador=0;
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);
    }
for(; b<4&&a>0&&a<Administrador.cant;)
for(; b<4&&a>0&&a<=Administrador.cant;)