tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von genodeftest
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
1130
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    Hallo zusammen,

    hier die Main klasse

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
    String[] initialStrings1 = {"egon", "emil", "emil", "emil", "susi", "ute", "ute"};
            SetList<String> stringList1 = new SetList<String>(initialStrings1);
            System.out.println("\nErste Liste: ");
            System.out.println(stringList1 + "\n");
            String[] initialStrings2 = {"achim", "egon", "egon", "vera"};
            SetList<String> stringList2 = new SetList<String>(initialStrings2);
            System.out.println("Zweite Liste: ");
            System.out.println(stringList2 + "\n");
    Hierzu komm dann die SetList klasse
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    public class SetList<T> {
        
         SetList(T[] initialContents){
             
             java.util.Arrays.toString(initialContents);
     
                     return initialContents;
             
        }
    }

    Die Aufgabe soll wie folgt lauten

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    Ausgabe:
    Erste Liste:
    egon emil(3) susi ute(2)
    Zweite Liste:
    achim egon(2) vera
    Gemischt:
    achim egon(3) emil(3) susi ute(2) vera

    ich will erstmals nur die Erste und die Zweite Liste ausgeben...ohne sortieren, nur das problem ist, dass das Programm mir beim returnen als fehler zeit, ich weiß auch wieso, weil das keinen rückgabetyp hat sondern nur ein Konstruktor ist, nur ich komme nicht mehr weiter :S:S
    wäre nett wenn jem helfen könnte
     

  2. #2
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    868
    Zum beiden Code-Blöcken:
    bitte achte auf die korrekte Einrückung, das hilft beim lesen. In Eclipse kannst du den Formatter (zum automatischen Einrücken) über Source | Format oder Shift+CTRL+F aufrufen, dann wird dein Code automatisch formatiert.

    Zum 1. Code-Block:
    System.out.println(); gibt immer eine neue Zeile aus, das Zeilenumbruchszeichen
    Code :
    1
    
    \n
    brauchst du nicht.

    Zu deinem 2. Code-Block:
    Wenn das ein Constructor sein soll, dann musst du das return-statement entfernen, Konstruktoren haben kein return-Statement.
    (einfach Zeile 7 aus dem geposteten Abschnitt löschen)
    Was möchtest du mit der Zeile 5 aus dem Abschnitt bewirken? Diese Methode dient nur dazu, einen String zurückzugeben, aber du weist ihn nirgends zu.
    Außerdem ist Arrays.toString() wohl nicht die Methode die du suchst. Probier es mal mit Arrays.asList() .
    Wozu brauchst du diese Klasse (SetList) überhaupt?
    Du solltest dir vielleicht die Grundlagen von Java aneignen...
    Dazu ist es hilfreich, dir ein Java-Buch zuzulegen und durchzuarbeiten. Oder du arbeitest dich mal durch die erste Hälfte von http://openbook.galileocomputing.de/javainsel9/

    Statt
    Code java:
    1
    
    SetList<String> stringList2 = new SetList<String>(initialStrings2);
    im 1. Code-Block würde ich in einer for-Schleife die einzelnen Elemente aneinander hängen (dazu eignet sich StringBuilder ), denn nur damit kannst du realisieren, dass die Elemente genau so erscheinen, wie du willst.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  3. #3
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    Zitat Zitat von genodeftest Beitrag anzeigen
    Zum 1. Code-Block:
    System.out.println(); gibt immer eine neue Zeile aus, das Zeilenumbruchszeichen
    Code :
    1
    
    \n
    brauchst du nicht.
    Diesen Code darf ich überhaupt nicht verändern, der ist schon vorgegeben und ich soll nur eine Klasse SetList erstellen, wo er einfach den Inhalt zurück gibt. Nur ich weiß nicht wie außer return...

    Code java:
    1
    
    SetList<String> stringList2 = new SetList<String>(initialStrings2);

    Das ist auch leider schon vorgegeben, alles im ersten Code darf nicht verändert werden

    Ich hab ne Idee, wie ich das ausgeben kann:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    SetList(T[] initialContents){
            
             for(T element : initialContents){
                System.out.printf(element+" ");  
             }
             System.out.println();
             
     
    }
    Das Problem ist, ich darfs nicht hier ausgeben, im Codeblock 1 steht schon in der Zeile 4 und 8 ein System.out.... der das ausgeben soll.
    Geändert von Amaninho (17.06.11 um 15:32 Uhr)
     

  4. #4
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    868
    Dann überschreibe einfach die toString()-Methode von SetList. Diese wird dann von dem Code im 1. Block in dieser Zeile
    Code java:
    1
    
      System.out.println(stringList1 + "\n");
    aufgerufen. Diese Zeile ist nämlich äquivalent zu
    Code java:
    1
    
    System.out.println(stringList1.toString() + "\n");

    Statt den Code in den Constructor zu packen, wie du gerade vorgeschlagen hast, kommt der Code dann in die toString()-Methode, also so:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    @Override
    public String toString(){
          StringBuilder sb = new StringBuilder();
          for(T element : initialContents){
                sb.append(element);
                sb.append(", ");
          }
          return sb.toString();
    }
    Das Array initialContents musst du dann halt noch klassenweit sichtbar speichern.

    Ich wundere mich nur immer noch, wer dir den Code des 1. Blocks als Vorgabe gegeben hat... Für einen Anfänger wäre das noch in Ordnung, aber Anfänger stellen normalerweise keine Aufgaben. Solange die Zeilenumbrüche '\n' nicht entfernt werden, wird die Ausgabe von deinem Code aber nach jeder Zeile eine Leerzeile haben.
    Amaninho bedankt sich. 
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  5. #5
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    Heyy deine Idee ist super.... nur wie mache ich es Klassenweit sichtbar zu machen**** hab hier mal so ne Idee...aber hat leider en Fehler...

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    //private String initialContents;
     
        SetList(T[] initialContents){
             
             //this.initialContents = initialContents;   
             toString(initialContents);
         }
         
         public String toString(T[] initialContents){
             StringBuilder sb = new StringBuilder();
             for(T element : initialContents){
                 sb.append(element);
                 sb.append(", ");
             }
             return sb.toString();
         }

    Das was auskommentiert ist, sollte eig Klassenweit sichtbar werden...iwie klappt es nicht
     

  6. #6
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    ACHHHH Dummheit von mir....du bist der beste es klappt....

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    public T[] initialContents;
        
         SetList(T[] initialContents){
             
             this.initialContents = initialContents;     
             toString();
         }
         
         public String toString(){
             StringBuilder sb = new StringBuilder();
             for(T element : initialContents){
                 sb.append(element);
                 sb.append(", ");
             }
             return sb.toString();
         }

    Jetzt hab ich noch 2 Probleme....
    Meine Ausgabe sieht wie folgt aus
    Erste Liste:
    egon emil emil emil susi ute ute
    Zweite Liste:
    achim egon egon vera
    Aber hab 2 Kleine Probleme.....die wie folgt ausgegeben werden sollen...
    Problem 1:
    Erste Liste:
    egon emil(3) susi ute(2)
    Zweite Liste:
    achim egon(2) vera
    Und Zum schluss muss ich noch beide in einem Array zsmfügen
    Gemischt:
    achim egon(3) emil(3) susi ute(2) vera

    Ich steh voll aufm Schlauch und komme garnicht vorran :S obwohl mir das voll einfach rüber kommt, nur ich komme einfach nicht drauf....
    ein kleiner hinweis wäre echt super
    Geändert von Amaninho (17.06.11 um 22:31 Uhr)
     

  7. #7
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    868
    Tipp: verarbeite das in der toString()-Methode von SetList.
    Die for-Schleife eignet sich dazu gut. du musst allerdings eine temporäre Variable erstellen.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  8. #8
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    Ich weiß bis hierhin, dass man es vllt mit equals lösen könnte.
    einfach in die for-schleife, eine if bedingung und vergleichen....falls wort equals nachfolger dann zähler ++ ansonstens zähler == 1;
    dann einfach ausgeben.....

    aber ich tuh grad mal ein auf dumm und sage das ist meine idee, aber kriegs nicht auf die reihe 2 strings zu vergleichen.... :S kann jem sagen ob meine idee richtig ist? falls ja wie könnte ich sie anwenden?
     

  9. #9
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    868
    deine Idee ist richtig. Probier es aus, das schaffst du schon!
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  10. #10
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    Mir fehlt nur ein kleiner Hinweis, dann würde ich das ganze hinkriegen....
    wie schaffe ich es, den String den ich bekomme in einem Array zu kopieren****?

    Hab hier mal die Idee
    Code java:
    1
    
    T[] woerter = initialContents.split("\\W+");
    Hier weiß ich leider nicht wie ich es zuweisen soll...bitte um Hilfe...

    Der Rest sieht wie folgt aus:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
            Arrays.sort(woerter);
            
            int zaehler = 1;
            String wort = woerter[0];
            
            for (int i = 1; i < woerter.length; ++i) {
                if (!woerter[i].equals(wort)) {
                    System.out.println(wort + " kommt " + zaehler + " mal vor.");
                    wort = woerter[i];
                    zaehler = 1;
                } else {
                    ++zaehler;
                }
            }
            System.out.println(wort + " kommt " + zaehler + " mal vor.");
        }

    ****?
     

  11. #11
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    Habs hinbekommen.....

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    public String toString(){
             StringBuffer sb = new StringBuffer();
             String speicherWert;
             for(T element : initialContents){
                 sb.append(element);
                 sb.append(" ");
             }
     
             speicherWert=sb.toString();
             String[] woerter = speicherWert.split("\\W+");
             Arrays.sort(woerter);
            
             int zaehler = 1;
             String wort = woerter[0];
             StringBuffer ab = new StringBuffer();
             String rueckgabe;
             for (int i = 1; i < woerter.length; ++i) {
                 if (!woerter[i].equals(wort)) {
                     ab.append(wort);
                     ab.append("("+zaehler+")"+" ");
                     wort = woerter[i];
                     zaehler = 1;
                 } else {
                     ++zaehler;
                 }
             }
             ab.append(wort);
             ab.append("("+zaehler+")");
             rueckgabe = ab.toString();
             return " "+rueckgabe;
     
         }

    Gibt es ne Möglichkeit, das ganze als ein Knoten zu programmieren?
     

  12. #12
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    500
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
    for(T element : initialContents){
                 sb.append(element);
                 sb.append(" ");
             }
     
             speicherWert=sb.toString();
             String[] woerter = speicherWert.split("\\W+");
             Arrays.sort(woerter);

    Findest du nicht, dass das ein wenig zu viel ist?
    Nur mal zum Verständnis, du baust aus einem Array einen String um dann aus diesem String wieder ein Array zu machen, welches du sortieren kannst?! OK, ich sehe ein, dass man in die Richtung geht, weil hier nicht sichergestellt ist, dass T von sich aus sortierbar ist (sonst würde Arrays.sort(initialContents) reichen), aber warum machst du woerter[] nicht einfach von der gleichen Größe und fügst da die toString-Werte ein?


    Edit: Worauf ich im großen und Ganzen hinaus will ist folgendes...
    Deine Aufgabe ist mit Generics zu arbeiten, schön und gut, jedoch finde ich das schon alleine von deinem Lehrer ziemlich dumm die "Testklasse" nur mit Strings zu erstellen, denn T könnte alles sein. Und auf diese Weise weißt du nicht, was die einzelnen Elemente bei toString() zurückgeben... Beispiel:
    Angenommen du bleibst bei deiner Variante mit dem Split... Nun hast du eventuell eine Datenbank mit Kunden (eigene Klasse), ein Kunde hat einen Vor- und einen Nachnamen, welche von der toString-Methode zurückgeliefert werden und, ganz wichtig, er enthält ein Leerzeichen dazwischen. Schon hat dein Stringbuffer mehr Token, als wie du es eigentlich möchtest. Verstehst du, was ich meine?
    Geändert von HonniCilest (21.06.11 um 13:41 Uhr)
     
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

Ähnliche Themen

  1. Generics Syntax
    Von Lastlord im Forum Java
    Antworten: 5
    Letzter Beitrag: 03.11.10, 08:50
  2. Generics
    Von bRainLaG im Forum Java
    Antworten: 3
    Letzter Beitrag: 09.12.09, 12:42
  3. Generics
    Von Conkerchen im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 1
    Letzter Beitrag: 31.05.09, 19:18
  4. Generics Problem
    Von Iam_Fiction im Forum Java
    Antworten: 3
    Letzter Beitrag: 13.01.08, 14:59
  5. Casten von Generics
    Von dr-oetker im Forum Java
    Antworten: 2
    Letzter Beitrag: 13.04.07, 09:37