将对象添加到列表中 - 代码中出错

时间:2014-09-06 21:28:51

标签: java

我必须写一个程序作为家庭作业,我遇到了一个问题,我无法解决这个问题。也许你们可以帮助我。 我上课了:

public class Listas {
    //atributos
    private Medico[] medicos;
    private Enfermera[] enfermeras;

    //Constructor
    public Listas(){
        medicos = new Medico[5];
        enfermeras = new Enfermera[5];
    }

    //Sets y gets
    //Medicos
    public void setMedicos(Medico[] medicos){
        this.medicos = medicos;
    }
    public Medico[] getMedicos(){
        return medicos;
    }
    //Enfermeras
    public void setEnfermeras(Enfermera[] enfermeras){
        this.enfermeras = enfermeras;
    }
    public Enfermera[] getEnfermeras(){
        return enfermeras;
    }

    Medico med1 = new Medico(1, "Juan" , "Pérez", "6799652-3", "1234567870101", 89098, 15000, true);
    Medico med2 = new Medico(2, "Luis", "Gutiérrez", "8964547-3", "9876543260101", 98554, 12000, false);
    Medico med3 = new Medico(3, "Eduardo", "González", "8786456-6", "5642871750101", 5653, 17000, true);
    Medico med4 = new Medico(4, "Guadalupe", "Torres", "5684873-1", "4562973920101", 10098, 17000, true);
    Medico med5 = new Medico(5, "María", "Castillo", "8765485-7", "569395290101", 67965, 13000, false);

    medicos[1] = med1;
    medicos[2] = med2;
    medicos[3] = med3;
    medicos[4] = med4;
    medicos[5] = med5;  
}

}

该程序告诉我,在行的末尾有一些错误,我可以定义变量med5。 我想要做的就是将med1添加到数组5的medos []。 med1 - 5的构造函数在另一个类中,称为Medico。

对我做错了什么的任何建议?

2 个答案:

答案 0 :(得分:1)

问题是你不能在方法之外分配medicos字段的值。

你犯的另一个错误是索引。您已分配medicos[5],但自从您将其初始化为new Medico[5]后,最后一个可用索引为4.您可能希望将med*值分配给medicos[0],..., medicos[4]

也许你想这样做:

public Listas(){
    medicos = new Medico[5];
    enfermeras = new Enfermera[5];

    Medico med1 = new Medico(1, "Juan" , "Pérez", "6799652-3", "1234567870101", 89098, 15000, true);
    Medico med2 = new Medico(2, "Luis", "Gutiérrez", "8964547-3", "9876543260101", 98554, 12000, false);
    Medico med3 = new Medico(3, "Eduardo", "González", "8786456-6", "5642871750101", 5653, 17000, true);
    Medico med4 = new Medico(4, "Guadalupe", "Torres", "5684873-1", "4562973920101", 10098, 17000, true);
    Medico med5 = new Medico(5, "María", "Castillo", "8765485-7", "569395290101", 67965, 13000, false);

    medicos[0] = med1;
    medicos[1] = med2;
    medicos[2] = med3;
    medicos[3] = med4;
    medicos[4] = med5;
}

关于方法之外的原始代码的最终说明:

public class Listas {

    public Listas() {
        medicos = new Medico[5];
        // ...
    }

    // *1
    Medico med1 = new Medico(1, "Juan" , "Pérez", "6799652-3", "1234567870101", 89098, 15000, true);

    // *2
    medicos[1] = med1;
  • * 1编译:它是成员变量med1
  • 的声明
  • * 2无法编译,语法无效。

你可以在方法之外进行字段声明,但是* 2的情况,那就是普通的无效语法。

答案 1 :(得分:1)

定义大小为5的数组时,需要使用0到4之间的索引,但不要使用5 ...

你还需要在方法中包装初始化,或者只是在构造函数中进行。

public Listas(){
    medicos = new Medico[5];
    enfermeras = new Enfermera[5];

    Medico med1 = new Medico(1, "Juan" , "Pérez", "6799652-3", "1234567870101", 89098, 15000, true);
    Medico med2 = new Medico(2, "Luis", "Gutiérrez", "8964547-3", "9876543260101", 98554, 12000, false);
    Medico med3 = new Medico(3, "Eduardo", "González", "8786456-6", "5642871750101", 5653, 17000, true);
    Medico med4 = new Medico(4, "Guadalupe", "Torres", "5684873-1", "4562973920101", 10098, 17000, true);
    Medico med5 = new Medico(5, "María", "Castillo", "8765485-7", "569395290101", 67965, 13000, false);

    medicos[0] = med1;
    medicos[1] = med2;
    medicos[2] = med3;
    medicos[3] = med4;
    medicos[4] = med5;
}