Generics Array

Amaninho

Grünschnabel
Hallo zusammen,

hier die Main klasse

Java:
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
Java:
public class SetList<T> {
	
	 SetList(T[] initialContents){
	 	 
	 	 java.util.Arrays.toString(initialContents);
 
                 return initialContents;
	 	 
	}
}

Die Aufgabe soll wie folgt lauten

Code:
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
 
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:
\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
Java:
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.
 
Zum 1. Code-Block:
System.out.println(); gibt immer eine neue Zeile aus, das Zeilenumbruchszeichen
Code:
\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...

Java:
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:

Java:
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.
 
Zuletzt bearbeitet:
Dann überschreibe einfach die toString()-Methode von SetList. Diese wird dann von dem Code im 1. Block in dieser Zeile
Java:
  System.out.println(stringList1 + "\n");
aufgerufen. Diese Zeile ist nämlich äquivalent zu
Java:
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:
Java:
@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.
 
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...

Java:
//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 :D:D es klappt....

Java:
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
 
Zuletzt bearbeitet:
Tipp: verarbeite das in der toString()-Methode von SetList.
Die for-Schleife eignet sich dazu gut. du musst allerdings eine temporäre Variable erstellen.
 
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?
 
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
Java:
T[] woerter = initialContents.split("\\W+");
Hier weiß ich leider nicht wie ich es zuweisen soll...bitte um Hilfe...

Der Rest sieht wie folgt aus:
Java:
        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.");
    }

****?
 

Neue Beiträge

Zurück