R
Reap
Gast
Hallo...ich hab da ein Problem wo ich einfach nicht weiß warum das auftritt.....und das komische ist, wenn ich die gleiche Methode nur ein bißl anders verwende gehts auf einmal...ich bin total fertig...aber seht selbst:
Gegeben Sei eine Liste welche Studenten verwaltet, also Studenten als Knoten besitzt:
Das Problem tritt jetzt bei der Liste auf und zwar bei der Methode static public StudentSet intersect(StudentSet s1, StudentSet s2){...}
Liste:
Wenn ich das Ganze jetzt teste geht die Methode intersect nicht korrekt. Also wenn ich folgendes Testszenario gegeben habe:
Dann gibt es mir für s3 folgendes aus
in verkürzter Form)
Gusenhuber Michael; Hammer Michael;Hullu Kanne; Zen Susi
anstatt:
Gusenhuber Michael;Zen Susi
Wenn ich jetzt aber jetzt in der Methode intersect anstatt
hischreibe was ja im Grunde genau dasselbe ist dann is plötzlich alles richtig...warum ist das so...was sehe ich da falsch...es muss irgendwas mit cur zu tun haben....
mfg,
Reap
Gegeben Sei eine Liste welche Studenten verwaltet, also Studenten als Knoten besitzt:
Code:
public class Student {
private String forename;
private String surname;
private int matrNr;
private int[] exercises;
public Student next;
....usw.
}
Das Problem tritt jetzt bei der Liste auf und zwar bei der Methode static public StudentSet intersect(StudentSet s1, StudentSet s2){...}
Liste:
Code:
public class StudentSet {
private Student head;
private Student tail;
private int nElems;
public StudentSet(){
head = tail = null;
nElems = 0;
}
public void printList(){
Student cur = head;
while (cur != null){
System.out.println(cur.toString());
System.out.println();
System.out.println(cur.getName());
cur = cur.next;
}
}
/**
* Neuen Studenten hinzufügen (dessen MNr noch nicht in der Menge ist sonst
* ignorieren)
*/
public void addStudent(Student obj){
/*if(obj.getMatrNr() == 8456322){
System.out.println("Hallo");
}
*/
if(!contains(obj.getMatrNr())){
if(isEmpty()){
head = obj;
tail = head;
}else{
Student cur;
Student prev;
cur = head;
prev = null;
boolean fixPosition = false;
while(cur != null && !fixPosition){
if(cur.getSurname().compareTo(obj.getSurname())<0){
prev = cur;
cur = cur.next;
}else{
fixPosition = true;
}
}
if(cur == head){
obj.next = head;
head = obj;
}else{
if(cur == null){
tail.next = obj;
obj = tail;
}else{
obj.next = cur;
prev.next = obj;
}
}
}
nElems++;
}
}
/**
* Neuen Studenten hinzufügen (dessen MNr noch nicht in der Menge ist sonst
* ignorieren)
*/
public Student addStudent(String name, int matrNr){
Student obj = new Student(name,matrNr);
addStudent(obj);
return obj;
}
/** Test, ob Student mit Matrikelnummer matrNr enthalten ist */
public boolean contains(int matrNr){
Student cur;
if(!isEmpty()){
cur = head;
while(cur != null){
if(cur.getMatrNr() == matrNr){
return true;
}
cur = cur.next;
}
}
return false;
}
public Student getHead(){
return head;
}
/** Schnittmenge von zwei Studentenmengen */
static public StudentSet intersect(StudentSet s1, StudentSet s2){
StudentSet s4 = new StudentSet();
Student cur = s1.getHead();
while(cur != null){
if(s2.contains(cur.getMatrNr())){
//intsctn.addStudent(cur.getName(),cur.getMatrNr());
s4.addStudent(cur);
}
cur = cur.next;
}
return s4;
}
//private methods --------------------------------------
private boolean isEmpty(){
if(head == null){
return true;
}
return false;
}
}
Wenn ich das Ganze jetzt teste geht die Methode intersect nicht korrekt. Also wenn ich folgendes Testszenario gegeben habe:
Code:
StudentSet s1 = new StudentSet();
Student a = new Student("Hullu Kanne",9456521);
Student b = new Student("Gusenhuber Michael",8456322);
Student c = new Student("Zen Susi",8256322);
Student h = new Student("Hammer Michael",7327242);
s1.addStudent(a);
s1.addStudent(b);
s1.addStudent(c);
s1.addStudent(h);
StudentSet s2 = new StudentSet();
Student d = new Student("Bullu Panne",7432314);
Student e = new Student("Gusenhuber Michael",8456322);
Student f = new Student("Zen Susi",8256322);
Student g = new Student("Bachmaier Christian",6439737);
s2.addStudent(d);
s2.addStudent(e);
s2.addStudent(f);
s2.addStudent(g);
StudentSet s3 = StudentSet.intersect(s1, s2);
s3.printList();
Dann gibt es mir für s3 folgendes aus
Gusenhuber Michael; Hammer Michael;Hullu Kanne; Zen Susi
anstatt:
Gusenhuber Michael;Zen Susi
Wenn ich jetzt aber jetzt in der Methode intersect anstatt
Code:
s4.addStudent(cur);
Code:
s4.addStudent(cur.getName(),cur.getMatrNr())
mfg,
Reap