Methoden verbessert & Scanner-Problem gelöst

master
andre 2024-06-23 18:46:31 +02:00
parent e16fb0b1ab
commit 1bca114fce
1 changed files with 107 additions and 112 deletions

View File

@ -2,31 +2,44 @@ package ueb6;
import java.util.Scanner; import java.util.Scanner;
public class Rechner { public class Rechner {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) { public static void main(String[] args) {
String eingabe;
int ergebnis;
char c;
while (true) { 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();
ergebnis = 0; String input ="";
if (eingabe.length() == 1) { System.out.println("Welche Rechenart soll ausgeführt werden?");
c = eingabe.charAt(0); String op[] = {"Multiplikation", "Division", "Exponent", "Fakultät"};
ergebnis = berechnung(c);
} else { System.out.printf("[ %s | %s | %s | %s ]\n", op[0], op[1], op[2], op[3]);
System.out.println("Fehler! Bitte nur eins der angegebenen Buchstaben eingeben!"); 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("\n");
System.out.println();
input.close();
} }
} }
@ -38,59 +51,46 @@ public class Rechner {
* @return Das Ergebnis der Berechnung oder -1 bei fehlerhafter Eingabe * @return Das Ergebnis der Berechnung oder -1 bei fehlerhafter Eingabe
*/ */
public static int berechnung(char c) { public static int berechnung(char c) {
int ergebnis = 0; int ergebnis;
Scanner zahl = new Scanner(System.in);
switch(c) {
if (c == 'm') { case 'm':
try { System.out.println("\n* Multiplikation *");
System.out.print("Erster Faktor: "); System.out.print("Ersten Faktor eingeben: ");
int faktor1 = zahl.nextInt(); int faktor1 = sc.nextInt();
System.out.print("Zweiter Faktor: "); System.out.print("Zweiten Faktor eingeben: ");
int faktor2 = zahl.nextInt(); int faktor2 = sc.nextInt();
ergebnis = multiplizieren(faktor1, faktor2); ergebnis = multiplizieren(faktor1, faktor2);
} catch (IllegalArgumentException e) { return ergebnis;
System.out.println("Fehler! Keine der Zahlen darf negativ sein!");
ergebnis = -1; case 'd':
} System.out.println("\n* Division *");
} else if (c == 'd') { System.out.print("Dividend eingeben: ");
try { int dividend = sc.nextInt();
System.out.print("Dividend: "); System.out.print("Divisor eingeben: ");
int dividend = zahl.nextInt(); int divisor = sc.nextInt();
System.out.print("Divisor: ");
int divisor = zahl.nextInt();
ergebnis = dividieren(dividend, divisor); ergebnis = dividieren(dividend, divisor);
} catch (IllegalArgumentException e) { return ergebnis;
System.out.println("Fehler! Keine der Zahlen darf negativ sein!");
ergebnis = -1; case 'e':
} catch (ArithmeticException e) { System.out.println("\n* Exponent *");
System.out.println("Fehler! Der Divisor darf nicht 0 sein!"); System.out.print("Grundwert eingeben: ");
ergebnis = -1; int grundwert = sc.nextInt();
} System.out.print("Exponent eingeben: ");
} else if (c == 'e') { int exponent = sc.nextInt();
try { ergebnis = exponent(grundwert, exponent);
System.out.print("Grundwert: "); return ergebnis;
int grundwert = zahl.nextInt();
System.out.print("Exponent: "); case 'f':
int exponent = zahl.nextInt(); System.out.println("\n* Fakultät *");
ergebnis = exponent(grundwert, exponent); System.out.print("Zahl eingeben: ");
} catch (IllegalArgumentException e) { int n = sc.nextInt();
System.out.println("Fehler! Keine der Zahlen darf negativ sein!"); ergebnis = fakultaet(n);
ergebnis = -1; return ergebnis;
}
} else if (c == 'f') { default:
try { return -1;
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;
} }
zahl.close();
return ergebnis;
} }
/** /**
@ -100,16 +100,18 @@ public class Rechner {
* @return Das Produkt der beiden Faktoren * @return Das Produkt der beiden Faktoren
* @throws IllegalArgumentException Wenn einer der Faktoren negativ ist * @throws IllegalArgumentException Wenn einer der Faktoren negativ ist
*/ */
public static int multiplizieren(int faktor1, int faktor2) throws IllegalArgumentException { public static int multiplizieren(int faktor1, int faktor2) {
if(faktor1 < 0 || faktor2 < 0) if (faktor1 == 0 || faktor2 == 0)
throw new IllegalArgumentException(); return 0;
if(faktor1 == 1) if (faktor1 == 1)
return faktor2; return faktor2;
else if(faktor2 == 1) if (faktor2 == 1)
return faktor1; return faktor1;
else { if (faktor1 < 0 || faktor2 < 0) {
return multiplizieren(faktor1, faktor2-1) + faktor1; 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 IllegalArgumentException Wenn einer der Werte negativ ist
* @throws ArithmeticException Wenn der Divisor 0 ist * @throws ArithmeticException Wenn der Divisor 0 ist
* */ * */
public static int dividieren(int divident, int divisor) throws IllegalArgumentException, ArithmeticException { public static int dividieren(int dividend, int divisor) {
int ergebnis = 0;
if(divident < 0 || divisor < 0)
throw new IllegalArgumentException();
if (divisor == 0) if (divisor == 0)
throw new ArithmeticException(); throw new ArithmeticException("Durch Null teilen nicht möglich!");
if(divisor == 1) if (dividend < 0 || divisor < 0)
return divident; throw new IllegalArgumentException("Dividend und Divisor dürfen nicht negativ sein!");
else if (divisor > divident) if (divisor == 1)
return 0; return dividend;
else if (divident == divisor) if (dividend >= divisor)
return 1; return 1 + dividieren(dividend-divisor, divisor);
else {
while(divident >= divisor) { return 0;
divident -= divisor;
ergebnis += 1;
}
return ergebnis;
}
} }
/** /**
* Berechnet rekursiv die Potenz, mit gegebenem positiven ganzen Grundwert und * Berechnet rekursiv die Potenz, mit gegebenem positiven ganzen Grundwert und
* Exponenten. * Exponenten.
* @param grundwert Die Basis * @param grundwert Die Basis
* @param exponent Der Exponent der Basis * @param exponent Der Exponent der Basis
* @return Das Ergebnis der Potenzierung * @return Das Ergebnis der Potenzierung
* @throws IllegalArgumentException Wenn einer der Werte negativ ist * @throws IllegalArgumentException Wenn einer der Werte negativ ist
*/ */
public static int exponent(int grundwert, int exponent) { public static int exponent(int grundwert, int exponent) {
if(grundwert < 0 || exponent < 0) if(grundwert < 0 || exponent < 0)
throw new IllegalArgumentException(); throw new IllegalArgumentException("Die Basis und der Exponent dürfen nicht negativ sein!");
if (exponent == 0) if (exponent == 0)
return 1; return 1;
if(grundwert == 1) if(grundwert == 1)
@ -165,16 +158,18 @@ public class Rechner {
} }
/** /**
* Berechnet rekursiv die Fakultät einer ganzen positiven Zahl. * Berechnet rekursiv die Fakultät einer ganzen positiven Zahl.
* @param n Die Zahl, deren Fakultät berechnet werden soll * @param n Die Zahl, deren Fakultät berechnet werden soll
* @return Die Fakultät der Zahl * @return Die Fakultät der Zahl
* @throws IllegalArgumentException Wenn die Zahl negativ ist * @throws IllegalArgumentException Wenn die Zahl negativ ist
*/ */
public static int fakultaet(int n) throws IllegalArgumentException { public static int fakultaet(int n) throws IllegalArgumentException {
if (n < 0) if (n < 0)
throw new IllegalArgumentException(); throw new IllegalArgumentException();
if (n == 0 || n == 1) if (n == 0)
return 1; return 0;
if (n == 1 || n == 2)
return n;
else { else {
return fakultaet(n-1) * n; return fakultaet(n-1) * n;
} }