Letzte Übung

  • geschlossen

  • buba
  • 1264 Aufrufe 9 Antworten

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

  • Letzte Übung

    hey Leute ich bins wieder :(

    Das ist meine die letzte Aufgabe die ich hab, habs versucht sie selber zu lösen, doch bin steckengeblieben (siehe code)

    es geht darum, dass das progi bei eingabe eines Buchstabens abstürzt.
    mit hilfe von try & catch & continue ist es möglich diesen fehler zu beheben.
    so das nur zahlen eingegeben werden können.


    bin soweit das er erst bei dem monat hängen bleibt, muss ich da das gleiche wie mit dem Tag machen?

    Danke danke danke:blink: :) :D

    Werd euch bestimmt nicht mehr stören. :baeh:


    PHP-Quellcode

    1. import java.util.*;
    2. public class Dokument2 {
    3. public static void main(String args[]) {
    4. int tag, monat, jahr, jh, ja, ziffer, formel;
    5. System.out.println("");
    6. System.out.println
    7. ("Das Programm kann bei der Eingabe Tag mit Leerzeile abgebrochen werden!!! ");
    8. do {
    9. try {
    10. System.out.println("");
    11. Scanner sc = new Scanner(System.in);
    12. System.out.println("Tag: ");
    13. String tagStr = sc.nextLine();
    14. if (tagStr.length() == 0){
    15. System.out.println("Das Programm wurde abgebrochen!! ");
    16. break;
    17. }
    18. else{
    19. tag = Integer.parseInt(tagStr);
    20. }
    21. }
    22. catch (NumberFormatException sc )
    23. {
    24. System.out.println("Sie haben falsche Daten eingegeben." );
    25. System.out.println("Bitte geben Sie eine Zahl ein.\n" );
    26. }
    27. if (true)
    28. continue;
    29. System.out.println("Monat: ");
    30. monat = sc.nextInt();// ("Monat: ");
    31. System.out.println("Jahr: ");
    32. jahr = sc.nextInt();// ("Jahr: ");
    33. System.out.print("\n Das Datum " + tag + "." + monat + "." + jahr
    34. + " ist ein ");
    35. jh = jahr / 100; /* Jahrhundert */
    36. ja = jahr % 100; /* Jahr im Jahrhundert */
    37. if (monat > 2) {
    38. monat -= 3;
    39. } else {
    40. monat += 9;
    41. ja--;
    42. }
    43. formel = (146097 * jh) / 4 + (1461 * ja) / 4 + (153 * monat + 2)
    44. / 5 + tag + 1721119;
    45. switch (formel % 7) {
    46. case 0:
    47. System.out.println("Montag");
    48. break;
    49. case 1:
    50. System.out.println("Dienstag");
    51. break;
    52. case 2:
    53. System.out.println("Mittwoch");
    54. break;
    55. case 3:
    56. System.out.println("Donnerstag");
    57. break;
    58. case 4:
    59. System.out.println("Freitag");
    60. break;
    61. case 5:
    62. System.out.println("Samstag");
    63. break;
    64. case 6:
    65. System.out.println("Sonntag");
    66. break;
    67. }
    68. if (jahr % 400 == 0 || jahr % 100 != 0 && jahr % 4 == 0) {
    69. System.out.println(" Das Jahr " + jahr + " ist ein Schaltjahr");
    70. }
    71. else {
    72. System.out.println(" Das Jahr " + jahr + " ist kein Schaltjahr");
    73. }
    74. } while (true);
    75. }
    76. }
    Alles anzeigen
  • At your service :)

    PHP-Quellcode

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String args[]) {
    4. int tag=0, monat=0, jahr=0, jh, ja, formel;
    5. System.out.println("");
    6. System.out
    7. .println("Das Programm kann bei der Eingabe Tag mit Leerzeile abgebrochen werden!!! ");
    8. do {
    9. try {
    10. System.out.println("");
    11. Scanner sc = new Scanner(System.in);
    12. System.out.println("Tag: ");
    13. String tagStr = sc.nextLine();
    14. if (tagStr.length() == 0) {
    15. System.out.println("Das Programm wurde abgebrochen!! ");
    16. break;
    17. } else {
    18. tag = Integer.parseInt(tagStr);
    19. }
    20. System.out.println("Monat: ");
    21. monat = sc.nextInt();// ("Monat: ");
    22. System.out.println("Jahr: ");
    23. jahr = sc.nextInt();// ("Jahr: ");
    24. } catch (NumberFormatException _uh) {
    25. System.out.println("Sie haben falsche Daten eingegeben.");
    26. System.out.println("Bitte geben Sie eine Zahl ein.\n");
    27. continue;
    28. } catch (InputMismatchException _uh) {
    29. System.out.println("Sie haben falsche Daten eingegeben.");
    30. System.out.println("Bitte geben Sie eine Zahl ein.\n");
    31. continue;
    32. }
    33. System.out.print("\n Das Datum " + tag + "." + monat + "." + jahr
    34. + " ist ein ");
    35. jh = jahr / 100; /* Jahrhundert */
    36. ja = jahr % 100; /* Jahr im Jahrhundert */
    37. if (monat > 2) {
    38. monat -= 3;
    39. } else {
    40. monat += 9;
    41. ja--;
    42. }
    43. formel = (146097 * jh) / 4 + (1461 * ja) / 4 + (153 * monat + 2)
    44. / 5 + tag + 1721119;
    45. switch (formel % 7) {
    46. case 0:
    47. System.out.println("Montag");
    48. break;
    49. case 1:
    50. System.out.println("Dienstag");
    51. break;
    52. case 2:
    53. System.out.println("Mittwoch");
    54. break;
    55. case 3:
    56. System.out.println("Donnerstag");
    57. break;
    58. case 4:
    59. System.out.println("Freitag");
    60. break;
    61. case 5:
    62. System.out.println("Samstag");
    63. break;
    64. case 6:
    65. System.out.println("Sonntag");
    66. break;
    67. }
    68. if (jahr % 400 == 0 || jahr % 100 != 0 && jahr % 4 == 0) {
    69. System.out
    70. .println(" Das Jahr " + jahr + " ist ein Schaltjahr");
    71. }
    72. else {
    73. System.out.println(" Das Jahr " + jahr
    74. + " ist kein Schaltjahr");
    75. }
    76. } while (true);
    77. }
    78. }
    Alles anzeigen


    Du kannst die kompletten Abfragen in den try-catch Block schreiben. Wenn bei der Eingabe ein Fehler auftritt schmeißt die entsprechende Funktion eine Exception. in dem carch block wird dann die meldung ausgegen und in der for-schleife wird mit continue der nächste schritt gestartet... Es werden zwei verschiedene Exceptions gecatched, weil Integer.parseInt() eine NumberFormatException, und Scanner.nextInt() eine eine InputMismatchException schmeßt (nachzulesen in der JavaAPI) :)

    Ich hoffe des is son bisl verständlich...


    P.S:
    Das ist immernoch Java und nicht JavaScript ;)
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]
  • hey Zerd, You are GREATE

    :hot: vielen Dank für deine Mühe :hot:


    hast du es gesehen? ich war voll auf dem richtigen weg :D
    langsam kapier ich es. oder :confused: *lol*

    (nachzulesen in der JavaAPI)

    was ist die JavaAPI?
    und was ist der Unterschied zwischen Java und JavaScript?

    Danke

    ps: hab noch ne knack nuss:

    das programm so ändern, dass SINNVOLLE eingaben gemacht werden. bei monat z.b. nur bis 12 und keine neg. zahlen. so dass es sinn macht.

    methode: Validierung Ok einführen
    if (validierungOk ("Uebergabeparameter")) {
    "Berechnungen"
    "Ausgabe"
    }

    Das betriffta auch die schaltjahrproblematick
    z.b. tage: zahlen bis 31
    monat: zahlen bis 12

    ich denke nicht das ich das kann, ist auch nicht teil der Übung, doch nimmt mich wunder wie sowas funzen würde.

    doch ist sicherlich mega mega schwierig. -> deshalb erwarte ich nicht das ihr das machen müsst.

    Danke auf jedenfall für eure unterstützung zu den aufgabe.

    danke
  • buba schrieb:


    was ist der Unterschied zwischen Java und JavaScript?


    java und javascript werden gerne verwechselt:

    Java ist nicht mit der Skriptsprache JavaScript zu verwechseln, die vornehmlich in HTML-Seiten zur eingebetteten Programmierung verwendet wird. Sie hat eine ähnliche Syntax, unterscheidet sich jedoch in vielerlei Hinsicht von Java und wird nur selten zur Konstruktion größerer Anwendungen verwendet.
  • buba schrieb:



    ps: hab noch ne knack nuss:

    das programm so ändern, dass SINNVOLLE eingaben gemacht werden. bei monat z.b. nur bis 12 und keine neg. zahlen. so dass es sinn macht.

    methode: Validierung Ok einführen
    if (validierungOk ("Uebergabeparameter")) {
    "Berechnungen"
    "Ausgabe"
    }

    Das betriffta auch die schaltjahrproblematick
    z.b. tage: zahlen bis 31
    monat: zahlen bis 12

    ich denke nicht das ich das kann, ist auch nicht teil der Übung, doch nimmt mich wunder wie sowas funzen würde.

    doch ist sicherlich mega mega schwierig. -> deshalb erwarte ich nicht das ihr das machen müsst.


    PHP-Quellcode

    1. import java.util.*;
    2. public class Dokument2 {
    3. public static boolean ValidierungOk(int jahr, int monat, int tag) {
    4. boolean isvalid = false;
    5. if (tag > 0) {
    6. switch (monat) {
    7. case 1:
    8. if (tag < 32)
    9. isvalid = true;
    10. break;
    11. case 2:
    12. if (isschaltjahr(jahr)) {
    13. if (tag < 30)
    14. isvalid = true;
    15. } else {
    16. if (tag < 29)
    17. isvalid = true;
    18. }
    19. break;
    20. case 3:
    21. if (tag < 32)
    22. isvalid = true;
    23. break;
    24. case 4:
    25. if (tag < 31)
    26. isvalid = true;
    27. break;
    28. case 5:
    29. if (tag < 32)
    30. isvalid = true;
    31. break;
    32. case 6:
    33. if (tag < 31)
    34. isvalid = true;
    35. break;
    36. case 7:
    37. if (tag < 32)
    38. isvalid = true;
    39. break;
    40. case 8:
    41. if (tag < 32)
    42. isvalid = true;
    43. break;
    44. case 9:
    45. if (tag < 31)
    46. isvalid = true;
    47. break;
    48. case 10:
    49. if (tag < 32)
    50. isvalid = true;
    51. break;
    52. case 11:
    53. if (tag < 31)
    54. isvalid = true;
    55. break;
    56. case 12:
    57. if (tag < 32)
    58. isvalid = true;
    59. break;
    60. default:
    61. // Fehlerhafte eingabe ( 0 > Monat > 13 )
    62. break;
    63. }
    64. }
    65. return isvalid;
    66. }
    67. public static boolean isschaltjahr(int jahr) {
    68. return ((jahr % 400 == 0) || (jahr % 100 != 0)) && (jahr % 4 == 0);
    69. }
    70. public static void main(String args[]) {
    71. int tag = 0, monat = 0, jahr = 0, jh, ja, formel;
    72. System.out.println("");
    73. System.out
    74. .println("Das Programm kann bei der Eingabe Tag mit Leerzeile abgebrochen werden!!! ");
    75. do {
    76. try {
    77. System.out.println("");
    78. Scanner sc = new Scanner(System.in);
    79. System.out.println("Tag: ");
    80. String tagStr = sc.nextLine();
    81. if (tagStr.length() == 0) {
    82. System.out.println("Das Programm wurde abgebrochen!! ");
    83. break;
    84. } else {
    85. tag = Integer.parseInt(tagStr);
    86. }
    87. System.out.println("Monat: ");
    88. monat = sc.nextInt();// ("Monat: ");
    89. System.out.println("Jahr: ");
    90. jahr = sc.nextInt();// ("Jahr: ");
    91. } catch (NumberFormatException _uh) {
    92. System.out.println("Sie haben falsche Daten eingegeben.");
    93. System.out.println("Bitte geben Sie eine Zahl ein.\n");
    94. continue;
    95. } catch (InputMismatchException _uh) {
    96. System.out.println("Sie haben falsche Daten eingegeben.");
    97. System.out.println("Bitte geben Sie eine Zahl ein.\n");
    98. continue;
    99. }
    100. if (ValidierungOk(jahr, monat, tag)) {
    101. System.out.print("\n Das Datum " + tag + "." + monat + "."
    102. + jahr + " ist ein ");
    103. jh = jahr / 100; /* Jahrhundert */
    104. ja = jahr % 100; /* Jahr im Jahrhundert */
    105. if (monat > 2) {
    106. monat -= 3;
    107. } else {
    108. monat += 9;
    109. ja--;
    110. }
    111. formel = (146097 * jh) / 4 + (1461 * ja) / 4
    112. + (153 * monat + 2) / 5 + tag + 1721119;
    113. switch (formel % 7) {
    114. case 0:
    115. System.out.println("Montag");
    116. break;
    117. case 1:
    118. System.out.println("Dienstag");
    119. break;
    120. case 2:
    121. System.out.println("Mittwoch");
    122. break;
    123. case 3:
    124. System.out.println("Donnerstag");
    125. break;
    126. case 4:
    127. System.out.println("Freitag");
    128. break;
    129. case 5:
    130. System.out.println("Samstag");
    131. break;
    132. case 6:
    133. System.out.println("Sonntag");
    134. break;
    135. }
    136. if (isschaltjahr(jahr)) {
    137. System.out.println(" Das Jahr " + jahr
    138. + " ist ein Schaltjahr");
    139. } else {
    140. System.out.println(" Das Jahr " + jahr
    141. + " ist kein Schaltjahr");
    142. }
    143. } else {
    144. System.out.println("Dieses Datum ergibt keinen Sinn!");
    145. }
    146. } while (true);
    147. }
    148. }
    Alles anzeigen


    Ungetestet, denke mal aber das es fehlerfrei ist, so fit wie ich grade bin :P
    Sollte jetzt eigentlich jede mögliche Eingabe richtig abgefangen werden :)
  • :danke: Stelzi

    doch läuft nicht so wie ich es mir gedacht habe, denn ich kann bei der tag-eingabe auch negative zahlen -3 oder tag 33 eingeben, was aber nicht zugelassen werden soll. es soll schon bei der eingabe die meldung kommen das nur bis 31 tag möglich ist und keine neg zahlen.

    kann leider nicht sagen wo der fehler ist, scheint mir zu komplex.

    Doch wie gesagt, ist sicher mega schwierig und danke trotzdem

    :danke: :) :danke:
  • Naja das liegt daran, das die Überprüfung erst nach der Eingabe aller Daten erfolgt und nicht nach eingabe eines Tages.
    Da ohne die info des Jahres z.b. nicht überprüft werden kann ob es ein Schaltjahr ist und somit 29 korrekt ist für Februar :)
    Genauso kann man nicht wissen ob 31 oder 30 korrekt ist, bevor nicht der Monat eingegeben ist.
    ;)
  • Das hat was, ist wirklich mega kompliziert, da eben das Schaltjahr alles durcheinander bringt. doch trotzdem.


    :hot: Vielen herzlichen Dank :hot:

    ;) !!! an ALLE!!! ;)


    Es hat mich riesig gefreut wenn jedesmal eine Antwort mehr geschrieben wurde. Danke viel mals. ich hoffe dass ich euch auch irgendwann helfen kann.

    :mlol: Danke:mlol: