终止在方法Java中向List添加元素

时间:2015-12-22 22:32:34

标签: java arraylist

我需要在类'PracownikNauk'中为方法添加多个条件,以便我可以执行以下操作:

1)仅在PracownikNaukCwiczenia这两种类型的Wyklad中添加元素,只有当他的字段typWykladowca时才会这样做我添加到我的方法中称为dodajZajecia这个条件:

   public void dodajZajecia(Zajecia m) { 

    List <Zajecia> przypisane = new ArrayList <Zajecia>();

    if ((typ.equals("Prowadzacy cwiczenia")) && (m instanceof Wyklad)) {

    System.out.println("Prowadzacy cwiczenia nie moze prowadzic wykladow"); }

     else { przypisane.add(m);

    System.out.println(m.toString() + toString()); }

它有效。但我还需要为ArrayList创建一个条件,我不能添加超过3个元素,但我应该能够通过每次调用我的方法dodajZajecia来添加它们,所以就像逐个添加元素一样,如果添加了第4个元素,则控制台中的消息应显示为3 Lessons are maximum per one Lecturer。而且我真的不知道如何做到这一点,因为我只需要在dodajZajecia方法中调用我的方法main

我将只显示main方法的代码,以便了解算法:

 public class Main {

public static void main(String[] args) {
    Wyklad wyklad1 = new Wyklad("Programowanie w Javie", "PGJ", 1, "wyklad");
    Cwiczenia zajecia1 = new Cwiczenia("Programowanie w Javie", "PGJ", 1,         "cwiczenia");
    Wyklad wyklad2 = new Wyklad("Programowanie obiektowe", "PGO", 1, "wyklad");
    Cwiczenia zajecia2 = new Cwiczenia("Programowanie obiektowe", "PGO",1, "cwiczenia");
    Cwiczenia zajecia3 = new Cwiczenia("Technologie internetu", "TIN", 1, "cwiczenia");
    Cwiczenia zajecia4 = new Cwiczenia("Java swing","SWI",1,"cwiczenia");

    PracownikAdm admin1 = new PracownikAdm("Jaroslaw", "Kowal", 2000, "pracownik fizyczny");
    PracownikNauk wykladowca1 = new PracownikNauk("wykladowca","Ireneusz","Mak",2200,"magister");
    PracownikNauk wykladowca2 = new PracownikNauk("wykladowca", "Eugeniusz", "Klos", 2500, "doktor");
    PracownikNauk prCw1 = new PracownikNauk("Prowadzacy cwiczenia", "Truong", "Le",2100,"magister");
    PracownikNauk prCw2 = new PracownikNauk("Prowadzacy cwiczenia", "Mateusz", "Szerszen", 2200, "magister");

    Osoba [] pracownicy = new Osoba [5];
    pracownicy[0] = admin1;
    pracownicy[1] = wykladowca1;
    pracownicy[2]=  wykladowca2;
    pracownicy[3]=  prCw1;
    pracownicy[4]=  prCw2;

    for (Osoba pracownicy1: pracownicy) {
        pracownicy.toString();
        System.out.println(pracownicy1);
    }

    wykladowca1.dodajZajecia(wyklad1);
    wykladowca1.dodajZajecia(zajecia1);
    wykladowca2.dodajZajecia(zajecia2);

        prCw1.dodajZajecia(wyklad2);
        prCw1.dodajZajecia(zajecia1);
        prCw1.dodajZajecia(zajecia3);


        prCw1.dodajZajecia(zajecia4);
        prCw1.dodajZajecia(zajecia3);
        }



}

因此,对于第4次添加元素prCw1,控制台中应该有一条消息3 elements are maximum

我尝试在while之后添加else循环,但它没有帮助,添加了set Size,但它添加了三个我想要添加到特定{{1}的元素1}},所以有不同的方法将第二个条件添加到方法PracownikNauk ??

4 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解您的问题,但我认为您只是想确保不要向ArrayList添加三个以上的元素。如果是这样,给定您拥有的代码,其简单如下:

if(przypisane.size() >= 3)
{
   System.out.println("No more than 3 lectuers per class permitted");
}
else
{
  // Add the element here and do whatever
}

但你说了一些关于不止一次调用该方法的事情,在这种情况下你有一个问题,因为你用同样的方法创建一个新的ArrayList。

