1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
11
11
ZUGRIFFE
1130
1130
EMPFEHLEN
-
Hallo zusammen,
hier die Main klasse
Hierzu komm dann die SetList klasseCode 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");
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
-
17.06.11 14:33 #2
- 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 Zeilenumbruchszeichenbrauchst du nicht.Code :1
\n
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
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 java:1
SetList<String> stringList2 = new SetList<String>(initialStrings2);
Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
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:
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)
-
17.06.11 16:54 #4
- 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
aufgerufen. Diese Zeile ist nämlich äquivalent zuCode java:1
System.out.println(stringList1 + "\n");
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:
Das Array initialContents musst du dann halt noch klassenweit sichtbar speichern.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(); }
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.Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
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
-
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
Aber hab 2 Kleine Probleme.....die wie folgt ausgegeben werden sollen...Erste Liste:
egon emil emil emil susi ute ute
Zweite Liste:
achim egon egon vera
Problem 1:
Und Zum schluss muss ich noch beide in einem Array zsmfügenErste Liste:
egon emil(3) susi ute(2)
Zweite Liste:
achim egon(2) vera
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 superGeändert von Amaninho (17.06.11 um 22:31 Uhr)
-
17.06.11 23:07 #7
- 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)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
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?
-
18.06.11 00:27 #9
- 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)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
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
Hier weiß ich leider nicht wie ich es zuweisen soll...bitte um Hilfe...Code java:1
T[] woerter = initialContents.split("\\W+");
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."); }
****?
-
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?
-
21.06.11 12:42 #12Code java:
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
-
Generics Syntax
Von Lastlord im Forum JavaAntworten: 5Letzter Beitrag: 03.11.10, 08:50 -
Generics
Von bRainLaG im Forum JavaAntworten: 3Letzter Beitrag: 09.12.09, 12:42 -
Generics
Von Conkerchen im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 1Letzter Beitrag: 31.05.09, 19:18 -
Generics Problem
Von Iam_Fiction im Forum JavaAntworten: 3Letzter Beitrag: 13.01.08, 14:59 -
Casten von Generics
Von dr-oetker im Forum JavaAntworten: 2Letzter Beitrag: 13.04.07, 09:37





Zitieren
Login





