erstes Arbeiten mit Collections

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,
ich habe noch nicht so den Durchblick mit Collections & brächte bitte eine Art 'Schlachtplan' zu folgender Aufgabe:

"Erstellen Sie eine Klasse ChecksumSortComparator, welche das Interface Comparator implementiert,
wobei die compare-Methode Integer-Werte nach der Quersumme vergleichen soll. Schreiben
Sie eine Anwendung ChecksumSortApplication, die in einer TreeSet die Werte 25455,
468718, 5621118, 155524 und 7526 nach der Quersumme sortiert speichert und diese mit Hilfe eines
Iterators wieder ausgibt."

So,
ich schreibe die Klasse ChecksumSortComparator.
->Was kommt in diese Klasse?
->Was schreibe ich in das Interface Comparator?
->Wohin kommt bei mir die Berechnung der Quersumme?

Wäre top,wenn mir jemand helfen würde.
 
> Was kommt in diese Klasse?
die compare-Operation
> Was schreibe ich in das Interface Comparator?

gar nix, das Interface ist in Java vorgegeben,
du schreibst eine Klasse, die das Interface implementiert: ChecksumSortComparator

> Wohin kommt bei mir die Berechnung der Quersumme?

in die compare-Operation

---------

ohne Wissen und Beispiele für Comparator macht das ganze natürlich wenig Sinn

http://www.galileocomputing.de/open...11_004.htm#mj44ce45c0a85db33fa30b3315d63024d5

insbesondere
Listing 11.7 com/javatutor/insel/util/ClubComparatorDemo.java
 
Hier werden keine Hausaufgaben gemacht.

Edit: War doch der SlaterB wieder schneller
 
Ich ignoriere mal deine Fragen, da diese in die Irre führen.

Du sollst eine Klasse ChecksumSortComparator definieren, die
das Interface Comparator, also die Methode compareTo implementiert.

Code:
class ChecksumSortComparator implements Comparator<Integer> {
  public int compare(Integer a, Integer b) {
     // hier zahl <0, =0, >0 je nach Vergleich zurückliefern
  }
}

Die Anwendung ChecksumSortApplication benutzt dann
diese Klasse mit new ChecksumSortComparator().
 
ok,
ich habe mir vieles durchgelesen & dennoch schaffe ich es nicht auch nicht mit der 'Java ist eine Insel'-Aufgabe.

ich habe die Berechnung der Quersumme erstellt:

Code:
 while (i > 9){
					   
	 i = i%10 + i/10;
					   
	}

soll ich das jetzt in die 'public class ChecksumSortComparator implements Comparator' und die
'public int compare(Quersumme a, Quersumme b)' Methode einbinden?
Ich habe so meine Problem, weil ich doch mehrere Zahlen vergleiche und nicht nur 2 (mich irritiert das Quersumme a, Quersumme b in der Klammer).
Bitte um weitere Hilfe.
 
Das waren nicht die Quersummen, sondern die Eingabezahlen
Code:
compare(a, b)
{
     qa = quersumme(a);
     qb = quersumme(b);
     return qa-qb; // oder so
}
 
und wenn ich mehrere Zahlen zum Vergleich habe?
kann man dann 'compare(a, b, c,...,z)' machen?
 
Die einzig sinnvolle ternäre Relation, die ich mir für z.B. die natürlichen Zahlen denken könnte, wäre "Liegt zwischen". Alles was darüber hinausgeht...
Egal: Man kann immer nur ZWEI Zahlen vergleichen. Wenn man drei Zaheln vergleichen will, vergleicht man die erste mit der zweiten, und dann entweder die erste mit der dritten, oder die zweite mit der dritten, oder beides.
 
Richtig (@Marco 13)

Überleg' doch mal. Was soll denn
Code:
compare(3, 2, 1)
genau liefern? :shock: ???:L :autsch:
 
Aha,
ok den Sinn verstehe ich jetzt.
Also werde ich für meine 5 Zahlen fünf compare Methoden schreiben?
 
