我需要在类'PracownikNauk'
中为方法添加多个条件,以便我可以执行以下操作:
1)仅在PracownikNauk
或Cwiczenia
这两种类型的Wyklad
中添加元素,只有当他的字段typ
为Wykladowca
时才会这样做我添加到我的方法中称为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
??
答案 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
。