• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

[Java Problem] Statische Methoden

frogi

Spiele-Enthusiast/in
Mitglied seit
11.05.2004
Beiträge
1.352
Reaktionspunkte
0
Hi,
wie deklariere, verwende ich statische Methoden?
Ich habe es jetzt so gemacht:

public class RoemischeFlaechen {

public static int addiereFlaechen(int n) {


}

}


Da meckert er immer was von "missing return statement".

:confused:
 
AW: Statische Methoden

frogi am 01.11.2008 11:34 schrieb:
Da meckert er immer was von "missing return statement"
Ähm, das ist doch schon die Antwort :confused:
Es fehlt das Return...

public static int addiereFlaechen(int n) {
return n;
}

Wobei man eigentlich auch statische Methoden vermeidet, sofern sie nicht wirklich angebracht sind...
 
AW: Statische Methoden

Jo dir fehlt der return...
Außerdem kann man im Gegensatz zu "dynamischen"-Methoden die Static-Funktionen ohne Objekt aufrufen.
Bei Static-Attribute(Klassenattribute) exisitiert der Wert solange bis Programm beendet wird. Ich glaub dann ist sogar der Speicherplatz bereits verfügbar.
 
AW: Statische Methoden

"illegal start of expression" und "cannot ind symbol" :confused:

bei dem hier:

public class RoemischeFlaechen {

public static void main(String[] args) {

/*Dokumentation der Methoden*/

public static int addiereFlaechen(int Flaeche1, int Flaeche2);
return Flaeche; }

int Flaechen;
Flaechen = 60;

public static int addiereQuadratruten(Quadratrute1, Quadratrute2);
return


public static int gibDifferenz(Differenz1, Differenz2);
return D;



Was ist da falsch?
 
AW: Statische Methoden

frogi am 05.11.2008 15:51 schrieb:
Was ist da falsch?
Wie wäre es, wenn du mal einen kompletten Quelltext postet, d.h. inklusive aller Klammern etc.?

Denn dein Code ist ziemlich "kaputt".
 
AW: Statische Methoden

public class RoemischeFlaechen {

public static void main(String[] args) {

/*Dokumentation der Methoden*/


public static int addiereFlaechen(Flaeche1, Flaeche2);
return


public static int addiereQuadratruten(Quadratrute1, Quadratrute2);
return


public static int gibDifferenz(Differenz1, Differenz2);
return


}
}


das ist er erstmal, nachdem alles rot war hab ich natürlich erstmal abgebrochen.
was muss hinter return stehen?
und warum sagt er "illegal start" ? is doch nicht anders als sonst... oder muss dieses public static void raus?
 
AW: Statische Methoden

Ich kenne mich mit Java nicht aus, aber hinter return muss ein int-Wert stehen, da du int als Rückgabewert angegeben hast (public static int addiereFlaechen(Flaeche1, Flaeche2)).

Ansonsten sollte das so funktionieren:

Code:
public static int addiereFlaechen(Flaeche1, Flaeche2)
{
      return 5; // Hier einfach ne einen anderen Wert oder Variable angeben
}

Du darfst nach dem "public static int addiereFlaechen(Flaeche1, Flaeche2)" kein Semikolon setzen, sondern einfach Klammern wie oben.

Es kann sein, dass nicht alles 100%ig stimmt, ich übertrage das jetzt mal dreisterweise von anderen Sprachen... ;)
 
AW: Statische Methoden

Ich weiß zwar überhaupt nicht was genau du willst, aber das hier kompiliert immerhin:

Code:
public class RoemischeFlaechen { 
    public static int addiereFlaechen (int Flaeche1, int Flaeche2) {
        return Flaeche1 + Flaeche2;
    }
    public static int addiereQuadratruten (int Quadratrute1, int Quadratrute2) {
        return Quadratrute1 + Quadratrute2;
    }
    public static int gibDifferenz (int Differenz1, int Differenz2) {
        return Differenz1 - Differenz2;
    }
}

