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;
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);
while(true) {
String input ="";
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.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) {
c = eingabe.charAt(0);
ergebnis = berechnung(c);
} else {
System.out.println("Fehler! Bitte nur eins der angegebenen Buchstaben eingeben!");
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());
}
System.out.println("Ergebnis der gewählten Berechnung: " + ergebnis);
System.out.println();
input.close();
} catch(IllegalArgumentException e) {
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
*/
public static int berechnung(char c) {
int ergebnis = 0;
Scanner zahl = new Scanner(System.in);
int ergebnis;
if (c == 'm') {
try {
System.out.print("Erster Faktor: ");
int faktor1 = zahl.nextInt();
System.out.print("Zweiter Faktor: ");
int faktor2 = zahl.nextInt();
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();
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;
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
* @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,26 +122,17 @@ 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)
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;
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) {
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)
@ -173,8 +166,10 @@ public class Rechner {
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;
}