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);
String input ="";
System.out.println("Welche Rechenart soll ausgeführt werden?"); System.out.println("Welche Rechenart soll ausgeführt werden?");
System.out.println("[ Multiplikation | Division | Exponent | Fakultät ]"); 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.println("[ m | d | e | f ]");
System.out.print("Geben Sie das zugehörige Zeichen ein: "); System.out.print("Geben Sie das zugehörige Zeichen an: ");
eingabe = input.nextLine(); try {
input = sc.nextLine();
if (input.length()!=1)
throw new IllegalArgumentException("Nur ein Zeichen eingeben. Versuche es erneut.");
ergebnis = 0; char c = input.charAt(0);
if (eingabe.length() == 1) { try {
c = eingabe.charAt(0); int ergebnis = berechnung(c);
ergebnis = berechnung(c); System.out.println("Ergebnis: " + ergebnis);
} else { } catch (IllegalArgumentException e) {
System.out.println("Fehler! Bitte nur eins der angegebenen Buchstaben eingeben!"); System.out.println(e.getMessage());
} catch(ArithmeticException e) {
System.out.println(e.getMessage());
} }
System.out.println("Ergebnis der gewählten Berechnung: " + ergebnis);
System.out.println(); } catch(IllegalArgumentException e) {
input.close(); System.out.println(e.getMessage());
}
System.out.println("\n");
} }
} }
@ -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);
if (c == 'm') { switch(c) {
try { case 'm':
System.out.print("Erster Faktor: "); System.out.println("\n* Multiplikation *");
int faktor1 = zahl.nextInt(); System.out.print("Ersten Faktor eingeben: ");
System.out.print("Zweiter Faktor: "); int faktor1 = sc.nextInt();
int faktor2 = zahl.nextInt(); System.out.print("Zweiten Faktor eingeben: ");
int faktor2 = sc.nextInt();
ergebnis = multiplizieren(faktor1, faktor2); 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();
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;
}
zahl.close();
return ergebnis; 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);
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;
}
} }
/** /**
@ -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,26 +122,17 @@ 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 (dividend < 0 || divisor < 0)
throw new IllegalArgumentException("Dividend und Divisor dürfen nicht negativ sein!");
if (divisor == 1) if (divisor == 1)
return divident; return dividend;
else if (divisor > divident) if (dividend >= divisor)
return 1 + dividieren(dividend-divisor, divisor);
return 0; return 0;
else if (divident == divisor)
return 1;
else {
while(divident >= divisor) {
divident -= divisor;
ergebnis += 1;
}
return ergebnis;
}
} }
/** /**
@ -152,7 +145,7 @@ public class Rechner {
*/ */
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)
@ -173,8 +166,10 @@ public class Rechner {
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;
} }