Methoden verbessert & Scanner-Problem gelöst
parent
e16fb0b1ab
commit
1bca114fce
|
@ -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);
|
||||
|
||||
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();
|
||||
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();
|
||||
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 divident;
|
||||
else if (divisor > divident)
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue