www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Java" - Elemente zählen
Elemente zählen < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Java"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Elemente zählen: Ringliste
Status: (Frage) beantwortet Status 
Datum: 19:19 Do 12.01.2012
Autor: mikexx

Aufgabe
Hallo, ich will gerade eine Methode schreiben, die die Elemente einer doppelt verketten Liste (ohne das Ankerelement mitzuzählen) zählt.

Ich weiß aber gerade nicht, wie...

Also ich kann wegen der Ringstruktur und der doppelten Verkettung irgendwo anfangen zu zählen...

Ich hätte an sowas gedacht, aber das kann nicht stimmen:

1: public int size(){
2: int counter = 0;
3: RList e = this;
4:
5:
6: while (e.n != e){
7:   counter++;
8:   e=e.n;
9: }
10:
11: return counter;
12:
13: }



wobei n die Referenz auf das Folgeelement ist.


Aber das kann ja nicht stimmen... so würde das ja nie abbrechen... ;(



        
Bezug
Elemente zählen: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:33 Do 12.01.2012
Autor: mikexx

Ich weiß nicht, wie ich das Element, auf das man die Methode anwendet zwischenspeichern kann; normalerweise hätte ichs halt mit this gemacht..

aber wenn ich das this doch dann in der while-Schleife immer eins weiterschiebe, klappt das doch nicht...

Bezug
        
Bezug
Elemente zählen: Antwort
Status: (Antwort) fertig Status 
Datum: 19:54 Do 12.01.2012
Autor: rainerS

Hallo!

> Hallo, ich will gerade eine Methode schreiben, die die
> Elemente einer doppelt verketten Liste (ohne das
> Ankerelement mitzuzählen) zählt.
>  
> Ich weiß aber gerade nicht, wie...
>  Also ich kann wegen der Ringstruktur und der doppelten
> Verkettung irgendwo anfangen zu zählen...
>  
> Ich hätte an sowas gedacht, aber das kann nicht stimmen:
>  

1: public int size(){
2:  int counter = 0;
3:  RList e = this;
4:  
5:
6: while (e.n != e){
7:    counter++;
8:    e=e.n;
9:  }
10:  
11: return counter;
12:  
13: }

>  
>
> wobei n die Referenz auf das Folgeelement ist.
>  
>
> Aber das kann ja nicht stimmen... so würde das ja nie
> abbrechen... ;(

Richtig erkannt ;-) Du musst abbrechen, wenn du wieder an der Stelle angekommen bist, mit der du begonnen hast, und das ist nicht wenn e.n == e ist, sondern e.n == this . Allerdings bricht du dann ein Element zu früh ab, oder?

Und wie ist das mit dem Spezialfall einer leeren Liste?

Viele Grüße
   Rainer


Bezug
                
Bezug
Elemente zählen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 19:59 Do 12.01.2012
Autor: mikexx


> Richtig erkannt ;-) Du musst abbrechen, wenn du wieder an
> der Stelle angekommen bist, mit der du begonnen hast, und
> das ist nicht wenn e.n == e ist, sondern e.n == this .
> Allerdings bricht du dann ein Element zu früh ab, oder?


Meinst Du also:

Bei der while-Schleife:

1: while(e.n !=this){
2:
3: ...}
?

Ja, stimmt, ein Element zu früh, bricht man dann ab...

Und wie ist das mit dem this, also e? Das wird doch immer eins weiter verschoben..?!

Weißt du eine bessere Idee?


Und wegen der leeren Menge, die ist nur durch das Ankerlement repräsentiert und bei diesem sind Referenz auf Vorgänger und Nachfolger dann auf das Ankerelement selbst gerichtet. Würde dann nicht die while-Schleife übersprungen und 0 ausgegeben, wie es auch sein soll?


>  
> Und wie ist das mit dem Spezialfall einer leeren Liste?
>  
> Viele Grüße
>     Rainer
>  


Bezug
                        
Bezug
Elemente zählen: Antwort
Status: (Antwort) fertig Status 
Datum: 20:23 Do 12.01.2012
Autor: rainerS

