From 1bca114fce011811aa5f2d36f86eb17bca3befdc Mon Sep 17 00:00:00 2001 From: andre Date: Sun, 23 Jun 2024 18:46:31 +0200 Subject: [PATCH] =?UTF-8?q?Methoden=20verbessert=20&=20Scanner-Problem=20g?= =?UTF-8?q?el=C3=B6st?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PR1_Pflichtuebung6/src/ueb6/Rechner.java | 219 +++++++++++------------ 1 file changed, 107 insertions(+), 112 deletions(-) diff --git a/PR1_Pflichtuebung6/src/ueb6/Rechner.java b/PR1_Pflichtuebung6/src/ueb6/Rechner.java index 82e772e..ba30bc6 100644 --- a/PR1_Pflichtuebung6/src/ueb6/Rechner.java +++ b/PR1_Pflichtuebung6/src/ueb6/Rechner.java @@ -2,31 +2,44 @@ package ueb6; import java.util.Scanner; public class Rechner { + + static Scanner sc = new Scanner(System.in); + public static void main(String[] args) { - String eingabe; - int ergebnis; - char c; - while (true) { - Scanner input = new Scanner(System.in); - System.out.println("Welche Rechenart soll ausgeführt werden?"); - System.out.println("[ Multiplikation | Division | Exponent | Fakultät ]"); - System.out.println("[ m | d | e | f ]"); - System.out.print("Geben Sie das zugehörige Zeichen ein: "); - - eingabe = input.nextLine(); + while(true) { - ergebnis = 0; + String input =""; - if (eingabe.length() == 1) { - c = eingabe.charAt(0); - ergebnis = berechnung(c); - } else { - System.out.println("Fehler! Bitte nur eins der angegebenen Buchstaben eingeben!"); + System.out.println("Welche Rechenart soll ausgeführt werden?"); + String op[] = {"Multiplikation", "Division", "Exponent", "Fakultät"}; + + System.out.printf("[ %s | %s | %s | %s ]\n", op[0], op[1], op[2], op[3]); + System.out.println("[ m | d | e | f ]"); + System.out.print("Geben Sie das zugehörige Zeichen an: "); + + try { + input = sc.nextLine(); + if (input.length()!=1) + throw new IllegalArgumentException("Nur ein Zeichen eingeben. Versuche es erneut."); + + char c = input.charAt(0); + + try { + int ergebnis = berechnung(c); + System.out.println("Ergebnis: " + ergebnis); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + } catch(ArithmeticException e) { + System.out.println(e.getMessage()); + } + + } catch(IllegalArgumentException e) { + System.out.println(e.getMessage()); } - System.out.println("Ergebnis der gewählten Berechnung: " + ergebnis); - System.out.println(); - input.close(); + System.out.println("\n"); + + } } @@ -38,59 +51,46 @@ public class Rechner { * @return Das Ergebnis der Berechnung oder -1 bei fehlerhafter Eingabe */ public static int berechnung(char c) { - int ergebnis = 0; - Scanner zahl = new Scanner(System.in); - - if (c == 'm') { - try { - System.out.print("Erster Faktor: "); - int faktor1 = zahl.nextInt(); - System.out.print("Zweiter Faktor: "); - int faktor2 = zahl.nextInt(); + int ergebnis; + + switch(c) { + case 'm': + System.out.println("\n* Multiplikation *"); + System.out.print("Ersten Faktor eingeben: "); + int faktor1 = sc.nextInt(); + System.out.print("Zweiten Faktor eingeben: "); + int faktor2 = sc.nextInt(); ergebnis = multiplizieren(faktor1, faktor2); - } catch (IllegalArgumentException e) { - System.out.println("Fehler! Keine der Zahlen darf negativ sein!"); - ergebnis = -1; - } - } else if (c == 'd') { - try { - System.out.print("Dividend: "); - int dividend = zahl.nextInt(); - System.out.print("Divisor: "); - int divisor = zahl.nextInt(); + return ergebnis; + + case 'd': + System.out.println("\n* Division *"); + System.out.print("Dividend eingeben: "); + int dividend = sc.nextInt(); + System.out.print("Divisor eingeben: "); + int divisor = sc.nextInt(); ergebnis = dividieren(dividend, divisor); - } catch (IllegalArgumentException e) { - System.out.println("Fehler! Keine der Zahlen darf negativ sein!"); - ergebnis = -1; - } catch (ArithmeticException e) { - System.out.println("Fehler! Der Divisor darf nicht 0 sein!"); - ergebnis = -1; - } - } else if (c == 'e') { - try { - System.out.print("Grundwert: "); - int grundwert = zahl.nextInt(); - System.out.print("Exponent: "); - int exponent = zahl.nextInt(); - ergebnis = exponent(grundwert, exponent); - } catch (IllegalArgumentException e) { - System.out.println("Fehler! Keine der Zahlen darf negativ sein!"); - ergebnis = -1; - } - } else if (c == 'f') { - try { - System.out.print("Zahl: "); - int n = zahl.nextInt(); - ergebnis = fakultaet(n); - } catch (IllegalArgumentException e) { - System.out.println("Fehler! Die Zahl darf nicht negativ sein!"); - ergebnis = -1; - } - } else { - ergebnis = -1; + return ergebnis; + + case 'e': + System.out.println("\n* Exponent *"); + System.out.print("Grundwert eingeben: "); + int grundwert = sc.nextInt(); + System.out.print("Exponent eingeben: "); + int exponent = sc.nextInt(); + ergebnis = exponent(grundwert, exponent); + return ergebnis; + + case 'f': + System.out.println("\n* Fakultät *"); + System.out.print("Zahl eingeben: "); + int n = sc.nextInt(); + ergebnis = fakultaet(n); + return ergebnis; + + default: + return -1; } - zahl.close(); - return ergebnis; } /** @@ -100,16 +100,18 @@ public class Rechner { * @return Das Produkt der beiden Faktoren * @throws IllegalArgumentException Wenn einer der Faktoren negativ ist */ - public static int multiplizieren(int faktor1, int faktor2) throws IllegalArgumentException { - if(faktor1 < 0 || faktor2 < 0) - throw new IllegalArgumentException(); - if(faktor1 == 1) + public static int multiplizieren(int faktor1, int faktor2) { + if (faktor1 == 0 || faktor2 == 0) + return 0; + if (faktor1 == 1) return faktor2; - else if(faktor2 == 1) + if (faktor2 == 1) return faktor1; - else { - return multiplizieren(faktor1, faktor2-1) + faktor1; + if (faktor1 < 0 || faktor2 < 0) { + throw new IllegalArgumentException("Faktoren dürfen nicht negativ sein!"); } + + return faktor1 + multiplizieren(faktor1, faktor2-1); } /** @@ -120,39 +122,30 @@ public class Rechner { * @throws IllegalArgumentException Wenn einer der Werte negativ ist * @throws ArithmeticException Wenn der Divisor 0 ist * */ - public static int dividieren(int divident, int divisor) throws IllegalArgumentException, ArithmeticException { - int ergebnis = 0; - - if(divident < 0 || divisor < 0) - throw new IllegalArgumentException(); + public static int dividieren(int dividend, int divisor) { if (divisor == 0) - throw new ArithmeticException(); - if(divisor == 1) - return divident; - else if (divisor > divident) - return 0; - else if (divident == divisor) - return 1; - else { - while(divident >= divisor) { - divident -= divisor; - ergebnis += 1; - } - return ergebnis; - } + throw new ArithmeticException("Durch Null teilen nicht möglich!"); + if (dividend < 0 || divisor < 0) + throw new IllegalArgumentException("Dividend und Divisor dürfen nicht negativ sein!"); + if (divisor == 1) + return dividend; + if (dividend >= divisor) + return 1 + dividieren(dividend-divisor, divisor); + + return 0; } - + /** - * Berechnet rekursiv die Potenz, mit gegebenem positiven ganzen Grundwert und - * Exponenten. - * @param grundwert Die Basis - * @param exponent Der Exponent der Basis - * @return Das Ergebnis der Potenzierung - * @throws IllegalArgumentException Wenn einer der Werte negativ ist - */ + * Berechnet rekursiv die Potenz, mit gegebenem positiven ganzen Grundwert und + * Exponenten. + * @param grundwert Die Basis + * @param exponent Der Exponent der Basis + * @return Das Ergebnis der Potenzierung + * @throws IllegalArgumentException Wenn einer der Werte negativ ist + */ public static int exponent(int grundwert, int exponent) { if(grundwert < 0 || exponent < 0) - throw new IllegalArgumentException(); + throw new IllegalArgumentException("Die Basis und der Exponent dürfen nicht negativ sein!"); if (exponent == 0) return 1; if(grundwert == 1) @@ -165,16 +158,18 @@ public class Rechner { } /** - * Berechnet rekursiv die Fakultät einer ganzen positiven Zahl. - * @param n Die Zahl, deren Fakultät berechnet werden soll - * @return Die Fakultät der Zahl - * @throws IllegalArgumentException Wenn die Zahl negativ ist - */ + * Berechnet rekursiv die Fakultät einer ganzen positiven Zahl. + * @param n Die Zahl, deren Fakultät berechnet werden soll + * @return Die Fakultät der Zahl + * @throws IllegalArgumentException Wenn die Zahl negativ ist + */ public static int fakultaet(int n) throws IllegalArgumentException { if (n < 0) throw new IllegalArgumentException(); - if (n == 0 || n == 1) - return 1; + if (n == 0) + return 0; + if (n == 1 || n == 2) + return n; else { return fakultaet(n-1) * n; }