Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.
This thread is closed.

double

Trainee

  • "double" is male
  • "double" started this thread

Posts: 43

Date of registration: May 12th 2004

Location: Barsinghausen

1

Wednesday, May 12th 2004, 9:28pm

Java - 4. Übungsblatt

Wie habt ihr das Setzen der Farbtabelle gelöst?

mein Source z.Zt:

//benötigte Varibalen in FarbWerkzeuge

public class FarbWerkzeuge {
private static int maxanzahl=4; // für TestFarbe.java ausreichend
private static String[] name = new String[maxanzahl];
private static Farbe[] werte = new Farbe[maxanzahl];
}

//Die Tabelle entsteht dann durch kopieren des
// gegebenen Arrays in das Array der Klasse FarbWerkzeuge:

public static void setzeTabelle(String[] namen, Farbe[] werte) {
FarbWerkzeuge.name = namen[i];
FarbWerkzeuge.werte[i]= werte[i];
}

Mich stört, das die Anzahl der Elemente die die Arrays "namen" und "werte"
aufnehmen können vordefiniert ist und nicht zur Laufzeit angepasst werden können.

Setzt man z.B. maxanzahl=1000 um auf Nummer sicher zu gehen, ist
das Feld überdimensioniert und verbraucht viel ungenutzen Speicher.

Mir fallen dazu nur folgende Stichwörter aus der VL ein: Reflection, selbstmod. Code bzw. Vektoren.
Hat da einer von euch nen Plan???

This post has been edited 2 times, last edit by "double" (May 12th 2004, 9:31pm)


kritop

Junior Schreiberling

  • "kritop" is male

Posts: 223

Date of registration: Sep 22nd 2003

Location: Bochum

2

Wednesday, May 12th 2004, 9:50pm

Hi !

Ich habe das so gelöst...

public class FarbWerkzeuge {
private static String[] s;
private static Farbe[] f;

public static void setzeTabelle(String[] namen,Farbe[] werte) {
s = namen;
f = werte;
}
}

jetzt kannst du f und s benutzen um in erzeugeFarbe nach dem String und den werten zu suchen... Gefüttert wird die "Tabelle" ja von der gegebenen Farbtest.java
Wer es gelernt hat, sich von der Herrschaft des Ärgers zu befreien, wird das Leben viel lebenswerter finden. Bertrand Russel

This post has been edited 2 times, last edit by "kritop" (May 12th 2004, 10:02pm)


  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

3

Wednesday, May 12th 2004, 10:05pm

RE: Java - 4. Übungsblatt

Quoted

Original von double
Mich stört, das die Anzahl der Elemente die die Arrays "namen" und "werte"
aufnehmen können vordefiniert ist und nicht zur Laufzeit angepasst werden können.

Setzt man z.B. maxanzahl=1000 um auf Nummer sicher zu gehen, ist
das Feld überdimensioniert und verbraucht viel ungenutzen Speicher.

Mir fallen dazu nur folgende Stichwörter aus der VL ein: Reflection, selbstmod. Code bzw. Vektoren.
Hat da einer von euch nen Plan???
An ein solches Problem würde man üblicherweise mit einer Map herangehen. Reflection ist in Java nur in den seltensten Fällen nötig.

kritops Lösung ist aber denke ich die geforderte.

Es wundert mich aber ohnehin etwas, wieso in der Aufgabe Arrays verwendet werden, obwohl eine Zuordnungstabelle doch IMHO die passendere Datenstruktur wäre.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

This post has been edited 1 times, last edit by "Joachim" (May 12th 2004, 10:06pm)


Arne

ThI

  • "Arne" is male

Posts: 1,798

Date of registration: Oct 7th 2002

Location: Hannover :)

Occupation: Lecturer ThI

4

Wednesday, May 12th 2004, 10:46pm

Hab ich mich auch schon gefragt. Als ich die Aufgabe gelesen hatte, kam mir als erstes sofort HashTable in den Kopf. Naja was solls ;)

