![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Gast
Beiträge: n/a
|
Hi, ich habe folgendes Problem.
ich will ein Programm erstellen, dass mir für eine eingegebene Summe die Kombinatiosnmöglichkeiten von Münzen ausgibt. Die rekursive Ermittlung der Lösung habe ich auch schon erarbeitet. Jedoch muss ich einen vordefinierten Text übernehmen und weiss nun nicht, wie ich eine Variable ansprechen kann. Ich will z.B. die Elemente von dem array innerhalb von "frau" ansprechen. Auch die Hilfe von Eclipse konnte mir hier nicht weiterhelfen. Code:
class WechselGeld {
static int[] w = {1,2,5,10,20,50,100,200}; // Werte der gültigen Euro-Münzen
public static void main(String[] args) {
int betrag = Integer.parseInt(args[0]);
WechselGeld frau = new WechselGeld(new int[] {4,5,3,2,6,7,2,1});
/* Der herr hat nur zwei Münzen zu 1 cent, 3 zu 2 cent,
* keine 5 cent-Münze, eine zu 10 cent und 6 zu 20 cent
*/
WechselGeld herr = new WechselGeld(new int[] {2,3,0,1,6});
System.out.println("
Möglichkeiten " + betrag + " zu wechseln:");
int anzFrau = frau.wechsel(betrag);
System.out.println("
Frau: " + anzFrau );
System.out.println(frau);
WechselGeld@10b62c9 Wäre euch echt dankbar, wenn mir jemand einen Tipp geben kann, wie ich es sschaffe diese array-Elemente anzusprechen; also z.B. 2,3,0,1,6 bei Herr. Gruß, chylde |
|
|
|
Nach oben #4 |
|
Gast
Beiträge: n/a
|
Das mit den arrays ist mir klar; er gibt ja normalerweise sowas wie
Code:
@10b62c9 Wenn ich Code:
System.out.println(frau[0]); Code:
The type of the expression must be an array type but it resolved to WechselGeld |
|
|
|
Nach oben #5 |
|
Gast
Beiträge: n/a
|
... und noch eine technische Anmerkung:
Die Ausgabe "WechselGeld@10b62c9" hat folgenden Hintergrund. Wenn Du einen String so aufbaust: Java Code:
prüft JAVA zunächst ob "frau" den Wert null hat. Wenn ja, wird hier der Text "null" ausgegeben. Wenn frau einen Wert hat, wird die Methode "toString()" des Objektes "frau" aufgerufen, also in dem Fall die Methode "toString()" der Klasse Wechselgeld. Diese Methode hast Du nicht überladen, daher nimmt Java die "toString()" der Klasse Object und die gibt den Klassennamen aus gefolgt von einem "@" und dem Hashcode des Objektes. Also im Klartext: Wenn Du wilst, dass Java hier wie gewünscht regaiert, musst Du die Methode "toString()" überladen. Klicke in Eclipse auf den Menüpunkt "Source", Unterpunkt "Override/Implement Methods..." und wähle "toString" aus. Eclipse generiert dir dann einen Methodenrumpf, den Du nur noch ausfüllen mußt. |
|
|
|
Nach oben #7 | |
|
Gast
Beiträge: n/a
|
Zitat:
Code:
System.out.println(frau.x[0]); |
|
|
|
|
Nach oben #8 |
|
Gast
Beiträge: n/a
|
Okay, mit
Code:
System.out.println(java.util.Arrays.toString(frau.w)); Aber wie spreche ich nun die Arrays von Herr und Frau mit den zur Verfügung stehenden Münzen an? Ich habe alle Kombinationen versucht; aber er will sie einfach nicht ausgeben. Müsste es nicht sowas wie Code:
System.out.println(java.util.Arrays.toString(frau.Wechselgeld)); Er meldet mir dann aber: Code:
frau.Wechselgeld cannot be resolved or is not a field Code:
WechselGeld frau = new WechselGeld(new int[] {4,5,3,2,6,7,2,1});
|
|
|
|
Nach oben #9 |
|
Gast
Beiträge: n/a
|
Hi,
leider hast Du nur einen Auszug des Java.Programmes angegeben. Mit der Zeile Java Code:
rufst Du den Konstruktor der Klasse Wechselgeld auf. Dieser Konstruktor ist eine spezielle Methode innerhalb der Klasse, die in etwa wie folgt aussieht Java Code:
Das public muß dort nicht stehen, es kann auch fehlen oder durch protected bzw. private ersetzt sein. Es kann auch sein, dass der Parameter muenzen anders heißt. Wenn dieser Konstruktor nicht da ist würde sich Dein Programm überhaupt nicht kompilieren lassen. innerhalb dieses Konstrutors wird jetzt das Array der verfügbaren Münzen in ein internes Feld umkopiert. Auf dieses Feld kannst Du zugreifen wie auf "w". Wenn Du nicht weiterkommst, möchte ich Dich bitten, diesen Konstruktor zu veröffentlichen. Dann kann Dir mit sehr hoher Wahrscheinlichkeit geholfen werden |
|
|
|
Nach oben #10 |
|
Gast
Beiträge: n/a
|
Okay, also das ist aktuell der Code:
Code:
class WechselGeld {
static int[] w = {1,2,5,10,20,50,100,200}; // Werte der gültigen Euro-Münzen
static int[] muenzen;
/**
* @param muenzen
*/
public WechselGeld(int[] muenzen) {
int myM[] = muenzen;
System.out.println(java.util.Arrays.toString(muenzen));
// TODO Auto-generated constructor stub
}
public int wechsel(int b){
if(b<0) return 0;
if(b==0) return 1;
System.out.println(WechselGeld.muenzen);
int[] myM = WechselGeld.muenzen;
System.out.println(myM = WechselGeld.muenzen);
System.out.println(java.util.Arrays.toString(muenzen));
System.out.println(java.util.Arrays.toString(w));
return b;
}
public static void main(String[] args) {
int betrag = Integer.parseInt(args[0]);
WechselGeld frau = new WechselGeld(new int[] {4,5,3,2,6,7,2,1});
/* Der herr hat nur zwei Münzen zu 1 cent, 3 zu 2 cent,
* keine 5 cent-Münze, eine zu 10 cent und 6 zu 20 cent
*/
WechselGeld herr = new WechselGeld(new int[] {2,3,0,1,6});
System.out.println("
Möglichkeiten " + betrag + " zu wechseln:");
int anzFrau = frau.wechsel(betrag);
System.out.println("
Frau: " + anzFrau );
System.out.println("
Möglichkeiten " + betrag + " zu wechseln:");
int anzHerr = herr.wechsel(betrag);
System.out.println("
Herr: " + anzHerr);
}
} // class WechselGeld
"WechselGeld.muenzen" NULL? Ausgabe Code:
[4, 5, 3, 2, 6, 7, 2, 1] [2, 3, 0, 1, 6] Möglichkeiten 313 zu wechseln: null null [1, 2, 5, 10, 20, 50, 100, 200] Frau: 313 Möglichkeiten 313 zu wechseln: null null [1, 2, 5, 10, 20, 50, 100, 200] Herr: 313 Wieso wird da kein Wert übergeben? |
|
|
|
Nach oben #11 |
|
Gast
Beiträge: n/a
|
Alles klar, jetzt kann Dir geholfen werden :
Java Code:
Du hattest drei kleinere Probleme: 1.) War das Feld "muenzen" static. Ein static Feld beeutet, dass das Feld für alle Objekte der Klasse identisch ist, wie eben die Werte der Euro-Münzen. Bei der Anzahl gibt es aber pro Objekt (Mann oder Frau) unterschiedliche Kombinationen, also darf das Feld nicht static sein. 2.) Hattest Du im Konstruktor das Feld muenzen gar nicht gefüllt. Den Parameter "muenzen" hattest Du in eine Hilfsvariable myM kopiert, die am Ende des Konstruktors wieder verschwunden ist. 3.) Gibt es in wechsel noch zwei println methoden, die nicht mit Arrays.toString gearbeitet haben und die zudem auf "Wechselgeld.muenzen" zugegriffen haben. Ein solcher Zugriff funktioniert nur bei static-Feldern. Bei normalen Feldern kann man stattdessen "this.muenzen" schreiben oder das this weglassen, wenn keine lokale Variable geleichen Namens vorhanden ist. Viel Erfolg weiterhin bei Deinem Projekt! |
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Problem: Aufruf von Methoden mit Variablen | Alwashe | Allgemeine Java-Programmierung | 4 | 23.02.2007 16:53 |
| Problem bei Verarbeitung von Templates (Eigene Klassen) | dago | PHP-Programmierung | 21 | 31.08.2006 16:02 |
| Rechnen mit Variablen | Bookworm | PHP-Programmierung | 28 | 24.11.2005 16:49 |
| Problem mit private Variablen | Heimwerkerking | PHP-Programmierung | 2 | 18.10.2005 11:34 |
| Problem mit Variablen in Jars | wwwsteel | Allgemeine Java-Programmierung | 3 | 03.09.2004 16:18 |