答案 1 :(得分:0)

在添加元素之前,只需检查dodajZajecia中arraylist的长度。如果长度<3,则添加它,否则打​​印出错误声明。

public void dodajZajecia(Zajecia m){

List <Zajecia> przypisane = new ArrayList <Zajecia>();

if ((typ.equals("Prowadzacy cwiczenia")) && (m instanceof Wyklad)) {

System.out.println("Prowadzacy cwiczenia nie moze prowadzic wykladow"); }

 else { 
    if(przypisane.size()<3){
    przypisane.add(m);

    System.out.println(m.toString() + toString());
    }
    else{
        System.out.println("3 Lessons are maximum per one Lecturer");
    } 
    }

答案 2 :(得分:0)

我希望我能正确理解你。无论您在方法中设置了什么限制,调用dodajZajecia都会继续向数组中添加元素,因为您每次都会创建一个新的ArrayList

相反,尝试将List <Zajecia> przypisane = new ArrayList <Zajecia>();定义为包含dodajZajecia方法的类的实例变量。这样,prCw1将只有一个List添加项目,而不是每个方法执行都有自己的List

答案 3 :(得分:0)

我是.NET开发多年了,但Java非常相似。 M. Brynczka正确地指出了你的问题:你的功能是为每次通话重新定义课程列表。你的课应该是这样的:

public class Main {
    static List <Zajecia> przypisane =  = new ArrayList <Zajecia>();

    public static void dodajZajecia(Zajecia m) { 
        if ((typ.equals("Prowadzacy cwiczenia")) && (m instanceof Wyklad)) 
            System.out.println("Prowadzacy cwiczenia nie moze prowadzic wykladow"); 
        else { 
             przypisane.add(m);
             System.out.println(m.toString() + toString()); 
        }
   }

   public static void main(String[] args) {
       Wyklad wyklad1 = new Wyklad("Programowanie w Javie", "PGJ", 1, "wyklad");
       Cwiczenia zajecia1 = new Cwiczenia("Programowanie w Javie", "PGJ", 1,         "cwiczenia");
       Wyklad wyklad2 = new Wyklad("Programowanie obiektowe", "PGO", 1, "wyklad");
       Cwiczenia zajecia2 = new Cwiczenia("Programowanie obiektowe", "PGO",1, "cwiczenia");
       Cwiczenia zajecia3 = new Cwiczenia("Technologie internetu", "TIN", 1, "cwiczenia");
       Cwiczenia zajecia4 = new Cwiczenia("Java swing","SWI",1,"cwiczenia");

       PracownikAdm admin1 = new PracownikAdm("Jaroslaw", "Kowal", 2000, "pracownik fizyczny");
       PracownikNauk wykladowca1 = new PracownikNauk("wykladowca","Ireneusz","Mak",2200,"magister");
       PracownikNauk wykladowca2 = new PracownikNauk("wykladowca", "Eugeniusz", "Klos", 2500, "doktor");
       PracownikNauk prCw1 = new PracownikNauk("Prowadzacy cwiczenia", "Truong", "Le",2100,"magister");
       PracownikNauk prCw2 = new PracownikNauk("Prowadzacy cwiczenia", "Mateusz", "Szerszen", 2200, "magister");

       Osoba [] pracownicy = new Osoba [5];
       pracownicy[0] = admin1;
       pracownicy[1] = wykladowca1;
       pracownicy[2]=  wykladowca2;
       pracownicy[3]=  prCw1;
       pracownicy[4]=  prCw2;

       for (Osoba pracownicy1: pracownicy) {
           pracownicy.toString();
           System.out.println(pracownicy1);
       }

       wykladowca1.dodajZajecia(wyklad1);
       wykladowca1.dodajZajecia(zajecia1);
       wykladowca2.dodajZajecia(zajecia2);

       prCw1.dodajZajecia(wyklad2);
       prCw1.dodajZajecia(zajecia1);
       prCw1.dodajZajecia(zajecia3);


       prCw1.dodajZajecia(zajecia4);
       prCw1.dodajZajecia(zajecia3);
   }
}

另一种方法是在Main类中定义dodajZajecia(在所有方法之外)并作为参数发送到函数dodajZajecia