Java Übung in der Schule

  • Java

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Java Übung in der Schule

    Hallo zusammen,

    Hab in der Schule folgende Aufgabe erhalten:

    Aufgabe 1
    Ausgabe Schaltjahr ja/nein
    • Das Programm soll ausgeben, ob eine eingegebene
    Jahreszahl einem Schaltjahr entspricht. Die Eingabe soll
    nach einer entsprechenden Aufforderung vorgenommen
    werden können, die
    Ausgabe soll aber mit den effektiv eingegebenen
    Werten erfolgen, also nicht nur symbolisch mit
    Summe a + b = ….

    Formel:
    Schaltjahre sind alle glatten Jahrhunderte, die ohne Rest durch 400 teilbar sind ( 2000: ja / 2100: nein) und alle sonstigen Jahre, die ohne Rest durch 4 teilbar sind.

    Bessere Veranschaulichung: schwittlinsky.net/InfoGK/Schaltjahre.pdf

    • Hinweise
    • Die Prüfung soll aber mit einem booleschen Ausdruck
    erfolgen (nicht geschachtelte if-Anweisungen).
    – Logische Operatoren

    Viel Spass :)

    Ich kapiers voll nööööööööööd
  • habs mal mit ner if abfrage gemacht:

    PHP-Quellcode

    1. import java.util.*;
    2. public class SchaltjahrMain {
    3. static void rechnen(){
    4. Scanner get;
    5. int y;
    6. System.out.println("Bitte geben Sie die Jahreszahl ein: ");
    7. get = new Scanner(System.in);
    8. y = get.nextInt();
    9. if( y == 0){
    10. System.out.println("Bitte Zahl über 0 eingeben!");
    11. }
    12. else if( y%4 == 0 || y%400 == 0 && y%100 != 0){
    13. System.out.println("Das Jahr " + y + " ist ein Schaltjahr!");
    14. }
    15. else{
    16. System.out.println("Das Jahr " + y + " ist kein Schaltjahr!");
    17. }
    18. }
    19. public static void main(String[] args) {
    20. rechnen();
    21. }
    22. }
    Alles anzeigen
  • Ah mist, hab jahrhunderte überlesen.
    Passt schon ^^
    Zahlen lesen sich halt doch leichter als Texte :D

    Naja also das ist mal die Funktion zur Bestimmt eines Schaltjahres:

    PHP-Quellcode

    1. private static boolean istSchaltjahr(int j)
    2. {
    3. if (j % 400 == 0){
    4. return true;
    5. }
    6. else if ( j % 100 == 0){
    7. return false;
    8. }
    9. else if ( j % 4 == 0){
    10. return true;
    11. }
    12. return false;
    13. }
    Alles anzeigen


    Sooo diese If-Abfragen sind jetzt verkettet und nicht verschachtelt. Haha...
    Jetzt musste dich nur noch um den Rest Kümmern :D
  • Nein sollte es nicht. steht ja nirgends. Nur weil ichs geschrieben habe, ist es ja nicht richtig ^^
    Und deins ist sogar "richtiger" als meins, weil die Prüfung auf ein Schaltjahr mit einem einzigen Ausdruck erfolgen sollte.
    Hätte man mal genauer in der Angabe schreiben sollen.
    ;)

    Allerdings könnte es sein, das du in deiner Lösung noch Klammern setzen musst oder hast du das schon mal für jeden einzelnen Fall auf Richtigkeit überprüft? :D
  • woow,
    leute wie könnt ihr nur sooooooooo schnelllll java programmieren?? :confused:
    Ich hab erst nacht 2 Tagen mit ner Antwort gerechnet, doch ihr scheint es ja volllllllllllllll im griff zu haben :D

    Ich probiers mal aus, wenns funzt, gibts noch mehhhr davaon ;) :)

    :danke: :danke: :danke:

    Woow seit ihr aber schnell *muss das erst mal verdauen*
  • Die Übungen sind immer die gleichen :D

    Ich war mal vor 2 Jahren Tutor an der Uni für eine Übungsgruppe in Java und da mussten die Studenten die gleiche Aufgaben lösen :)

    Ich kann dir nur raten zu versuchen die Aufgabe selbst zu lösen, ist gar nicht so schwer. Außerdem hast du da später mehr davon wenn du es selbst hinbekommst :)
  • brtbrt2 schrieb:

    Die Übungen sind immer die gleichen :D

    Ich war mal vor 2 Jahren Tutor an der Uni für eine Übungsgruppe in Java und da mussten die Studenten die gleiche Aufgaben lösen :)

    Ich kann dir nur raten zu versuchen die Aufgabe selbst zu lösen, ist gar nicht so schwer. Außerdem hast du da später mehr davon wenn du es selbst hinbekommst :)


    Kann ich mich eigentlich nur anschliessen.
    Bin deswegen meistens auch dagegen komplett Lösungen zu präsentieren,
    deswegen auch der erste Post. ;)
  • In dem Fall tritt wahrscheinlich kein Problem auf, aber um überhaupt garnicht erst so einen Möglichkeit enstehen zu lassen, immer diese Ausdrücke Klammern.
    Das erhöht meistens auch noch die Lesbarkeit (Wenn man wirklich mal ernsthaft Software schreibt ist das ein enorm wichtiger Punkt ;) )

    In diesem Fall z.b.
    y%4 == 0 || y%400 == 0 && y%100 != 0
    Könnte es passieren das durch Compileroptimierungen oder durch Optimierungen seitens der VM als erstes der Ausdruck
    y%400 == 0 && y%100 != 0 ausgewertet wird und das Ergebnis dann mit einem Oder mit y%4 == 0 ausgewertet. Und das möchtest du ja nicht.
    Das würde nämlich bedeuten das du dies hier erhälst
    y%4 == 0 || (y%400 == 0 && y%100 != 0)
    Und das würde wiederum bedeuten es reicht y%4 == 0 zu erfüllen und schon hast du ein Schaltjahr und der Rest wird dank dem Oder nicht mehr berücksichtigt.
    Du siehst also, das Fehlerpotential ist auf jedenfall da. Es muss nicht so kommen. Aber es KANN :)

    *edit*
    In C hatte ich mal eine Tabelle, aus der konnte man genau rauslesen welche Operatoren wie stark binden und dadurch kann man dann auch rausbekommen welche zuerst ausgewertet werden. Hab ich bisher in Java noch nicht entdeckt. Allerdings ist es da imho auch nicht dann 1000% sicher, weil es sehr viel verschiedene VMs gibt und deswegen würd ich da dann nicht mein Geld verwetten. Lieber richtig Klammern und ruhig schlafen :)

    *edit2*
    Tja hab ne Tabelle jetzt für Java gefunden :)
    Tut mir leid, && bindet stärker als || :D
    Also MUSST du Klammern setzen :)
    Galileo Computing :: Java ist auch eine Insel – 2.4 Ausdrücke, Operanden und Operatoren
    Hierzu passt auch gut das Zitat von dem Link:
    "Die Tabelle lehrt uns, dass im Beispiel A && B || C das Und stärker als das Oder bindet, also der Wert mit der Belegung A=false, B=false, C=true zu true ausgewertet wird. Vermutlich gibt es Programmierer, die dies wissen oder eine Tabelle mit Rangordnungen immer am Monitor kleben haben. Aber beim Durchlesen von fremdem Code ist es nicht schön, immer wieder die Tabelle konsultieren zu müssen, die verrät, ob nun das binäre Xor oder das binäre Und stärker bindet."
  • hey -=[P3ac]=-
    dein Code funzt super.

    doch der Code von Stelzi läuft bei mir nicht, erhalte zimlich viele Fehler.
    Hab die Buchstaben y und j vertauscht, doch kommen immernoch viele Fehler :( Kannst du Stelzi den Code so posten das er geht?

    Ich hab volll keinen Durchblick. Hat jemand ein gutes Dokument? Unser Lehrbuch ist riesig :(
  • Ich habs mal anders gemacht bzw die rechnung übernommen und es anders EIN-und AUS geben lassen ^^ bringt zwar nichts aber ich finds so bessa :P

    Quellcode

    1. import javax.swing.*;
    2. public class Schaltjahr {
    3. /*
    4. * Autor :Scarecraft
    5. */
    6. public static void main(String[] args)
    7. {
    8. double
    9. jahr;
    10. String s=JOptionPane.showInputDialog("Welches Jahr soll geprüft werden?");
    11. jahr=Double.parseDouble(s);
    12. if (jahr == 0)
    13. {
    14. JOptionPane.showMessageDialog(null,"Bitte eine zahl über 0 eingeben!");
    15. }
    16. else
    17. if((jahr%4 == 0 )|| (jahr%400 == 0) && (jahr%100 != 0))
    18. {
    19. JOptionPane.showMessageDialog(null,"Das Jahr "+jahr+" ist ein Schaltjahr!");
    20. }
    21. else
    22. {
    23. JOptionPane.showMessageDialog(null,"Das Jahr "+jahr+" ist kein Schaltjahr!");
    24. }
    25. }
    26. }
    Alles anzeigen
  • buba schrieb:

    hey -=[P3ac]=-
    dein Code funzt super.

    doch der Code von Stelzi läuft bei mir nicht, erhalte zimlich viele Fehler.
    Hab die Buchstaben y und j vertauscht, doch kommen immernoch viele Fehler :( Kannst du Stelzi den Code so posten das er geht?

    Ich hab volll keinen Durchblick. Hat jemand ein gutes Dokument? Unser Lehrbuch ist riesig :(


    Ähm, das liegt wahrscheinlich daran das du einfach nur den code genommen hast und ihn in deinen Editor oder was du auch immer verwendest hinein kopiert hast ohne dich viel weiter damit zu befassen. Das was stelzi gepostet hat ist nur eine Funktion die musst du dann in dein Programm einbauen. Hingegen ich hab dir gleich das ganze Programm geschickt... Schau dir nochmal die beiden Codes an, dann kannst du dann sicher ein eigenes schreiben :)

    MFG
  • hey Scarecraft

    Genau das hab ich gesucht, prima, dein code ist super!!!

    Vielen dank

    Der code ist genial, denn er entspricht genau der Aufgabe. -> perfekt.

    Vielen Dank

    Danke auch an alle andere, nun werde ich die anderen übungen alleine meistern, ich versuch es auf jenenfall :)

    Werde wieder Posten wenn ich nicht weiterkomm.

    danke