Du hast nicht wirklich Ahnung von Java, oder?
 
AW: Statische Methoden

Hey, nicht so direkt ja... ;)
Java geht einigermaßen aber ich hatte vorher noch nie mit statischen Sachen gearbeitet :(
 
AW: Statische Methoden

Unfassbar was heute los ist :pissed:
Ich lass das Prog durchlaufen, geht, ich beende es.
Mache es wieder an, will es durch laufen lassen, kommt aufeinmal das:

"no main classes found" arrr >:|

Habe alles kontrolliert, java dokument liegt im src ordner, alles korrekt aber er findet nur den projektordner.
Was ist das los?
 
AW: Statische Methoden

frogi am 05.11.2008 16:56 schrieb:
Haste evtl die Klasse umbennant? Die Klasse sollte genauso heißen, wie der Dateiname.

btw: bei der Differenz würde sich der Absolutwert auch anbieten, damit man nicht auf die Reihenfolge achten muss.
Oben bei den Imports noch "import java.lang.Math.abs" hinzufügen, wobei Eclipse das ja auch automatisch macht.

public static int gibDifferenz (int Differenz1, int Differenz2) {
return Math.abs(Differenz1 - Differenz2);
}
 
AW: Statische Methoden

frogi am 05.11.2008 16:56 schrieb:
Unfassbar was heute los ist :pissed:
Ich lass das Prog durchlaufen, geht, ich beende es.
Mache es wieder an, will es durch laufen lassen, kommt aufeinmal das:

"no main classes found" arrr >:|

Habe alles kontrolliert, java dokument liegt im src ordner, alles korrekt aber er findet nur den projektordner.
Was ist das los?
Wie wäre es wenn du deinen neuen Quelltext postest? Meine Kristallkugel ist nämlich in Reparatur.


edit:

Wenn ich Google richtig interpretiere, scheint das ein NetBeans-spezifisches Problem sein. Hol dir 'ne gescheite IDE! :-D
 
AW: Statische Methoden

jetzt gehts :top:
danke.

nur noch ein kleines problem:

erstmal so ... mit 2 Testzahlen ( 76 und 56 ). Aber warum meckert er immer noch bei der system.out Zeile "cannot find symbol" und "addiere Flaechen in roemische flaechen cannot be applied to flaechen1, flachen2 ???

public class RoemischeFlaechen {

/** Mainmethode */

public static void main(String[] args) {

/* Berechnung der Testfaelle */

System.out.println(addiereFlaechen(Flaechen1, Flaechen2));

}

/** Methode addiere Flaechen */

public static int addiereFlaechen(int Flaechen1, int Flaechen2) {

int flaechen1;
flaechen1 = 76;

int flaechen2;
flaechen2 = 56;


return flaechen1 + flaechen2;

}

/** Methode addiere Quadratruten */

public static int addiereQuadratruten(int Quadratruten1, int Quadratruten2) {
return Quadratruten1 + Quadratruten2;

}

/** Methode gib Differenz */

public static int gibDifferenz(int Differenz1, int Differenz2) {
return Differenz1 - Differenz2;

}
}
 
AW: Statische Methoden

frogi am 06.11.2008 10:15 schrieb:
jetzt gehts :top:
danke.

nur noch ein kleines problem:

erstmal so ... mit 2 Testzahlen ( 76 und 56 ). Aber warum meckert er immer noch bei der system.out Zeile "cannot find symbol" und "addiere Flaechen in roemische flaechen cannot be applied to flaechen1, flachen2 ???
In der Main-Methode versuchst du bei
Code:
System.out.println(addiereFlaechen(Flaechen1, Flaechen2));
der Methode addiereFlaechen zwei vorher nicht deklarierte Variablen zu übergeben.


In etwa so sollte es aussehen:
Code:
public class RoemischeFlaechen {
	public static void main (String[] args) {
		int flaeche1 = 76;
		int flaeche2 = 56;
		System.out.println(addiereFlaechen(flaeche1, flaeche2));
	}
	public static int addiereFlaechen(int flaeche1, int flaeche2) {
		return flaeche1 + flaeche2;
	}
}
 
AW: Statische Methoden

geschafft :)

