Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > Problem bei Aufruf einer Variablen von Objekt
Antwort
 
Themen-Optionen
Alt 19.01.2005, 19:03   Nach oben    #1
chylde
Gast
 
Beiträge: n/a
Standard Problem bei Aufruf einer Variablen von Objekt

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);
Eine Ausgabe von frau ergibt z.B.

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
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2005, 19:27   Nach oben    #2
Fuzzy
Gast
 
Beiträge: n/a
Standard

Dur kannst ein array nicht als ganzes ausgeben, sondern nur die Elemente des arrays.

frau[0] könntest Du z.B. ausgeben.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2005, 19:36   Nach oben    #3
Fuzzy
Gast
 
Beiträge: n/a
Standard

In Java 5.0 gibt es außerdem eine Systemfunktion, mit der Du ganze Arrays ausgeben kannst:

Java Code:
  1. int[] x = { 1,2,3 };
  2.         System.out.println(java.util.Arrays.toString(x));
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2005, 19:44   Nach oben    #4
chylde
Gast
 
Beiträge: n/a
Standard

Das mit den arrays ist mir klar; er gibt ja normalerweise sowas wie
Code:
@10b62c9
aus, wenn man nur das array selbst anspricht.
Wenn ich
Code:
System.out.println(frau[0]);
versuche, kriege ich von Eclipse folgende Meldung:
Code:
The type of the expression must be an array type but it resolved to WechselGeld
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2005, 19:48   Nach oben    #5
Fuzzy
Gast
 
Beiträge: n/a
Standard

... und noch eine technische Anmerkung:

Die Ausgabe "WechselGeld@10b62c9" hat folgenden Hintergrund. Wenn Du einen String so aufbaust:

Java Code:
  1. System.out.println("Frau = " + frau);

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.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2005, 19:52   Nach oben    #6
Fuzzy
Gast
 
Beiträge: n/a
Standard

... Du hattest leider nicht die vollständige Klasse abgebildet. Was z.B. fehlt sind die lokalen Felder. Ich gebe einfach mal ein Beispiel:

Java Code:
  1. public class X {
  2.    private int[] w;
  3.  
  4.    public X(int[] w) {
  5.       this.w = w;
  6.   }
  7.  
  8.  public String toString() {
  9.     return "Wechselgeld = " + java.util.Arrays.toString(w);
  10.  }
  11. }
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2005, 19:55   Nach oben    #7
Fuzzy
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von chylde
Wenn ich
Code:
System.out.println(frau[0]);
versuche, kriege ich von Eclipse folgende Meldung:
Code:
The type of the expression must be an array type but it resolved to WechselGeld
Die Meldung kommt, wenn Du den Feldnamen nicht mit angibst. Du brauchst etwas in der Art

Code:
System.out.println(frau.x[0]);
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2005, 20:55   Nach oben    #8
chylde
Gast
 
Beiträge: n/a
Standard

Okay, mit
Code:
System.out.println(java.util.Arrays.toString(frau.w));
kann ich also das w-array; die benutzbaren Münzen ausgeben lassen.

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));
sein?

Er meldet mir dann aber:
Code:
frau.Wechselgeld cannot be resolved or is not a field
Es geht um diesen Aufruf:
Code:
WechselGeld frau = new WechselGeld(new int[] {4,5,3,2,6,7,2,1});
in der main()
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2005, 22:18   Nach oben    #9
Fuzzy
Gast
 
Beiträge: n/a
Standard

Hi,

leider hast Du nur einen Auszug des Java.Programmes angegeben. Mit der Zeile

Java Code:
  1. WechselGeld frau = new WechselGeld(new int[] {4,5,3,2,6,7,2,1});

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:
  1. public Wechselgeld(int[] muenzen) {
  2.   // irgendein code
  3. }

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
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.01.2005, 07:21   Nach oben    #10
chylde
Gast
 
Beiträge: n/a
Standard

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
Wieso erhalte ich nun für
"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
In der public kann ich die arrays ja ausgeben, s.o.
Wieso wird da kein Wert übergeben?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.01.2005, 08:09   Nach oben    #11
Fuzzy
Gast
 
Beiträge: n/a
Standard

Alles klar, jetzt kann Dir geholfen werden :

Java Code:
  1. class WechselGeld {
  2.       static int[] w = {1,2,5,10,20,50,100,200}// Werte der gültigen Euro-Münzen
  3.  
  4.       int[] muenzen; // Anzahl der Münzen, die diese spezielle Person hat.
  5.       
  6.       /**
  7.        * @param muenzen
  8.        */
  9.         public WechselGeld(int[] muenzen) {
  10.            this.muenzen = muenzen;
  11.            System.out.println(java.util.Arrays.toString(muenzen));
  12.            // TODO Auto-generated constructor stub
  13.         }
  14.  
  15.         public int wechsel(int b){
  16.          if(b<0) return 0;
  17.          if(b==0) return 1;
  18.             System.out.println(java.util.Arrays.toString(muenzen));
  19.             int[] myM = muenzen;
  20.           System.out.println(java.util.Arrays.toString((myM = muenzen)));
  21.                  System.out.println(java.util.Arrays.toString(muenzen));
  22.                  System.out.println(java.util.Arrays.toString(w));
  23.         
  24.         return b;
  25.       }
  26.     
  27.       public static void main(String[] args) {
  28.         int betrag = Integer.parseInt(args[0]);
  29.       
  30.         WechselGeld frau = new WechselGeld(new int[] {4,5,3,2,6,7,2,1});
  31.                           /* Der herr hat nur zwei Münzen zu 1 cent, 3 zu 2 cent,
  32.                            * keine 5 cent-Münze, eine zu 10 cent und 6 zu 20 cent
  33.                            */
  34.         WechselGeld herr = new WechselGeld(new int[] {2,3,0,1,6});
  35.  
  36.         System.out.println("Möglichkeiten " + betrag + " zu wechseln:");
  37.         int anzFrau = frau.wechsel(betrag);
  38.         System.out.println("FFrau:  " + anzFrau );
  39.       
  40.         System.out.println("Möglichkeiten " + betrag + " zu wechseln:");
  41.         int anzHerr = herr.wechsel(betrag);
  42.         System.out.println("Herr:  " + anzHerr);
  43.       }
  44.     } // class WechselGeld

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!
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ä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


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:03 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

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 33 34 35 36 37 38 39 40 41 42 43 44