@double: Es wäre taktisch in deiner setzeTabelle Methode noch eine for-schleife um deine Arrayzuweisungen zu setzen, sonst machen die i's auch nicht wirklich Sinn...
Zur Initialisierungsgröße der Arrays: ich hab am Anfang der setzeTabelle Methode einfach die Arrays auf die Größe, der übergebenen gesetzt. Das haut ja auch hin...
"NP - The class of dashed hopes and idle dreams." Complexity Zoo

double

Trainee

  • "double" is male
  • "double" started this thread

Posts: 43

Date of registration: May 12th 2004

Location: Barsinghausen

5

Thursday, May 13th 2004, 12:38am

@kritop: thx!

@vier: habe die for-schleife im code-schnipsel von setzeTabelle extra weggelassen, damit der Beitrag nicht noch länger wird.
Aber ich dachte wenn ich die gewählte Schreibweise benutze ergänzt jeder Leser für sich die for-schleife automatisch!
Vertraue quasi dem anthropogenem Code-Prediction Algorithmus ;-) Wie mans macht...

Allgemein:
Spricht neben einer Lösung die mit Maps arbeitet etwas gegen den Einsatz eines Vektors?

This post has been edited 1 times, last edit by "double" (May 13th 2004, 12:46am)


Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

6

Thursday, May 13th 2004, 1:13am

Quoted

Allgemein:
Spricht neben einer Lösung die mit Maps arbeitet etwas gegen den Einsatz eines Vektors?

Naja, beides ist durch die Aufgabenstellung nicht gefordert worden.
Das ein Array zur Laufzeit nicht angepasst wird, hat schon seine Richtigkeit. Der Array ist eh' schon gesetzt und seine Grösse kann bequem mit .length abgefragt werden. Da muss man nicht auf Nummer sicher gehen.

Die Methode von Kritop ist schon ok (wird im CIP so abgenommen),
man sollte sich aber bewusst sein, dass hier nur(!) Referenzen gesetzt werden.

Kleines Beispiel:

Source code

1
2
3
Farbe a = new Farbe( 0, 0, 0);
Farbe b = a;
b.setFarbe( 1, 2, 3); // hier wird Objekt a ebenfalls neu gesetzt!

Ein Objekt kann nur so kopiert werden:

Source code

1
2
3
4
  public static void setzeTabelle( String[] name, Farbe[] wert)
  { namen = ( String[]) name.clone();
    werte = ( Farbe[])  wert.clone();
  }

Die Methode .clone() gibt ein Objekt zurück, dies wird per TypeCast in
die gewünschte Form gebracht, fertig. Anschliessend ist sauber differenziert, wenn dies auch nicht explizit gefordert wurde.

Ergo brauchst Du die For Schleife auch nur für mitteln() und erzeugeFarbe(), ein Beispiel:

Source code

1
2
3
4
5
 public static Farbe erzeugeFarbe( String name)
  { int i = 0;
    for ( int j = 0; j < namen.length; j++){ if ( name == namen[ j]){ i = j;}}           
     return werte[ i];
  }

