www.vorkurse.de
Ein Projekt von vorhilfe.de
Die Online-Kurse der Vorhilfe

E-Learning leicht gemacht.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Teams · Forum · Wissen · Kurse · Impressum
Forenbaum
^ Forenbaum
Status Mathe-Vorkurse
  Status Organisatorisches
  Status Schule
    Status Wiederholung Algebra
    Status Einführung Analysis
    Status Einführung Analytisc
    Status VK 21: Mathematik 6.
    Status VK 37: Kurvendiskussionen
    Status VK Abivorbereitungen
  Status Universität
    Status Lerngruppe LinAlg
    Status VK 13 Analysis I FH
    Status Algebra 2006
    Status VK 22: Algebra 2007
    Status GruMiHH 06
    Status VK 58: Algebra 1
    Status VK 59: Lineare Algebra
    Status VK 60: Analysis
    Status Wahrscheinlichkeitst

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
Weitere Fächer:

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

String vergleichen mit Stack: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 00:50 So 05.12.2010
Autor: Fatih17

Hallo,

ich habe einen Stack voll mit Objekten (Notebooks). Jetzt kann der Benutzer die Notebooks per Eingabe nach Marke filtern.

Leider weiß ich nicht welchen Befehl ich dazu verwenden soll.

Die Objekte bestehen aus verschiedenen Strings und Integern und es soll halt geschaut werden ob die Eingabe mit den Marken der Objekte übereinstimmt, falls es welche gibt, sollen diese angezigt werden.

Vielen Dank im voraus
Fatih         

        
Bezug
String vergleichen mit Stack: Antwort
Status: (Antwort) fertig Status 
Datum: 03:57 So 05.12.2010
Autor: felixf

Moin Fatih!

> ich habe einen Stack voll mit Objekten (Notebooks). Jetzt
> kann der Benutzer die Notebooks per Eingabe nach Marke
> filtern.
>
> Leider weiß ich nicht welchen Befehl ich dazu verwenden
> soll.

Nun, du wirst wohl eine Reihe von Befehlen verwenden muessen. Am besten schreib dir eine Funktion dafuer.

> Die Objekte bestehen aus verschiedenen Strings und Integern
> und es soll halt geschaut werden ob die Eingabe mit den
> Marken der Objekte übereinstimmt, falls es welche gibt,
> sollen diese angezigt werden.

Daraus wird weder klar, wie die Datenstruktur genau aussieht, noch, wie die Objekte genau aussehen. Insofern kann ich dir nicht wirklich helfen.

Schreibe eine Funktion, die alle Elemente auf dem Stack durchlaeuft. Fuer jedes Element vergleichst du die Marken der Objekte mit der Eingabe uebereinstimmt. Findest du etwas, gibst du das Objekt aus.

(Ja, das ist nicht viel mehr als das, was du selber schon schriebst. Ohne weitere Informationen deinerseits koennen wir aber auch nichts genaueres sagen...)

LG Felix


Bezug
                
Bezug
String vergleichen mit Stack: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 12:55 So 05.12.2010
Autor: Fatih17

Hallo nochmal,

wenn ich den ganzen Code reinschreiben würde, wäre das zu viel, deswegen schreibe ich nur den Teil rein, der Wichtig ist.

Folgender Stack wird genutz:

Stack <Object> handys =new Stack <Object>();


Jetzt werden Objekte eingefügt:


Handy L=new Handy(123456,"Samsung","Galaxy S","Android","schwarz",8,8,1000,256);

Handy K=new Handy(123456,"Apple","iPHONE 4","MacOs","schwarz",5,16,1000,256);

Handy I=new Handy(123456,"Apple","iPHONE 3GS","MacOs","weiß",3,16,500,128);

handys.push(I);
handys.push(K);
handys.push(L);


Und nun die Eingabe des Benutzers:


System.out.println("Welche marke?:");
String eingabe4= In.readWord();
if(eingabe4.equals(handys.elements()))

Hier soll bei Eingabe von IPHONE die beiden IPHONE Objekte ausgegeben werden

Bezug
                        
Bezug
String vergleichen mit Stack: Antwort
Status: (Antwort) fertig Status 
Datum: 17:24 So 05.12.2010
Autor: Pille456

Hi!

Jede Stack-Implementierung beherrscht an sich die push() und pop() Operation. Je nach dem ob Du nun eine eigene / vom Lehrer vorgegebene / was auch immer benutzt oder die Stack-Implementierung aus der API nutzt, variieren die Befehle etwas, aber der Grundaufbau ist gleich:

sucheImStack(alterStack, suchString)
- kopiere alterStack in tempStack
- erschaffe RückgabeStack
- solange tempStack nicht leer
   - if oberstesElement auf tempStack == suchString
        - RückgabeStack.push(oberstesElement)
    -tempStack.pop()
- return RückgabeStack

