Javakara_Variable?

dipsi5

Newbie
Registriert
Mai 2010
Beiträge
6
Hallo zusammen. Ich muss ein Programm schreiben, dass Ostersonntage und Pfingstdatum für beliebiges Jahr berechnet. Alles schön und gut, allerdings bei weiteren Aufgaben, wie Berechnung für alle zwischenliegenden Jahren (Eingabe durch Benutzer für 2 versch. Jahre) scheitert es. Ich bringe es nicht fertig, dass in der Methode OstersonntagBerechnen Variable Jahr erkannt wird.:( Habe im ersten Teil die Variable Jahr im public void() eingegeben und Methode ebenfalls, aber dies ist doppelt gemoppelt und es klappt nicht mit for-Schleife, weil das Jahr um 1 erhöht wird. Bitte um Hilfe.

public class Aufgabenblatt4cb extends JavaKaraProgram {

void OstersonntagBerechnen(int M, int N){

int A = Jahr%19;
int B = Jahr%4;
int C = Jahr%7;

double D = ( 19 * A + M) % 30;
double E = ( 2 * B + 4 * C + 6 * D + N) % 7;
int Ostersonntag;
int Pfingsten;


if (( 22 + D + E) <= 31)
{
Ostersonntag = (int) (22 + D + E);
Pfingsten = (int) (22 + 49 + D + E - 61);
tools.showMessage ( " Ostersonntag ist : " + Ostersonntag + " März" + Jahr );
tools.showMessage ( " Pfingsten fällt auf : " + Pfingsten + " Mai" + Jahr );
}
else
Ostersonntag = (int) (D + E - 9);
Pfingsten = (int) (D + E - 9 + 49 - 61);
if (Ostersonntag == 26){
tools.showMessage (" Ostersonntag ist 19. April" + Jahr);
tools.showMessage (" Pfingsten fällt auf 7.Juni" + Jahr);
}
if (Ostersonntag == 25 && A>10){
tools.showMessage (" Ostersonntag ist 18. April" + Jahr);
tools.showMessage (" Pfingsten fällt auf 6.Juni" + Jahr);
}
else
tools.showMessage ( " Ostersonntag ist : " + Ostersonntag + " April" + Jahr);
tools.showMessage ( " Pfingsten fällt auf : " + Pfingsten + " Juni" + Jahr);
}
}

public void myProgram() {


int Jahr = tools.intInput( "Geben Sie das erste Jahr für die Berechnung ein:" );
int Jahr2 = tools.intInput( "Geben Sie das zweite Jahr für die Berechnung ein:" );

for ( ; Jahr <= Jahr2; Jahr++){
if ( Jahr <= 1699 && Jahr >= 1583)

OstersonntagBerechnen(22, 2);
if ( Jahr <= 1799 && Jahr >= 1700)

OstersonntagBerechnen(23, 3);
if ( Jahr <= 1899 && Jahr >= 1800)

OstersonntagBerechnen(23, 4);
if ( Jahr <= 2099 && Jahr >= 1900)

OstersonntagBerechnen(24, 5);
if ( Jahr <= 2199 && Jahr >= 2100)

OstersonntagBerechnen(24, 6);

}
}
 
Zuerst ist der Code so wie du ihn hier gepostet hast schlecht lesbar und ein paar Kommentare würden auch nicht schaden.
Dann zu der Variablen 'Jahr'. Woher soll deine Methode 'OstersonntagBerechnen' auch von ihr wissen? Du hast 'Jahr' innerhalb einer anderen Methode deklariert und definiert, damit ist sie auch nur lokal innerhalb dieser sichtbar. Du hast also entweder die Möglichkeit der Methode 'OstersonntagBerechnen' die Variable 'Jahr' als Parameter zu übergeben oder 'Jahr' als Member der Klasse 'Aufgabenblatt4cb' zu deklarieren.
 
Zuletzt bearbeitet:
Ja, nun, aber was kann ich dann machen um dies auf der Schnellen zum Funzen zu bringen? Ich kann die Methode OstersonntagBerechnen nicht mit var. Jahr gestalten, denn ich habe die Vorgaben N und M als Methdenvar. zu nehmen. Oder soll ich alles in eine Methode packen, allerdings muss ich dann auch for-Schleife einbringen und dort eben nochmals Jahr deklarieren.:(
 
Du könntest folgendes machen, was, dir Bay-Breeze auch schon vorgeschlagen hat.

In deiner Klasse legst du die Variable an

public int currentJahr; // current Jahr weil du Jahr schon in der main Methode benutzt

und dann schreibst du einfach vor jedem Methodenaufruf einfach hin

currentJahr = Jahr;


Das ganze währe zwar indem Fall irgendwie Sinnfrei und als Parameter viel eleganter aber es würde grundsätzlich funktionieren.
 
Naja ich verstehe nicht, warum die Methode zwei Parameter erwartet und nicht einfach nur das Jahr.

Was sind m und n denn? Woher soll ein Normalsterblicher beim Methodenaufruf denn schon wissen, wie die zu belegen sind?

Code:
void OstersonntagBerechnen(int Jahr){
  if ((Jahr < 1583) || (Jahr >= 2200)) return;   // oder Exception werfen oder Ausgabe ...

  int M;
  int N;
  if (Jahr < 1700) {
    M = 22;
    N = 2;
  } else if (Jahr < 1800) {
    M = 23;
    N = 3;
  } else if (Jahr < 1900) {
    M = 23;
    N = 4;
  } else if (Jahr < 2100) {
    M = 24;
    N = 5;
  } else if (Jahr < 2200) {  // Abfrage an sich hier eigentlich unnötig
    M = 24;
    N = 6;
  }

  // ... übriger Code
}

Ach ja, und ich würde eine Ergebnisklasse machen

Code:
class OsternDatum {
  public int Jahr;
  public Date Ostersonntag;
  public Date Pfingsten;
}
(Natürlich besser vernünftig mit Constructor, gettern und settern, ist exemplarisch gemeint)

Diese Klasse würde ich von der Methode zurückliefern lassen, die Ausgabe in einer Methode zu machen finde ich persönlich ungeschickt... und keine Ahnung ob es die Klasse Date gibt, is wie gesagt nur beispielhaft gemeint.
 
Zuletzt bearbeitet:
Zurück
Oben