Schade find ich nur, dass die ganze Aufgabe "static" ist. :(
"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

This post has been edited 1 times, last edit by "Cpt. Iglu" (May 13th 2004, 1:14am)


np

Junior Schreiberling

Posts: 155

Date of registration: Oct 23rd 2002

7

Thursday, May 13th 2004, 8:43am

Hallo allerseits,

ich finde es sehr löblich, dass hier so viel über die Übungen diskutiert wird. Letztlich lernt man am besten, indem man den Stoff mit anderen bespricht und sich gegenseitig erklärt.

Ich hätte allerdings eine kleine Bitte: Postet nicht so ausführliche Code-Teile. Ich weiß, dass es hier eine Grauzone zwischen einer Teillösung und einer Komplettlösung gibt, aber versucht bitte im Zweifelsfall eher euren Ansatz zu erklären, statt die ganze Lösung zu posten.

Ansonsten finde ich es wie gesagt sehr gut, dass hier diskutiert wird.

@Joachim: Natürlich sind Maps bzw. Hashtables hier die bessere Lösung (zumal für größere Tabellen), aber es ging mir darum, erst einmal ein Array an einem kleinen Beispiel auszuprobieren.

yv

Junior Schreiberling

  • "yv" is female

Posts: 229

Date of registration: Dec 11th 2001

8

Thursday, May 13th 2004, 3:53pm

Wie FarbTest einbinden?

Hallo,
ich bekomme es leider nicht hin, das Package ueb4test, in dem FarbTest und Farbe sind, korrekt einzubinden.
Eclipse macht das zwar ganz komfortabel (Import... Zip File), legt auch ein solches package an, schmeisst dann aber die Meldung
"Error: The declared package does not match the expected package ue4test".
Kenne mich leider mit der Plattform noch nicht ausreichend aus, um damit was anzufangen (außer Package wieder löschen, was mich nicht wirklich weiterbringt).

Manuelles reinkopieren auf eine Höhe mit FarbeCMY etc. ging leider auch nicht gut.
Weiss jemand wie es fehlerfrei geht?


Danke schonmal.

Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

9

Thursday, May 13th 2004, 4:22pm

Hi, ue4test ist kein Package. FarbTest und Farbe liegen nur als .java vor.
Die müssen erst noch kompiliert werden.

Entpack einfach die .jar Datei in den Ordner mit FarbWerkzeuge.java und kompiliere Farbe, da Du dessen Methoden für Deinen eigenen Quellcode brauchen wirst.
"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

This post has been edited 1 times, last edit by "Cpt. Iglu" (May 13th 2004, 4:24pm)


Arne

ThI

  • "Arne" is male

Posts: 1,798

Date of registration: Oct 7th 2002

Location: Hannover :)

Occupation: Lecturer ThI

10

Thursday, May 13th 2004, 6:44pm

RE: Wie FarbTest einbinden?

Quoted

Original von yv
Hallo,
ich bekomme es leider nicht hin, das Package ueb4test, in dem FarbTest und Farbe sind, korrekt einzubinden.
Eclipse macht das zwar ganz komfortabel (Import... Zip File), legt auch ein solches package an, schmeisst dann aber die Meldung
"Error: The declared package does not match the expected package ue4test".
Kenne mich leider mit der Plattform noch nicht ausreichend aus, um damit was anzufangen (außer Package wieder löschen, was mich nicht wirklich weiterbringt).

Manuelles reinkopieren auf eine Höhe mit FarbeCMY etc. ging leider auch nicht gut.
Weiss jemand wie es fehlerfrei geht?


Danke schonmal.


Ja, hatte exakt den selben Fehler auch und weiß nun auch wodran es lag. Gib in Eclipse, wenn Du ein neues Projekt aufmachst direkt den Ordner, in dem die ue4-Klassen drin sind an und nicht den Workspace und versuche sie dann zu verlinken, das gibt Probleme.
"NP - The class of dashed hopes and idle dreams." Complexity Zoo

kritop

Junior Schreiberling

  • "kritop" is male

Posts: 223

Date of registration: Sep 22nd 2003

Location: Bochum

11

Thursday, May 13th 2004, 7:45pm

Du kannst auch wie auf der gdv Seite beschrieben einfach jar xvf uetest.jar machen und die beiden .java Dateien dann einfach in dein eclipse Package importieren...Vergiss aber nicht package packagename; in die .java Dateien einzufügen...
Wer es gelernt hat, sich von der Herrschaft des Ärgers zu befreien, wird das Leben viel lebenswerter finden. Bertrand Russel

This post has been edited 1 times, last edit by "kritop" (May 13th 2004, 7:47pm)


  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

12

Friday, May 14th 2004, 2:32pm

Quoted