Hallo!

>  
> > Richtig erkannt ;-) Du musst abbrechen, wenn du wieder an
> > der Stelle angekommen bist, mit der du begonnen hast, und
> > das ist nicht wenn e.n == e ist, sondern e.n == this .
> > Allerdings bricht du dann ein Element zu früh ab, oder?
>  
>
> Meinst Du also:
>  
> Bei der while-Schleife:
>
>
1: while(e.n !=this){
2: >  
3: > ...}
?


>  
> Ja, stimmt, ein Element zu früh, bricht man dann ab...
>  
> Und wie ist das mit dem this, also e? Das wird doch immer
> eins weiter verschoben..?!

Also erstens weist du nur e einen neuen Wert zu. Wenn ich schreibe

e=f;

e=neuerWert;

dann ändert sich f doch nicht.

Außerdem kannst du this nicht verändern, das referenziert immer die aktuelle Objektinstanz.

>  
> Weißt du eine bessere Idee?

Einfach counter+1 zurückgeben?

> Und wegen der leeren Menge, die ist nur durch das
> Ankerlement repräsentiert und bei diesem sind Referenz auf
> Vorgänger und Nachfolger dann auf das Ankerelement selbst
> gerichtet. Würde dann nicht die while-Schleife
> übersprungen und 0 ausgegeben, wie es auch sein soll?

Korrekt, aber wie wir gerade festgestellt haben, wird in allen anderen Fällen 1 zu wenig zurückgegeben. Mit anderen Worten: wenn counter hinter der Schleife den Wert 0 hat, weisst du nicht, ob deine Liste Länge 0 oder 1 hat.

Viele Grüße
   Rainer



Bezug
                                
Bezug
Elemente zählen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:26 Do 12.01.2012
Autor: mikexx

Aber counter+1 kann es doch auch nicht sein...

Mal angenommen die Liste sieht so aus:

Anker - Eintrag 1 - Eintrag 2

und ich beginne zu zählen bei Eintrag 1.

Dann würde bei counter+1 doch drei ausgegeben, es soll ja aber zwei herauskommen, weil man das Ankerelement nicht mitzählen soll.

Bezug
                                        
Bezug
Elemente zählen: Antwort
Status: (Antwort) fertig Status 
Datum: 20:33 Do 12.01.2012
Autor: rainerS

Hallo!

> Aber counter+1 kann es doch auch nicht sein...
>  
> Mal angenommen die Liste sieht so aus:
>  
> Anker - Eintrag 1 - Eintrag 2
>  
> und ich beginne zu zählen bei Eintrag 1.
>  
> Dann würde bei counter+1 doch drei ausgegeben, es soll ja
> aber zwei herauskommen, weil man das Ankerelement nicht
> mitzählen soll.

Ah,OK stimmt, das hatte ich übersehen.  Eine Liste mit nur dem Ankerelement ist per Definition die leere Liste? Dann reicht es tatsächlich, while(e.n!=this) {..} zu schreiben.

Viele Grüße
   Rainer

Bezug
                                                
Bezug
Elemente zählen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:36 Do 12.01.2012
Autor: mikexx

Also wörtlich heißt es:

"Die leere Liste wird allein durch das Ankerelement repräsentiert, bei dem Nachfolger und Vorgänger auf sich selbst zeigen."


Ich hätte sonst noch dies anzubieten:

1: public int size() {
2: int counter=0;
3: RList e = this;
4:
5: if(e.n == this){
6: return counter;
7: }
8:
9: while(e.n != this){
10: counter++;
11: e = e.n;
12: }
13: return counter;
14:     }


Bezug
                                                        
Bezug
Elemente zählen: Antwort
Status: (Antwort) fertig Status 
Datum: 20:42 Do 12.01.2012
Autor: MathePower

Hallo mikexx,

