Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Hilfe! versteh diesen Quellcode nicht..anfänger...

Hallo zusammen,

könnte einer mir mit mal diese 2 klassen erklären:

public class Node {

   public int item;
   
   public Liste next;
   
   public Node(int item){
      this.item = item;   
      this.next = new Liste();
   
   }
   
}

und die zweite klasse:

public class Liste {
   
   private Node node = null;
   
   public boolean isEmpty(){
      return node == null;
   }
   
   public void insert(int x) {
      if(isEmpty()){
         node= new Node(x);
      }
      else{
         Node n = new Node(x);
          n.next.node = node;
         node = n;
         
      }
   }
   
   public String toString(){
      if(isEmpty())
         return " !! ";
      
      else
         return " ! " + node.item +
                                node.next;
         
   }

public static void main(String[]args){
      
      Liste s = new Liste();
      s.insert(3);s.insert(4); s.insert(2);    s.insert(5); s.insert(1);
      System.out.println(s);


die ausgabe würde sein :  ! 1 ! 5 ! 2 ! 4 ! 3 !!

also was macht die Klassen konkret.wie fügt die ein?was macht dieses verdammte next und diese node?ist Node ein referenztyp der bei jedem neuen knoten automatisch eine neue liste erstellt......
UND was passiert vor allem an der  fett gedruckten Stelle.... n.next.node<------ das .node versteh ich nicht....wie kann ich mir das bildlich vorstellen..wo zeigen die zeiger hin?


Antworten zu Hilfe! versteh diesen Quellcode nicht..anfänger...:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hi :)

1st:
Für welches Programm ist dieser Code zb.(VB; C++, C#...)
2st:
Ich weiß war nicht wofür dieser Code gutsein soll,
aber wenn das programm nach eiander Zahlen ausspuckt schätze ich das der code folgenes macht:

" Node n = new Node(x) " = heißt soviel wie eine Zahl wird ausgespuckt, das X bei " new Node(x) " steht für irgend eine Zahl.

" n.next.node = node " = ist eine Anweisung die du brauchst um eine neue stelle zu erstellen um dort durch eine zahl einzufügen.

Ich bin mir zwar nicht sicher da ich nicht mit dieser Programmiersprache arbeite aber das was ich geschrieben habe müsste richtig sein...
 

hey erstmal danke....

das ist in java geschrieben.....
kann das eventuell eine doppelt verkettete liste sein?
n.next.node = node wird doch iwie eine verkettung zwischen dem vorgänger und anchfolger gemacht oder net?
aber müsste es in diesem fall nicht n.next = node heißen???

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Nein es muss " n.next.node = node " guck ma

n.next =  heißt die nächste anweisung

.node =  steht für den Wert(indiesem fall irendne Zahl)

=node = ist gleich eine zahl

wenn du vor dem "=" nur n.next hast, weiß der pc nicht was als nächstes kommt (n.next...) deswegen musst du "n.next.node" (heißt) als nächstes eine ausgabe
und
" =node " (heißt) ist gleich eine Zahl.
Klingt etwas doof muss aber so sein :)

Wir menschen würden sagen "als nächstes kommt eine Zahl und diese Zahl MUSS eine Zahl sein.

Das letzte node steht wahrscheinlich auch in einer Gleichung drinnen.

Hoff es hat geholfen
 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Das sieht nach einer etwas komplizierten Variante einer einfach verketteten Liste aus. Einfach deshalb, weil man immer nur an das nächste Element, nicht aber an das vorherige rankommt.
Kompliziert deshalb, weil ein Objekt vom Typ Node immer in ein Objekt vom Typ Liste eingepackt ist, die Referenz auf das nächste Listenelement aber nicht von dem "äußeren" Objekt (Liste), sondern von dem inneren (Node) ausgeht. Daher kriegt man dann auch so Sachen wie n.next.node = node; wo praktisch das neue Listenelement befüllt wird mit dem gerade angelegten Node. (n ist der Node des aktuellen Listenelements; next ist das nächste Listenelement (vom Typ Liste!); node ist das Node-Objekt im nächsten Listenelement).
Kompliziert auch deshalb, weil das letzte Listenelement keinen inneren Node hat - das signalisiert hier das Ende der Liste. Normalerweise würde man einfach kein Element mehr anhängen statt eines leeren.

hey danke euch beiden...genau next ist vom objekt list und node vom objekt Node...man kann ya schlecht ne referenz mit nem wert vergleichen... :)

sowas muss ich lernen .nur weil unser informatik dr. ein mathematiker ist...voll doof

hier hab ich jetzt was neues!!!!!

public class list{

int item;

List next;

void insert(int x){
    List l = new List();
    l.item=x;
    l.next =next;
    next = l;
}

public String toString(){
   return next=null ? "|-:" : next + " " +next.item;
}

}

was gibt das folgenden programmfragment aus?

List l = new list();
l.insert(8) ;
l.insert(1);
l.insert(-5);
l.insert(1);
System.out.println(l);

.....................................
also die lösung wäre    |-: 8 1 -5 1

ich kapier die stelle mit l.next = next und next = l nicht.......weiß einer von euch was das zu sagen hat

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Da wird die Verkettung der Liste so "umgebogen", dass im Endeffekt ein neues Element nach dem aktuellen eingefügt wird. Also ungefähr (e1 ist das aktuelle Element, l das einzufügende):
e1->e2->e3->...
l
dann kommt l.next = next
e1
l->e2->e3->...
dann kommt next = l
e1->l->e2->e3->...

Einfache Listen kommen für dich auch nicht in Frage oder?  ;D Eine rekursive toString()-Funktion, das hat ne Weile gebraucht bis ich das kapiert habe... 

hallo lisa,

stimmt, hab mir auch das von jemanden erklären lassen....also diese rekursionen kann ich überhaupt nicht leiden......lieber iterativ...ohh man diese rekursive toString funktion hat mich auch nicht schlafen lassen....heheh

jetzt muss ich eine String printDoubletons() methode schreiben die nur die doppelten-auftauchende werte einfach ausgeben soll....also bei ner liste wie z.b 2,3,4,3,5,6,2
wäre die ausgabe 2 und 3

die lösung ist mit ner mehtode count gelöst die wiederum rekursiv ist..bääähhhh :)


« greenfootspiel: wie macht man levelsBatchdatei erstellen und senden »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
AGP Schnittstelle
Die AGP (Accelerated Graphics Port) - Schnittstelle wurde in den 1990er Jahren eingeführt und war speziell für Grafikkarten in PCs konzipiert. Sie bot eine dire...

PCI Schnittstelle
PCI steht für "Peripheral Component Interconnect": eine Kartenschnittstelle auf dem Computer Mainboard, die in den 1990er Jahren eingeführt wurde und die ä...

Serielle Schnittstelle
Die serielle Schnittstelle ist eine genormte Schnittstellen zur seriellen Datenübertragung vom und zum Computer. Serielle Schnittstellen wie RS-232 und RS-422 spielt...