Original von double
Allgemein:
Spricht neben einer Lösung die mit Maps arbeitet etwas gegen den Einsatz eines Vektors?
Allgemein spricht dagegen:
  • Vector ist eine "Legacy Implementation" innerhalb des Collection Frameworks, d. h. diese Klasse ist hauptsächlich aus Kompatibilitätsgründen noch vorhanden. Vorzugsweise sollte die Klasse ArrayList verwendet werden. (Gleiches gilt übrigens für Hashtable und HashMap.)
  • Man sollte eher in Interfaces denken und auch programmieren, das bringt deutlich mehr Flexibilität bei späteren Refactorings (Zitat Erich Gamma: "Program to an interface, not an implementation"). Statt Vector bzw. ArrayList würde man hier gegen das Interface List programmieren und nur für die Instantiierung Vector bzw. ArrayList verwenden.


Speziell hier spricht dagegen:
  • Die Daten werden als Array übergeben, da macht es eigentlich keinen Sinn, diese in eine andere Datenstruktur zu überführen.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

double

Trainee

  • "double" is male
  • "double" started this thread

Posts: 43

Date of registration: May 12th 2004

Location: Barsinghausen

13

Friday, May 14th 2004, 4:41pm

Quoted

Original von Joachim
  • Die Daten werden als Array übergeben, da macht es eigentlich keinen Sinn, diese in eine andere Datenstruktur zu überführen.


Da gebe ich dir Recht!
Meine Absicht war es jedoch auch den Array in TestFarbe.java durch einen Vektor zu ersetzen, da mir die Idee Elemente während der Laufzeit hinzuzufügen gefiel.

Allerdings, das wurde von Dir und np ja schon angesprochen, wäre
das auch noch keine optimale Lösung bzw. kein guter Stil (...)

Anmerkung:
@Eclipse-User: Fragen zur Bedienung von Eclipse (und anderen IDE's) könnten auch in einem extra Topic untergebracht werden ;)

This post has been edited 3 times, last edit by "double" (May 14th 2004, 8:37pm)


Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

14

Friday, May 14th 2004, 6:24pm

Quoted

Vielen Dank für die Anregungen und Tipps wie man Aufgabe 4, die in ihrer "Einfachheit" nur die Java-Programmierung üben soll, informatisch "optimal" lösen kann!

Immer schön wenn man neue Intentionen zum proggen bekommt.

Hmm, HashTable ... toll. Statt OOP lieber AOP (AmsterdamOrientierte Programmierung)! :tongue:
"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

This post has been edited 1 times, last edit by "Cpt. Iglu" (May 14th 2004, 6:27pm)


double

Trainee

  • "double" is male
  • "double" started this thread

Posts: 43

Date of registration: May 12th 2004

Location: Barsinghausen

15

Friday, May 14th 2004, 8:42pm

@iglu: mein Kommentar war nicht ironisch gemeint

Cpt. Iglu

Trainee

  • "Cpt. Iglu" is male

Posts: 83

Date of registration: Oct 9th 2003

16

Friday, May 14th 2004, 9:31pm

"Intuitive Software ist leicht zu lernen. Man muß nur lange genug mit ihr arbeiten."

Ponder Stibbons

cowhen

Muuuh!

  • "cowhen" is male

Posts: 1,374

Date of registration: Dec 13th 2001

17

Friday, May 14th 2004, 11:25pm

Hallo,

dieses Forum ist für fachspezifische Diskussionen gedacht. Lief bisher ja auch sehr gut. Gegen ein paar Kommentare am Rande hat auch niemand was!
Aber der Thread hier ist ja langsam schon jenseits von Offtopic. 8o

Wir (gemeinsame Entscheidung der Mods) schliessen das hier mal mit der Bitte um:
-Neuen Thread in Smalltalk für die Pinguin Bilder.
-Neuer Thread hier für weitere Diskussionen über die Aufgabe.
-Evlt. Thread in TechTalk für Eclipse-Diskussionen.

cu

cowhen
plenty of time to relax when you are dead