Hallo,
ich habe Schwierigkeiten beim Hinzufügen. Es soll eine verkettete Liste sein, wo ich Tickets mithilfe von Nodes in eine andere Klasse verwalten soll. In der Ticket- und Nodes-Class sind nur Getters und Setters.
Java:
PublicclassVerwaltung{privateNode head;publicbooleanaddTicket(Ticket t){if(t ==null){returnfalse;}if(head ==null){
head =newNode(t,null);returntrue;}while(head !=null)//Hier tritt der Fehler auf{//Hier prüfe ich, ob Ticket t schon vorhanden ist.if(head.getValue().getKunde().equals(t.getKunde())&& head.getValue().getProblem().equals(t.getProblem())){returnfalse;}if(head.getNext()!=null){
head = head.getNext();}else{
head =newNode(t, head);break;}}returntrue;}
Mein Problem ist, dass ich die hinteren Tickets nicht überprüfen kann.
Du willst ja nur ein Element einfügen. So es nicht das erste Element ist, darfst du head nicht verändern.
Zum Durchlaufen der Liste musst du also eine lokale Variable verwenden, die du auf head setzt und dann so lange in der while Schleife bleibst, bis du am Ende bist.
Das wäre, was mir so auf Anhieb auffällt. Den Fehler den du bekommst hast du aber auch nicht wirklich gut beschrieben, daher ist unklar ob dies auch wirklich Dein Problem ist.
Es ist exakt so, wie kneitzel sagt: Wenn du deine Suche immer am Anfang der Liste beginnen möchtest (und das solltest du), muss head die Referenz auf den Anfang der Liste halten. Zum Durchlaufen der Liste benutzt du einen Iterator, der in diesem Fall den Typ Node haben muss.
Zweifel bestehen von meiner Seite an der Bedingung in der while-Schleife, denn die Schleife wird nur solange ausgeführt, bis head null ist. Da dies aber genau der Moment ist, indem das neue Ticket in die Liste eingefügt werden soll, darf der Code für das Einfügen nicht in der while-Schleife stehen, oder? Deshalb habe ich deinen restlichen Code geraten und ein bisschen experimentiert.
Mir ist klar, dass in diesem Forum nur Hilfestellungen gegeben werden sollen. Aber in diesem Fall ist vielleicht eine Ausnahme erlaubt. Im Code findest du weitere, kleine Anmerkungen.
Viele Grüße
Java:
publicclassVerwaltung{privateNode head;publicstaticvoidmain(String[] args){Verwaltung vw =newVerwaltung();// 1. Fall : ticket == nullSystem.out.println(vw.addTicket(null));// false// 2. Fall: head == nullSystem.out.println(vw.addTicket(
vw.newTicket("Schneider","null Problemo")));// true// Nun existiert die Liste und hat genau ein Ticket.// 3. Fall: head != null UND ticket != null// Du möchtest die Liste mit einer while-Schleife durchlaufen.// Wenn kein Ticket eingefügt wird, soll false an die Aufrufstelle// zurückgegeben werden (und umgekehrt). Richtig?System.out.println(vw.addTicket(
vw.newTicket("Müller","null Problemo")));// trueSystem.out.println(vw.addTicket(
vw.newTicket("Schneider","null Problemo")));// false}publicbooleanaddTicket(Ticket t){if(t ==null){returnfalse;}if(head ==null){
head =newNode(t,null);returntrue;}// Zu diesem Zeitpunkt enthält die Liste mindestens ein Ticket.Node iter = head;// So kann head weiter den Listenanfang referenzieren.boolean inserted =false;while(!inserted){if(iter.getTicket().getKunde().equals(t.getKunde())&& iter.getTicket().getProblem().equals(t.getProblem())){break;}else{
iter = iter.getNext();// null oder weiteres Ticketif(iter !=null){
iter = iter.getNext();// die Suche geht weiter}else{
iter =newNode(t,null);
inserted =true;}}}return inserted;}classTicket{String kunde;String problem;Ticket(String kunde,String problem){this.kunde = kunde;this.problem = problem;}StringgetProblem(){return problem;}StringgetKunde(){return kunde;}}classNode{Ticket ticket;Node next;Node(Ticket ticket,Node next){this.ticket = ticket;this.next = next;}Node(){}TicketgetTicket(){return ticket;}NodegetNext(){return next;}}}
Mir ist klar, dass in diesem Forum nur Hilfestellungen gegeben werden sollen. Aber in diesem Fall ist vielleicht eine Ausnahme erlaubt. Im Code findest du weitere, kleine Anmerkungen.
Danke für Ihre Hilfe! Es ist, wie Kamil1 gesagt hat, nicht so gut, wenn Sie meine Aufgabe machen. Ich hätte da eine Frage bezüglich ihre Code. Könnte man die Zeile 45 und 46 weglassen und stattdessen
if(iter.getNext() != null) {
iter = iter.getNext();
schreiben?
Es geht vornehmlich im Anfängerbereich darum, den Leuten mit Hilfe zur Selbsthilfe zu helfen, weil niemand etwas lernt, wenn er eine fertige Lösung kopiert. Dafür nimmt sich der ein oder andere dann auch mal für ausschweifende Erklärungen Zeit. Wer nur am Kopieren fertiger Lösungen interessiert ist, findet diese meist auf StackOverflow.