Hi Leutz,
ich muss das erste mal einen eigenen Datentyp per Klasse erstellen und benutzen. Folgende Aufgabenstellung:
Schreiben Sie eine nichtausführbare Klasse Rational mit
den privaten Attributen:
- zaehler und nenner
den öffentlichen Konstruktoren:
- Rational()-Der parameterlose Konstruktor soll die rationale Zahl 0 erzeugen.
- Rational(int z, int n)throws IllegalArgumentException
Der parametrisierte Konstruktor soll die Attribute der Klasse Rational mit den übergebenen
Werten initialisieren. Wenn der Konstruktor in einer Weise benutzt wird, der den obigen
Bedingungen widerspricht, soll eine Exception ausgelöst werden und an die aufrufende Methode
weitergereicht und dort behandelt werden.
den öffentlichen Instanz-Methoden:
- String toString()- Repräsentation einer rationalen Zahl als String in der Form
(zaehler/nenner)
- Rational sum( Rational r)- zu einer rationalen Zahl wird r addiert und das Ergebnis
zurückgegeben
- Rational subt(Rational r)- von einer rationalen Zahl wird r subtrahiert und das
Ergebnis zurückgegeben
- Rational mult(Rational r)- eine rationale Zahl wird mit r multipliziert und das
Ergebnis zurückgegeben
- Rational div(Rational r)- eine rationale Zahl wird durch r dividiert und das Ergebnis
zurückgegeben
- void kuerze()- kürzt eine rationale Zahl, indem die Attribute zaehler und nenner durch
den größten gemeinsamen Teiler (ggT) geteilt werden. Der ggT zweier ganzer Zahlen soll als
statische Methode implementiert werden.
Schreiben Sie eine ausführbare Klasse RationalTest. In der main-Methode soll der Benutzer
wiederholt eine Berechnung auswählen. Die Ergebnisse sollen in geeigneter Form auf dem Bildschirm
angezeigt werden...
Sorry erstmal für soviel Text, ich könnte die Aufgabenstellung jedoch nicht knapper darstellen. Zunächst wollte ich fragen, ob duch den modifizierer Private, der Attribute zaehler und nenner,
nicht verhindert wird, dass diese Attribute mit einem Konstruktor in einer anderen Klasse initialisiert werden können? Oder spielt das keine Rolle, weil ich das alles in eine Datei schreibe?
Als nächstes frage ich mich, wie ich z.B. die methode sum benutzen soll, denn ich kann doch nur einer variable vom typ Rational an diese übergeben(Wir müssen die Methodenköpfe so benutzen, wie sie uns laut Aufgabenstellung vorgegeben sind). Mir ist in Bezug auf diese Problematik wahrscheinlich noch irgendein Kniff nicht klar.
Ich hoffe wie immer auf konstruktive Hilfe und danke schonmal im Voraus
grüße simon
p.s. soweit bin ich bis jetzt gekommen:
ich muss das erste mal einen eigenen Datentyp per Klasse erstellen und benutzen. Folgende Aufgabenstellung:
Schreiben Sie eine nichtausführbare Klasse Rational mit
den privaten Attributen:
- zaehler und nenner
den öffentlichen Konstruktoren:
- Rational()-Der parameterlose Konstruktor soll die rationale Zahl 0 erzeugen.
- Rational(int z, int n)throws IllegalArgumentException
Der parametrisierte Konstruktor soll die Attribute der Klasse Rational mit den übergebenen
Werten initialisieren. Wenn der Konstruktor in einer Weise benutzt wird, der den obigen
Bedingungen widerspricht, soll eine Exception ausgelöst werden und an die aufrufende Methode
weitergereicht und dort behandelt werden.
den öffentlichen Instanz-Methoden:
- String toString()- Repräsentation einer rationalen Zahl als String in der Form
(zaehler/nenner)
- Rational sum( Rational r)- zu einer rationalen Zahl wird r addiert und das Ergebnis
zurückgegeben
- Rational subt(Rational r)- von einer rationalen Zahl wird r subtrahiert und das
Ergebnis zurückgegeben
- Rational mult(Rational r)- eine rationale Zahl wird mit r multipliziert und das
Ergebnis zurückgegeben
- Rational div(Rational r)- eine rationale Zahl wird durch r dividiert und das Ergebnis
zurückgegeben
- void kuerze()- kürzt eine rationale Zahl, indem die Attribute zaehler und nenner durch
den größten gemeinsamen Teiler (ggT) geteilt werden. Der ggT zweier ganzer Zahlen soll als
statische Methode implementiert werden.
Schreiben Sie eine ausführbare Klasse RationalTest. In der main-Methode soll der Benutzer
wiederholt eine Berechnung auswählen. Die Ergebnisse sollen in geeigneter Form auf dem Bildschirm
angezeigt werden...
Sorry erstmal für soviel Text, ich könnte die Aufgabenstellung jedoch nicht knapper darstellen. Zunächst wollte ich fragen, ob duch den modifizierer Private, der Attribute zaehler und nenner,
nicht verhindert wird, dass diese Attribute mit einem Konstruktor in einer anderen Klasse initialisiert werden können? Oder spielt das keine Rolle, weil ich das alles in eine Datei schreibe?
Als nächstes frage ich mich, wie ich z.B. die methode sum benutzen soll, denn ich kann doch nur einer variable vom typ Rational an diese übergeben(Wir müssen die Methodenköpfe so benutzen, wie sie uns laut Aufgabenstellung vorgegeben sind). Mir ist in Bezug auf diese Problematik wahrscheinlich noch irgendein Kniff nicht klar.
Ich hoffe wie immer auf konstruktive Hilfe und danke schonmal im Voraus
grüße simon
p.s. soweit bin ich bis jetzt gekommen:
Java:
import java.util.*
class Rational{
private int zaehler;
private int nenner;
Rational(){
zaehler = 0;
nenner = 1;
}//parameterloser Konstruktor zum initialiesieren des rationalen wertes null
Rational(int z, int n){
zaehler = z;
nenner = n;
}//parametrisierter Konstruktor zum initialisieren einer rationalen Zahl mit den Werten für Zähler und Nenner
String toString(){
String bruch;
String = ""+zaehler+"/"+nenner;
return bruch;
}//Methode, die einen String mit dem Bruch erzeugt
Rational sum (Rational r){
??????????
}
static int ggT(int a, int b) {
while(a != b){
if (a > b)
a = a - b;
else b = b - a;
}
return a;
}//Berechnet den ggT zweier Zahlen
static int kgV(int a, int b,ggT) {
return a * (b / ggT(a,b));
}//Berechnet das ggV zweier Zahlen
}//Rational
class RationalTest{
public static void main(String [] args){
do{
int auswahl;
int zaehler;
int zaehler2;
int nenner;
int nenner2;
int zaehlerneu;
Rational ergebnis;
System.out.println("Bitte waehlen Sie aus:");
System.out.println("1 - addieren ");
System.out.println("2 - subtrahieren ");
System.out.println("3 - multiplizieren ");
System.out.println("4 - dividieren ");
System.out.println("Bitte geben Sie den Zaehler der ersten Zahl ein: ");
zaehler = in.nextInt;
System.out.println("Bitte geben Sie den Nenner der ersten Zahl ein: ");
nenner = in.nextInt;
System.out.println("Bitte geben Sie den Zaehler der zweiten Zahl ein: ");
zaehler2 = in.nextInt;
System.out.println("Bitte geben Sie den Nenner der zweiten Zahl ein: ");
nenner2 = in.nextInt;
switch(auswahl){
case 1: if((zaehler==0)&&(nenner==1){ //Darstellung einer Null
Rational r1 = new rational(); //parameterloser Konstruktor erstellt die null
if((zaehler2==0)&&(nenner2==1){
Rational r2 = new rational();
Rational r1 = new Rational(zaehler, nenner);
Rational r2 = new Rational(zaehler2, nenner2);
ergebnis = sum(r1);//?????????
/*ggT = ggT(nenner,nenner2);
kgV = kgV(nenner,nenner2,ggT);
summand = (kgV/nenner)*zaehler;
summand2 = (kgV/nenner2)*zaehler2;
zaehlerneu = summand + summand2;
*/
}//switch
System.out.println("Möchten sie eine weitere Berechnung durchführen(j,n): ");
eingabe = in.nextChar();
}//do
while(eingabe == j);
}//main
}//RationalTest
Zuletzt bearbeitet von einem Moderator: