Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hi liebe Com,
ich habe im LK-Informatik Java und sitze gerade zuhause an einem Programm zur Berechnung von Ostern (nach der Gaußschen Osterformel)
ich weiß zwar soweit wie ich es zu programmieren habe (bis auf kleinere Ansätze) aber ich weiß ehrlich gesagt manchmal gar nicht so genau WAS ich da eigentlich programmiere.Wenn das Programm fertig ist (was es fast ist) wollte ich es eigentlich in der Schule mal vorstellen so als freiwillige Arbeit aber ich sehe mich zur Zeit denn dastehen und gar nicht wissen wie ich das erklären sollte und wollte daher fragen ob das möglich ist sich hier ein paar Zeilen erklären zu lassen oder ob das "nicht gern gesehen" ist...
Sprich ich frage jetzt erstmal und wenn ihr sagt das wäre machbar würde ich die entsprechenden Zeilen einfach in diesen Post hereineditieren oder einen neuen schreiben ^^
+ das programm ist fast fertig
+ "freiwillige Arbeit"
+ wir müssen ja nicht mehr viel tun, sondern nur ein bisschen was erklären
Was hier überhaupt nicht gerne gesehen wird, sind so komische threads, wo leute einfach nur eine Aufgabenstellung unzensiert hinschmeißen, keinerlei Ansätze präsentieren, und vom Forum erwarten, dass es einfach so gelöst wird.
Das trifft in deinem Fall ja anscheinend nicht zu.
=> her mit den Fragen...
Ich habe sogar noch ein paar mehr fragen gefunden aber die stelle ich wenn danach xD
Ist mein erstes richtig "eigenes" Programm xD
also wenn ihr jetzt euren Freunden oder Bekannten oder was auch immer euer Programm erklären sollt...wie würdet ihr folgende "grundlegende" Zeilen beschreiben:
wenn ihr jetzt euren Freunden oder Bekannten oder was auch immer euer Programm erklären sollt...wie würdet ihr folgende "grundlegende" Zeilen beschreiben
Hmm, gar nicht? Die können nämlich praktisch alle java oder ein paar vergleichbare höhere Programmiersprachen... Bei den, die es nicht können ist so etwas eh völlig hoffnungslos. Von dir wird ja wohl auch nicht erwartet, dass du ohne Unterbrechungen ein drei Monate langes Referat über Java hälst? Das Publikum muss doch irgendwie vorbereitet sein, oder nicht? Wie weit sind die denn schon?
Mehr oder weniger ja aber wenn wir sowas machen sollen wir es wirklich genau erklären vorallem wenn er nachfragt...und ich weiß halt ned wie ich das genau ausdrücke bzw würde dann falsche fachbegriffe verwenden wenn ich dad erkläre....
Im schlimmsten Fall nimm man sich ein Javabuch (davon gibts ja auch gewisse, immer wieder gerne genannte frei im Internet) und ließt nach wie es dort erklärt wurde.
Denn ich habe fast das Gefühl, dass diese Grundlagen auch dir fehlen, ergo wäre es garnicht schlecht das nach zu lesen
Iwie befürcht ich du hast recht ^^ aber vllt könnt ihr mir ja schonmal nen ansatz geben ^^ bzw ich würde evtl mal schreiben was ich dazu sagen würde und ihr könntet vllt sagen obs richtig oder ned is xD
werde jetzt erstmal schlafen und dass mal zu morgen machen
Ich nenne mal ein paar Stichwörtchen. Diese googlest du, guggst bei wikipedia, list in der Insel nach usw. Wenn du danach irgendwas immer noch nicht ausformulieren kannst, dann fragst du einfach weiter. Wenn du alles erklären kannst, dann bist du imho auch gegen gemeinere Fragen des Lehrers bzw. des Publikums gerüstet.
[HIGHLIGHT="Java"]public Ostern(int jahr) { this.jahr = jahr; }
public Ostern(String title){ [...]} [/HIGHLIGHT]
Klasse
Instanz/this
Konstruktor
member-variable
lokale variable
String-Klasse, wofür ist die gut?
[HIGHLIGHT="Java"] public void actionPerformed(ActionEvent evt) [/HIGHLIGHT]
Observer- bzw. Listener pattern. Am besten ein kleines pseudo-uml anzeichnen, erklären wer wo was wann aufruft.
[HIGHLIGHT="Java"] public static void main(String[] args)
{
Ostern o = new Ostern("Test");
}
[/HIGHLIGHT]
was ist die main-methode?
Instanziierung
Konstruktoraufruf
[HIGHLIGHT="Java"]
extends Frame
implements ActionListener[/HIGHLIGHT]
nunja, was soll man dazu sagen, in einem fall wird eine klasse erweitert, im anderen fall wird ein Interface implementiert. Deckt sich soweit mit der Umgangssprache eigentlich... Sowas solltest du lieber an dutzend kleinen beispielen verdeutlichen, statt nach irgendeiner megakorrekten definition zu suchen. Wofür das ganze gut ist, und wo da die Polymorphie begrifflich unterzubringen ist, sollte eigentlich klar sein.
Wenn du selbst was dazu sagst, ist das natürlich besser, dann können wir wenigstens schonmal das Problem grob umreißen, und haben so einen "Rohling" an dem man rumfeilen kann.
OT: Dein Bekannten/Freundeskreis besteht nur aus Programmierern :shock: ? Schon mal daran gedacht dein soziales Umfeld etwas zu erweitern . Von den Leuten (nicht Kollegen), die ich zu meinen Freunden und Bekannten zähle, kann kein einziger auch nur ansatzweise programmieren.
(nicht böse gemeint, schockiert mich nur gerade ein wenig, dass ein Freundeskreis ausschließlich aus Programmieren bestehen kann)
ich schäme mich total dafür, aber es sind auch einige naturwissenschaftler (die nicht einmal physiker sind!) und sogar einige bwl'er dabei^^ vollkommen niveaulos, nicht?
Erstaunlicherweise sind alle mit dem @ im Namen wesentlich schneller verreckt als die "echten", seit die neue Forumsoftware da ist, ist sogar der javaforum-benachrichtigungsbot weg^^ :autsch:
MiDniGG hat das alles anscheinend komplett gelesen: statt "Freunde und Bekannte" würde da sinngemäß "Bekannte, vor den ich ein (Seminar)Vortrag/Referat halten muss" reinpassen.
Bei allen anderen ist es halt halt echt völlig sinnlos...
Also ich habe das Prog jetzt eigentlich soweit fertig auch wenn die Oberfläche nicht unbedingt schön ist und habe *ich hoffe alle* stellen kommentiert die ich auch erfragt hatte und würde dich *lieber andrey* jetzt einfach mal bitten drüberzufliegen ob die kommentare der wirklichkeit ensprechen ^^
wollte ausserdem noch 2 sachen fragen:
1.Wo muss ich einen try-catch block einfügen damit ich gegen falsche eingaben also buchstaben und andere zeichen gewappnet bin und ich ihn ne fehlermeldung machen lasse.
2.ich will dass das "pfingsten" text field immer unsichtbar ist,ausser wenn ich auf den entsprechendem butten auf "anzeigen" gehe.leider ist es bei mir so das er bei jeder neuen berechnung das ding wieder anzeigt...wie kann ich das verhindern??
public class Ostern extends Frame implements ActionListener
{
int jahr;
int a, b, c, h1, h2, M, N, d, e, pfingsten, ostern; //Deklarierung der für die Rechnung benötigten Attribute.
//Sie beschreiben den Zustand des Objektes.
public Ostern(int jahr) //Konstruktor für Ostern mit dem Integer "jahr".
{
this.jahr = jahr;
}
Panel p1 = new Panel(null); //Start der Deklarierung der Objekte der grafischen Benutzerberfläche.
Label head = new Label("5.PK Osterspaß mit Gauß");
Button bu1 = new Button ("Osternberechnung");
Button bu2 = new Button ("- -");
Button bu3 = new Button ("++");
Button bu4 = new Button ("Pfingsten anzeigen");
TextField tf = new TextField("Hier sehen Sie,wann Ostern ist!");
TextField tf2 = new TextField("Hier sehen Sie,wann Pfingsten ist!");
TextField tf3 = new TextField("Gewünschtes Jahr"); //Ende.
public Ostern(String title) //neues Objekt der Klasse Ostern.
{
super (title);
this.setSize(700,700); // Start Einrichtung der grafischen Oberfläche.
this.addWindowListener(new fensterzu());
this.setVisible(true);
this.add(p1);
p1.setBackground(new Color(100,100,100));
p1.add(tf);
p1.add(tf2);
p1.add(tf3);
p1.add(bu1);
p1.add(bu2);
p1.add(bu3);
p1.add(bu4);
p1.add(head); //"get"-und "set"-Methoden sind die Schnittstellen über die Attribute manipuliert werden können.
bu4.setLocation(301,277);
bu4.setSize(250,25);
bu4.addActionListener(this); //Empfänger registrieren sich beim Sender (Listener beim Button).
bu1.addActionListener(this);
bu1.setLocation(100,400);
bu1.setSize(150,50);
bu2.setLocation(75,400);
bu2.setSize(25,25);
bu2.addActionListener(this);
bu3.setLocation(251,400);
bu3.setSize(25,25);
bu3.addActionListener(this);
tf.setSize(200,25);
tf.setLocation(100,251);
tf2.setSize(200,25);
tf2.setLocation(100,277);
tf2.setVisible(false);
tf3.setSize(200,25);
tf3.setLocation(100,225);
head.setSize(700,250);
head.setFont(new Font("Arial", 0, 60)); //Ende.
}
//Methode,welche nichts zurückliefert und Eventverarbeitungsmethoden enthält.
public void actionPerformed(ActionEvent klick)
{
if (klick.getSource() == bu4)
{
if (bu4.getLabel().equals("Pfingsten anzeigen"))
{
bu4.setSize(250,25);
tf2.setVisible(true);
bu4.setLabel("Pfingsten verbergen");
}
else
{
bu4.setSize(250,25);
tf2.setVisible(false);
bu4.setLabel("Pfingsten anzeigen");
}
}
//Wenn bu1 (großer "Berechnen" Button) benutzt wird startet dieses Event.
if (klick.getSource() == bu1)
{
jahr = Integer.parseInt(tf3.getText());
berechnen();
}
if (klick.getSource() == bu2)
{
jahr = jahr - 1 ;
tf3.setText((new Integer(jahr)).toString());
berechnen();
}
if (klick.getSource() == bu3)
{
jahr = jahr + 1 ;
tf3.setText((new Integer(jahr)).toString());
berechnen();
}
}
public void berechnen()
{
a = jahr % 19; //Beginn der Gaußschen Osterformel.
b = jahr % 4;
c = jahr % 7;
h1= jahr /100;
h2= jahr / 400;
N = 4 + h1 -h2;
M = 15 + h1 - h2 - ((8 * h1 + 13) / 25);
d = (19 * a + M) % 30;
e = (2 * b + 4 * c + 6 * d + N) % 7; //Ende der Formel.
if(d + e == 35) //Ausnahmeregeln.
{
ostern = 50;
}
else
{
if(d == 28 && e == 6 && (11*M + 11) % 30 < 19)
{
ostern = 49;
}
else
{
ostern = 22 + d + e;
}
} //Ende der Ausnahmeregeln.
//Fertigstellung der Osterrechnung.
ostern = 22 + d + e; //Festlegung für Pfingsttag.
pfingsten = ostern + 50;
if(ostern < 31)
{
String mrz;
mrz = Integer.toString(ostern);
tf.setText("Am " + mrz + ". März."+ jahr + " ist Ostern!");
}
else
{
String apr;
apr = Integer.toString(ostern-31);
tf.setText("Am " + apr + ". April."+ jahr + " ist Ostern!");
}
if (pfingsten <94)
{
String mai;
mai = Integer.toString(pfingsten-62);
tf2.setText("Am " + mai + ". Mai."+ jahr + " ist Pfingsten!");
}
else
{
String jun;
jun = Integer.toString(pfingsten-93);
tf2.setText("Am " + jun + ". Juni."+ jahr + " ist Pfingsten!");
}
}
public static void main(String[] args) //main-Methode übernimmt den String args --> Komandozeilenparameter!
{
Ostern o = new Ostern("Test"); //Erstellen des Konstruktors.
}
}
class fensterzu extends WindowAdapter //Klasse zum benutzen der "Schließen"-Funktion.
{
public void windowClosing(WindowEvent wevt)
{
wevt.getWindow().dispose();
System.exit(0);
}
}
[/HIGHLIGHT]
PS:ja ich weiß es ist wohl kein schöner programmierstil aber ich bin noch unerfahren.
bin aber über jeglichen hinweis dankbar wie ich es besser machen kann xD
lg Kooki
EDIT1:
Frage 2 hat sich erledigt...fehler gefunden quelltext aktualisiert
1.Wo muss ich einen try-catch block einfügen damit ich gegen falsche eingaben also buchstaben und andere zeichen gewappnet bin und ich ihn ne fehlermeldung machen lasse.
2.ich will dass das "pfingsten" text field immer unsichtbar ist,ausser wenn ich auf den entsprechendem butten auf "anzeigen" gehe.leider ist es bei mir so das er bei jeder neuen berechnung das ding wieder anzeigt...wie kann ich das verhindern??
keine Ahnung. Weniger Spaghetticode würde für den Anfang nicht schaden
[HIGHLIGHT="Java"]
int a, b, c, h1, h2, M, N, d, e, pfingsten, ostern; //Deklarierung der für die Rechnung benötigten Attribute.
//Sie beschreiben den Zustand des Objektes.
[/HIGHLIGHT]
1) EXTREM GRUSELIGE Namen. Variablennamen schreibt man klein. Sie sollten [soweit es geht] sprechend sein, und nicht einfach so eizelne sinnlose zeichen.
2) a,b,c... (und der ganze restliche Alphabet da) beschreiben nicht den Zustand deines Objektes. Das sind lediglich kleine temporäre hilfsvariablen, die bei dieser Formel verwendet werden, dort sollen sie auch hin: als lokale temporäre variablen, nicht als member-ballast.
[HIGHLIGHT="Java"] public Ostern(int jahr) //Konstruktor für Ostern mit dem Integer "jahr".
{
this.jahr = jahr;
}[/HIGHLIGHT]
bei einem Konstruktor sollten alle member-variablen sinnvoll initialisiert werden. Das es hier "nicht nötig ist" spricht nochmal dafür, dass diese ganzen hilfsvariablen nichts in der member-abteilung zu suchen haben.
[HIGHLIGHT="Java"]
Panel p1 = new Panel(null); //Start der Deklarierung der Objekte der grafischen Benutzerberfläche.
[/HIGHLIGHT]
ach du meine Güte... p1 b2 t3... Das willst du deinen Mitschülern erklären? Dann beachte doch bitte, dass damit auch Programmierer mit 20 jahren Erfahrung überfordert wären, bzw. die würden es sich wohl gar nicht erst anguggen.
=> Sprechende bezeichner verwenden! So ist das nur chaos und unverständlicher Buchstabensalat. In einer Woche weißt du selbst nicht mehr wo was war.
[HIGHLIGHT="Java"]
public Ostern(String title) //neues Objekt der Klasse Ostern.
[/HIGHLIGHT]
Was für ein "neues Objekt"? das ist doch bloß noch ein Konstruktor. Der den ersten Konstruktor übrigens unsinnig und unbrauchbar macht.
[HIGHLIGHT="Java"] bu4.addActionListener(this); //Empfänger registrieren sich beim Sender (Listener beim Button).
[/HIGHLIGHT]
hier sollte man noch erwähnen, wieso "this" überhaupt ein Listener sein darf...
[HIGHLIGHT="Java"]
bu1.setLocation(100,400);
[/HIGHLIGHT] Beachte Bitte, dass eine Stimme für "Bounds" von einer Person kam, die es besser weiss, und uns lediglich ärgern wollte
Aber gut, fangen wir jetzt mit LayoutManagern nicht an, das würde es nur unnötig "kompliziert" machen... egal.
[HIGHLIGHT="Java"]
//Methode,welche nichts zurückliefert und Eventverarbeitungsmethoden enthält.
public void actionPerformed(ActionEvent klick)
[/HIGHLIGHT]
"Eventverarbeitungsmethoden enthält"... Warum nicht einfach kurz und klar "ActionEvents (etwa Klicks auf Schaltflächen) verarbeitet"?
[HIGHLIGHT="Java"] //Wenn bu1 (großer "Berechnen" Button) benutzt wird startet dieses Event.[/HIGHLIGHT]
Das was du im comment hingeschrieben hast, sollte besser in den Bezeichnernamen rein. Macht nichts, dass es länger ist, deswegen sind noch keinem die Finger abgefallen.
[HIGHLIGHT="Java"] public void berechnen()
{
a = jahr % 19; //Beginn der Gaußschen Osterformel.
b = jahr % 4;
c = jahr % 7;
h1= jahr /100;
h2= jahr / 400;
N = 4 + h1 -h2;
M = 15 + h1 - h2 - ((8 * h1 + 13) / 25);
d = (19 * a + M) % 30;
e = (2 * b + 4 * c + 6 * d + N) % 7; //Ende der Formel.[/HIGHLIGHT]
a,b,c usw. werden nur hier verwendet, also sollen sie auch hier deklariert werden (wie bereits 2 mal gesagt)
[HIGHLIGHT="Java"] Ostern o = new Ostern("Test"); //Erstellen des Konstruktors.[/HIGHLIGHT]
Was "Erstellen des Konstruktors" sein sollen tut? Instantiierung?
[HIGHLIGHT="Java"]
class fensterzu extends WindowAdapter //Klasse zum benutzen der "Schließen"-Funktion.
{
public void windowClosing(WindowEvent wevt)
{
wevt.getWindow().dispose();
System.exit(0);
}
}
[/HIGHLIGHT]
Das ganze ist wozu da und gehört wohin? ???:L