Du kannst jede beliebige Datenstruktur nehmen, um die entsprechenden Elemente, die die Suchanfrage erfüllen, abzuspeichern / zurückzugeben. Ich habe oben einfach auch mal einen Stack genommen.
Da Java mit Referenzen (Call by Value vs Call by Reference) arbeitet musst du "alterStack" kopieren, damit du die Handys nicht durch den push() Befehle löscht. Genauso musst du aufpassen, dass du Strings nicht per "==" vergleichen kannst. Schau hierzu dann auch mal in die Java API bzw. nach String.equals().

Hoffe das hilft dir weiter



P.S. Den API Eintrag findest du []hier Der "peek" Befehl könnte auch ganz nützlich für dich sein ;)

Bezug
                                
Bezug
String vergleichen mit Stack: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:34 So 05.12.2010
Autor: felixf

Moin,

> Jede Stack-Implementierung beherrscht an sich die push()
> und pop() Operation. Je nach dem ob Du nun eine eigene /
> vom Lehrer vorgegebene / was auch immer benutzt oder die
> Stack-Implementierung aus der API nutzt, variieren die
> Befehle etwas, aber der Grundaufbau ist gleich:
>  
> sucheImStack(alterStack, suchString)
>  - kopiere alterStack in tempStack
>  - erschaffe RückgabeStack
>  - solange tempStack nicht leer
>     - if oberstesElement auf tempStack == suchString
>          - RückgabeStack.push(oberstesElement)
>      -tempStack.pop()
>  - return RückgabeStack

sowas sollte man nur bei einer sehr, sehr schlechten Stack-Implementation machen muessen.

Die Stack<>-Implementation aus der API implementiert etwa java.util.AbstractList, womit man die Elemente einfach enumerieren kann.

> Genauso musst du aufpassen, dass du Strings nicht per "=="
> vergleichen kannst. Schau hierzu dann auch mal in die Java
> API bzw. nach String.equals().

Das hilft bei dieser Aufgabe ebenfalls nicht, da man nach Teilstrings suchen muss (unabhaengig von Gross- und Kleinschreibung).

LG Felix


Bezug
                                        
Bezug
String vergleichen mit Stack: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:51 So 05.12.2010
Autor: Pille456

Laufzeittechnisch sehe ich keinen da keinen Unterschied, beide arbeiten mit O(n) Zeit, weil man sowieso jedes Objekt betrachten muss.
Es ist lediglich eine Designfrage, was man schöner findet und eventuell was momentan einfacher (zu implementieren) ist. Wenn es eine Schulaufgabe ist, denke ich würde der Lehrer eher sowas sehen wollen, wie meinen Vorschlag, da es ja um den Gebrauch von einem Stack geht.

Der versierte Java-Programmierer würde wahrscheinlich eher zu Deiner Methode greifen, weil sie einfacher zu implementieren ist, wahrscheinlich bzgl. einiger konstanter Faktoren schneller wäre und die Richtigkeit der Implementierung sich direkt aus "der Richtigkeit" der Funkionen der API ableitet.

Gut das mit den Teilstrings ist mir durchgegangen, das tut mir Leid. Dann muss man halt mal in der Java API schauen, welche netten Methoden es noch für Strings gibt. Das sollte nicht so schwer sein ;-)

Gruß
Pille

Bezug
                                                
Bezug
String vergleichen mit Stack: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:19 So 05.12.2010
Autor: felixf

Moin Pille,

> Laufzeittechnisch sehe ich keinen da keinen Unterschied,
> beide arbeiten mit O(n) Zeit, weil man sowieso jedes Objekt
> betrachten muss.

von der asymptotischen Laufzeit her macht es keinen Unterschied, da hast du Recht.

Von der praktischen Laufzeit macht es jedoch einen grossen Unterschied. Und vom Speicherverbrauch ebenfalls!

> Wenn es eine Schulaufgabe ist, denke ich würde der Lehrer
> eher sowas sehen wollen, wie meinen Vorschlag, da es ja um
> den Gebrauch von einem Stack geht.

Dann muss man allerdings erstmal eine Kopie vom Stack anlegen. Wenn man nur pushen und poppen kann, ist das nicht mehr so ganz nicht-trivial.

> Der versierte Java-Programmierer würde wahrscheinlich eher
> zu Deiner Methode greifen, weil sie einfacher zu
> implementieren ist, wahrscheinlich bzgl. einiger konstanter
> Faktoren schneller wäre und die Richtigkeit der

Nicht nur wahrscheinlich. Es ist schneller.

Es muss zusaetzlich Speicher allokiert werden (langsam), es wird der Stack erstmal kopiert, und dann wird der Stack durchlaufen.

> Gut das mit den Teilstrings ist mir durchgegangen, das tut
> mir Leid. Dann muss man halt mal in der Java API schauen,
> welche netten Methoden es noch für Strings gibt. Das
> sollte nicht so schwer sein ;-)

Das duerfte recht einfach sein :) Die Java-API ist so ueberladen dass es dafuer sicher etwas passendes gibt ;-)

LG Felix


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Java"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorkurse.de
[ Startseite | Mitglieder | Teams | Forum | Wissen | Kurse | Impressum ]