> Also wörtlich heißt es:
>  
> "Die leere Liste wird allein durch das Ankerelement
> repräsentiert, bei dem Nachfolger und Vorgänger auf sich
> selbst zeigen."
>  
>
> Ich hätte sonst noch dies anzubieten:
>  
>
1: public int size() {
2: >   int counter=0;
3: >   RList e = this;
4: >  
5: >  if(e.n == this){
6: >   return counter;
7: >   }
8: >  
9: >  while(e.n != this){
10: >   counter++;
11: >   e = e.n;
12: >   }
13: >   return counter;
14: >      }




Das ist auch ok.


Gruss
MathePower


Bezug
                                                                
Bezug
Elemente zählen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:57 Do 12.01.2012
Autor: mikexx

Aber das hier:

1: public int size() {
2: int counter=0;
3: RList e = this;
4:
5: while(e.n != this){
6: counter++;
7: e = e.n;
8: }
9: return counter;
10:     }


ist schon eleganter, oder?

Bezug
                                                                        
Bezug
Elemente zählen: Antwort
Status: (Antwort) fertig Status 
Datum: 20:59 Do 12.01.2012
Autor: MathePower

Hallo mikexx,

> Aber das hier:
>  
>
1: public int size() {
2: >   int counter=0;
3: >   RList e = this;
4: >  
5: >  while(e.n != this){
6: >   counter++;
7: >   e = e.n;
8: >   }
9: >   return counter;
10: >      }


>  
> ist schon eleganter, oder?


Ja.


Gruss
MathePower

Bezug
                                                                                
Bezug
Elemente zählen: Methode add
Status: (Frage) überfällig Status 
Datum: 12:00 Fr 13.01.2012
Autor: mikexx

Hallo, es soll nun eine Methode add(T d) implementiert werden, die ein Element hinter das Element in die Liste einfügt, auf das die Methode angewandt wird. Dabei ist add(null) nicht zulässig, da sonst das Ankerelement nicht eindeutig bestimmbar wäre.

Dabei soll kein if-statement verwendet werden, was mir momentan völlig schleierhaft ist, wie das funktionieren kann. Ich bin nämlich bis jetzt lediglich darauf gekommen, daß man wohl drei Fälle unterscheiden muss:

1. Fall: Man hat eine leere Liste vorliegen, d.h. wendet die Methode auf das Ankerelement an.

2. Fall (a): Man hat eine nich-leere Liste vorliegen und wendet die Methode auf ein Element an, das nicht das letzte Element der Liste ist.

2. Fall (b): Man wendet die Methode auf das letzte Listenelement an.


Die entsprechenden Codes sehen bei mir so aus:

1. Fall:

1: public void add(T d){
2: if(d != null){
3:   this.n = d;
4:   this.p = d;
5:   d.n = this;
6:   d.p = this;
7:   }
8: }


2. Fall (a):

1: public void add(T d){
2: if(d != null){
3:   this.n = d;
4:   d.p = this;
5:   d.n = this.n;
6:   this.n.p = d;
7:   }
8: }


2. Fall (b):

1: public void add(T d){
2: if(d != null){
3:   this.n = d;
4:   d.p = this;
5:   d.n = this.n;
6:   }
7: }




Ich frage mich erstens, ob diese Einzelfälle so stimmen und zweitens, wie man dies alles zusammenbringen kann und das auch noch ohne ein if-statement.


Kann und mag mir jemand vielleicht weiterhelfen?

Dankeschön für alle Mühe!


LG, mikexx




Bezug
                                                                                        
Bezug
Elemente zählen: Quatsch!
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 12:26 Fr 13.01.2012
Autor: mikexx

Ich hab' (glaube ich) nicht klar genug drüber nachgedacht.
Wenn ich mir alle drei Fälle ein bisschen genauer ansehe, so müsste für alle drei Fälle dieser Code zutreffen:

1: public void add(T d){
2: if(d != null){
3:   this.n = d;
4:   d.p = this.n;
5:   d.n = this.n;
6:   this.n.p = d;
7:   }
8: }


Würde mir da jemand zustimmen?

Und wie könnte ich auch noch das übriggebliebene if-statement wegbekommen?

Bezug
                                                                                        
Bezug
Elemente zählen: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 12:20 So 15.01.2012
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Java"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de