Java fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
4.0 KiB

4 years ago
  1. Tee ohjelma Opintopisteet, joka kysyy, monesko lukukausi opiskelijalla on menossa. Tämän jälkeen ohjelma, kuinka monta opintopistettä opiskelija on saanut kunakin lukukautena. Lopuksi ohjelma kertoo
  2. - kuinka paljon opiskelijalla pitäisi olla tähän mennessä opintopisteitä, kun lukukauden tavoite on 30 opintopistettä,
  3. - opiskelijan yhteenlaskettujen opintopisteiden määrän,
  4. - ilmoituksen, onko jäljessä tavoitteesta, tavoitteessa vai yli tavoitteen
  5. ("Olet jäljessä tavoitteesta.", "Olet tavoitteessa." tai "Olet edellä tavoitteesta.")
  6. - vielä tutkintoon vaadittavien pisteiden määrän, kun tutkinto on 210 opintopistettä.
  7. ```
  8. Example output:
  9. Anna lukukausien määrä: 3
  10. Anna 1. lukukauden opintopisteesi: 40
  11. Anna 2. lukukauden opintopisteesi: 27
  12. Anna 3. lukukauden opintopisteesi: 30
  13. Sinulla pitäisi olla tähän mennessä 90 opintopistettä.
  14. Sinulla on 97 opintopistettä.
  15. Olet edellä tavoitteesta.
  16. Tutkinnosta puuttuu vielä 113 opintopistettä.
  17. ```
  18. --------------------
  19. **Opintopisteet.java**
  20. ```
  21. import java.util.Scanner;
  22. import java.text.DecimalFormat;
  23. import java.util.InputMismatchException;
  24. public class Opintopisteet {
  25. public static void main(String[] args) {
  26. DecimalFormat r2 = new DecimalFormat("0.00");
  27. Scanner syote_lukukausi = new Scanner(System.in);
  28. int tutkinto_op = 210, lukukausi_op = 30;
  29. System.out.print("Anna lukukausien määrä: ");
  30. try {
  31. int lukukaudet = syote_lukukausi.nextInt();
  32. if (lukukaudet < 1 || lukukaudet > 8) {
  33. System.err.println("Syötetty lukukausien määrä on virheellinen. Ohjelma keskeytetty");
  34. System.exit(1);
  35. }
  36. String tavoite_lause = "";
  37. int lukukausi_op_tavoite = 0, opiskelija_op_yht = 0;
  38. for (int i = 1; i <= lukukaudet; i++) {
  39. int max_tries = 4;
  40. System.out.print("Anna " + i + ". lukukauden opintopisteesi: ");
  41. while (max_tries > 0) {
  42. try {
  43. Scanner syote_op = new Scanner(System.in);
  44. int opiskelija_op = syote_op.nextInt();
  45. if (opiskelija_op < 0) {
  46. throw new InputMismatchException();
  47. } else {
  48. opiskelija_op_yht += opiskelija_op;
  49. }
  50. lukukausi_op_tavoite += lukukausi_op;
  51. break;
  52. } catch (InputMismatchException e) {
  53. System.err.println(
  54. "Opintopisteiden täytyy olla positiivinen kokonaisluku\n" +
  55. "Yritä uudelleen (kertoja jäljellä: " + (max_tries - 1) + ")"
  56. );
  57. max_tries -= 1;
  58. continue;
  59. }
  60. }
  61. if (max_tries == 0) {
  62. System.err.println("Syöttämäsi opintopisteet ovat virheelliset. Ohjelma keskeytetty");
  63. System.exit(1);
  64. }
  65. }
  66. if (opiskelija_op_yht > lukukausi_op_tavoite) {
  67. tavoite_lause = "Olet edellä tavoitteesta.";
  68. } else if (opiskelija_op_yht == lukukausi_op_tavoite) {
  69. tavoite_lause = "Olet tavoitteessa.";
  70. } else {
  71. tavoite_lause = "Olet jäljessä tavoitteesta.";
  72. }
  73. System.out.printf(
  74. "Sinulla pitäisi olla tähän mennessä %s opintopistettä.\n" +
  75. "Sinulla on %s opintopistettä.\n" +
  76. "%s\n" + "Tutkinnosta puuttuu vielä %s opintopistettä.",
  77. lukukausi_op_tavoite,
  78. opiskelija_op_yht,
  79. tavoite_lause,
  80. (tutkinto_op - opiskelija_op_yht)
  81. );
  82. } catch (InputMismatchException e) {
  83. System.err.println("Lukukauden täytyy olla kokonaisluku. Ohjelma keskeytetty");
  84. System.exit(1);
  85. }
  86. }
  87. }
  88. ```