aber noch nicht ganz...

ich möchte nähmlich mit römischen flächeneinheiten rechnen.

Flächeneinheiten:

- Quadratrute ( Q )
- Acker ( A ) -> 1 Acker = 144 Quadratruten
- Morgen ( M ) -> 1 Morgen = 4 Acker
Großhufe ( G ) -> 1 Großhufe = 100 Morgen

Die Flächenangabe erfolgt im Format GGGMMAQQQ, wobei GGG für eine dreistellige Anzahl Großhufe, MM für eine zweistelluige Anzahl Morgen, A für eine einstellige Anzahl Acker und QQQ für eine dreistellige Anzahl Quadratrute steht.

Beispiel:

25953125 = 25 Großhufe, 95 Morgen, 3 Acker und 125 Quadratrute.

101081007 = 101 Großhufe, 8 Morgen, 1 Acker und 7 Quadratrute.


Um halt immer auf das Format GGGMMAQQQ zu kommen, werden Stellen mit 0 aufgefüllt.

Jetzt soll die Methode int addiereQuadratruten(int1, int2) eine Fläche im Format GGGMMAQQQ zurückgeben, wobei der erste Parameter das selbige Format haben soll, der zweite ABER in Quadraruten dargestellt sein soll.

Das Umrechnen in Quadratruten ist kein Problem, siehe ganz oben, da steht ja schon alles.

Aber wie schreibe ich die Methode richtig und rechne korrekt um wieder das Format GGGMMAQQQ ausgeben zu können, weil der eine Parameter soll ja in Quadratruten sein.

Das ist mir nicht ganz klar, muss ich da innerhalb der Methode umrechnen?
Oder kann ich auch noch eine zusätliche Methode erstellen, die dieses Umrechnungsprozedere ausführt??
 
AW: Statische Methoden

frogi am 06.11.2008 18:47 schrieb:
Beispiel:

25953125 = 25 Großhufe, 95 Morgen, 3 Acker und 125 Quadratrute.

101081007 = 101 Großhufe, 8 Morgen, 1 Acker und 7 Quadratrute.
Da gibts jetzt natürlich mehrere Methoden. Du könntest alles als Text auffassen und dann Substrings bilden.
Ich würds wahrscheinlich noch auf die mathematische Methode machen:

n = 25953125;

quadratrute = n % 1000;
n = (n - quadratrute) / 1000;
acker = n % 10;
n = (n - acker) / 10;
morgen = n % 100;
n = (n - morgen) / 100;
grosshufe = n;

Man kann in Java auch viel mit solchen Formatierungen arbeiten, aber weiß ich grad net genau, wie das geht und würde der Aufwand hier wohl die Kosten/Nutzen-Rechnung sprengen.
 
AW: Statische Methoden

n = 25953125;

quadratrute = n % 1000;
n = (n - quadratrute) / 1000;
acker = n % 10;
n = (n - acker) / 10;
morgen = n % 100;
n = (n - morgen) / 100;
grosshufe = n;

wie und wo setze ich dies dann in meinen source code ein? müsste ich dann nicht noch zusätlich acker, morgen und großhufen deklarieren?

ich hatte eher gedacht, das es einen weg gibt das mit der umrechnung in der statischen methode selbst miteinzubringen.

z.b: public static int addiereflaechen(umrechnung quadratrute, morgen, acker zu x)(int flaeche1, int flaeche2)) ? so etwas in der art? :confused:
 
AW: Statische Methoden

Naja, die Umrechnung kannste schon ausgliedern, aber es macht keinen Sinn dafür immer neue Methoden zu schreiben. Ich versteh auch nicht, warum du methoden deklarierst, die nur eine Addition von zwei Integer-Werten durchführt. Was ich oben geschrieben hast, war quasi die Vorgehensweise. Ich war halt davon ausgegangen, dass du mit dem Rest klar kommst.
Ich bastel mal schnell was....

Edit:
Also ich hab mir mal erlaubt die Objektorientierung ins Spiel zu bringen, da dies für mich die naheliegenste Sache war.
public class RoemischeFlaeche {

public int Qua, Ack, Mor, Gro;

public RoemischeFlaeche(int qua, int ack, int mor, int gro) {
this.Qua = qua;
this.Ack = ack;
this.Mor = mor;
this.Gro = gro;
}

public void umrechnen(int n) {
this.Qua = n % 1000;
n = (n - Qua) / 1000;
this.Ack = n % 10;
n = (n - Ack) / 10;
this.Mor = n % 100;
n = (n - Mor) / 100;
this.Gro = n;
}

public void addiereFlaechen(RoemischeFlaeche Fl2) {
this.Qua += Fl2.Qua;
this.Ack += Fl2.Ack;
this.Mor += Fl2.Mor;
this.Gro += Fl2.Gro;
}

public void ausgabe() {
System.out.printf("Großhufe: %d\n" +
"Morgen: %d\n" +
"Acker: %d\n" +
"Quadratrute: %d\n", Gro, Mor, Ack, Qua);
}
}
Die ist jetzt die Klasse für eine römische Fläche. In deiner Berechnungen-Klasse musst du die entsprechend benutzen. Hier ein Beispiel:
public class RoemischeRechnung {

public RoemischeRechnung() {
RoemischeFlaeche Fl1 = new RoemischeFlaeche(0, 0, 0, 0);
RoemischeFlaeche Fl2 = new RoemischeFlaeche(0, 0, 0, 0);
int flaeche1 = 25953125,
flaeche2 = 101081007;
Fl1.umrechnen(flaeche1);
Fl2.umrechnen(flaeche2);
Fl1.addiereFlaechen(Fl2);
Fl1.ausgabe();
}

public static void main(String[] args) {
new RoemischeRechnung();
}

}
Also ich habe zwei Fläche, die initialisiere ich erstma mit Nullen. Da kannste natürlich gleich den richtigen Wert eingeben aber ich geh davon aus, dass dieser an der Stelle noch unbekannt ist.
Dann kommen zwei Integer-Flächen. Die werden mit der Methode umrechnen von den Flächen aufgenommen und die Flächen nehmen die entsprechenden Werte an. Dann addiere ich auf Fläche1 noch Fläche2 drauf und gebe anschließend Fläche1 aus.
Du kannst in der Rechnung auch direkt auf die Variablen zugreifen. Einfach "Fl1.Ack" für die Anzahl der Acker, "Fl1.Mor" für die Anzahl der Morgen usw.

Jetzt fehlt nur noch Vereinfachung, dass zB 10 Acker ein Morgen sind, oder so. Aber das müsstest du nochma sagen.
 
AW: Statische Methoden

...

Jetzt fehlt nur noch Vereinfachung, dass zB 10 Acker ein Morgen sind, oder so. Aber das müsstest du nochma sagen.

alles klar, habs.

nur nochmal eine frage, jetzt unabhängig von der umrechnung in quadratruten.

die fläche soll in größtmöglich maßeinheiten ausgegeben werden, z.B. nicht 25953147, sondern 2596003, denn 95 Morgen und 3 Acker und 147 Quadratrute = 96 Morgen und 0 Acker und 3 Quadratrute. Wie ist man denn darauf gekommen?

Nochmal nen Beispiel: 25 G, 95 M, 3 A, 125 Q + 74 G, 4M, 0A, 19 Q -> rauskommen soll 100000000 .

Wie komme ich bei diesem Beispiel auf die größtmögliche Maßeinheit?

Edit: Die Umrechnungen sind:

1 Acker = 144 Quadratrute

1 Morgen = 4 Acker

1 Großhufe = 100 Acker
 
Zurück