Naja, nicht direkt. Er wird seinen Comparator (der eine compare-Methode enthält) einem TreeSet zuweisen, welches dann fünf Mal (oder möglicherweise auch öfter) diese Methode aufrufen wird.

mpG
Tobias

/klugscheiss
 
Ich hasse diese Collections...
Also, wir haben leider nur eine Aufgabe in der Vorlesung durchgenommen...diese habe ich versucht in meine Aufgabe umzuschreiben. Ist dort der richtige Ansatz?

Code:
public class ChecksumSortApplication {

	/**
	 * @param args
	 */
	  public static void main( String[] args ) 
	  { 
		  
		  TreeSet treeset = new TreeSet(new ChecksumSortComparator());
		  
		  treeSet.add(new Integer(25455));
		  treeSet.add(new Integer(468718));
		  treeSet.add(new Integer(5621118));
		  treeSet.add(new Integer(155524));
		  treeSet.add(new Integer(7526));
		  
		  Iterator iterator = treeSet.iterator();
		  
		  while(iterator.hasNext()){
			  System.out.println(iterator.next());
		  }
	  } 


}

-> ist es ok hier die Zahlen direkt einzusetzen?

Code:
public class ChecksumSortComparator implements Comparator {

	/**
	 * @param args
	 */
		
	  public int compare(Object o1, Object o2) { 
		  
		  int i1 = (Integer)o1;
		  int i2 = (Integer)o2;
		  
				   while (i > 9){
					   
					   i = i%10 + i/10;
					   
				   }
			                	  }

}

-> ich bekomme es nicht hin die Zahlen zur Quersummenberechnung zu bekommen...
mit der while-Schleife will ich die Quersumme berechnen, aber wie?!
 
Quersummenberechnung aus der Wikipedia:

Code:
public int quersumme(int s) {
    if(s < 10) return s;
    return quer(s/10) + s % 10;
}

Das würde ich mir als Hilfsfunktion in den Comparator schreiben. In die compare selbst kommt dann sowas wie:

Code:
public int compare(Object o1, Object o2) throws IllegalArgumentException {
    if(!(o1 instanceof Integer || o2 instanceof Integer)) {
         throw new IllegalArgumentException("Unzulässige Argumente!");
    }

    int quer1 = quersumme((Integer) o1);
    int quer2 = quersumme((Integer) o2);

    return quer1.compareTo(quer2);
}

mpG
Tobias
 
Ok, danke.
Aber wie bekomme ich denn hin, dass für alle Zahlen die Quersumme berechnet wird?
Sonst habe ich das bislang alles einzeln berechnet, aber das wäre doch zu umständlich?! Oder?
 
Probier's aus. Du wirst feststellen, das sich um die Quersummenberechnung das Treeset kümmert - It's magic!

mpG
Tobias

P.S.: Sich das im Debugger anzuschauen ist übrigens recht lehrreich.
 
Der Comparator wird immer verwendet, wenn eine Quersumme berechnet werden muß. Und das wird - ohne, dass man es merkt - automatisch für alle Zahlen gemacht. Unter Umständen wird die Quersumme auch mehrfach für die gleiche Zahl berechnet. Das könnte man vermeiden, ist aber nicht unbedingt sinnvoll (und wohl hier auch nicht die Aufgabe).
 
Marco13 hat gesagt.:
Unter Umständen wird die Quersumme auch mehrfach für die gleiche Zahl berechnet.

Aber wirklich nur unter Umständen. :lol:

Und das auch nur, wenn mehr als 2 Zahlen in das
Treeset eingefügt werden; und wer macht schon sowas abartiges 😎

Marco13 hat gesagt.:
Das könnte man vermeiden, ist aber nicht unbedingt sinnvoll (und wohl hier auch nicht die Aufgabe).

Sinnvoll wird's erst dann, wenn soetwas in einer
Produktivumgebung zum Einsatz kommt. Aber als
Hausaufgabe würde ich auch darauf verzichten.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben