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