Hallo an alle
Ich habe da leider ein Problem...
Ich soll in der Uni eine Bruchklasse schreiben mit folgenden Aufgaben:
Könnt ihr mir helfen?
Das habe ich bereits:
[CODE lang="java" title="Bruch.java"]public class Bruch {
private int zaehler;
private int nenner;
public Bruch(int a, int b){
this.zaehler = a;
this.nenner = b;
kuerze();
}
public String toString() {
String buffer = zaehler + "/" + nenner;
return buffer;
}
public void kuerze() {
int limit = Math.min(zaehler, nenner);
for (int i = 2; i <= limit; i++) {
if (zaehler % i == 0 && nenner % i == 0) {
zaehler /= i;
nenner /= i;
}
}
}
public int getZaehler(){
return zaehler;
}
public int getNenner(){
return nenner;
}
public Bruch addiere(Bruch br){
int z1 = zaehler * br.getNenner();
int z2 = nenner * br.getZaehler();
int n= nenner*br.getNenner();
return new Bruch(z1+z2, n);
}
}[/CODE]
Wichtig ist allerdings die vorgegebene Klasse, die ist nicht veränderbar....:
[CODE lang="java" title="TestBruch.java [READONLY]"]import java.io.*;
import java.lang.reflect.*;
public class TestBruch {
public static void main(String args[]) throws IOException {
Bruch a, b;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int zaehler, nenner;
if(args.length == 2) {
a = new Bruch(args[0]);System.out.println(a);
b = new Bruch(args[1]);System.out.println(b);
}
else if(args.length == 0) {
zaehler = Integer.parseInt(in.readLine());
nenner = Integer.parseInt(in.readLine());
a = new Bruch(zaehler, nenner);
System.out.println(a);
zaehler = Integer.parseInt(in.readLine());
nenner = Integer.parseInt(in.readLine());
b = new Bruch(zaehler, nenner);
System.out.println(b);
}
else {
try { codeVerification(Bruch.class); }
catch(SecurityException e) {
e.printStackTrace(System.out);
}
return;
}
Bruch c;
switch(in.readLine().charAt(0)) {
// case '*':
// c = a.multipliziere(b);
// System.out.println(a+"\n"+b+"\n"+c);
// break;
case '+':
c = a.addiere(b);
System.out.println(a+"\n"+b+"\n"+c);
break;
default:
System.out.println("not supported");
}
}
private static void codeVerification(Class<?> cls) throws
SecurityException {
for(Field f : cls.getDeclaredFields()) {
if(Modifier.isStatic(f.getModifiers()))
System.out.println("Es werde keine Klassenvariablen benötigt, aber die folgende gefunden: " + f.getName());
if(!Modifier.isPrivate(f.getModifiers())) {
System.out.println("Alle Attribute dürfen von außerhalb der Klasse nicht zugreifbar sein, das folgende Attribut ist aber von außen zugreifbar: " + f.getName());
}
}
Method kuerze = null;
for(Method m : cls.getDeclaredMethods()) {
switch(m.getName()) {
case "toString":
case "addiere":
case "multipliziere":
if(!Modifier.isPublic(m.getModifiers()))
System.out.println(m.getName() + " ist nicht public!");
break;
case "kuerze":
kuerze = m;
default:
if(!Modifier.isPrivate(m.getModifiers()))
System.out.println(m.getName() + " ist nicht private!");
}
if(Modifier.isStatic(m.getModifiers()))
System.out.println("Es werden keine static-Methoden benötigt aber die folgende gefunden: " + m.getName());
}
if(kuerze == null) {
System.out.println("Es fehlt eine von außen nicht zugreifbare Methode kuerze!");
}
else {
if(!kuerze.getReturnType().equals(Void.TYPE))
System.out.println("Für die Verwendung der kuerze-Methode wird kein Rückgabetyp benötigt!");
if(kuerze.getParameterCount()!=0) {
System.out.println("Die kuerze-Methode benötigt keine Parameter, da sie direkt auf die Attribute zugreifen soll.");
}
}
for(Constructor<?> constr : cls.getDeclaredConstructors()) {
if(!Modifier.isPublic(constr.getModifiers()))
System.out.println("In dieser Aufgabe sollten alle Konstruktoren von außen zugreifbar sein, was auf " + constr.toGenericString() + " nicht zutrifft.");
}
}
}[/CODE]
Ich danke euch im voraus für die Hilfe!
Ich habe da leider ein Problem...
Ich soll in der Uni eine Bruchklasse schreiben mit folgenden Aufgaben:
- Einen Konstruktor, der als Parameter den Zähler und Nenner als ganze Zahl erhält.
- Einen Konstruktor, welcher eine Zeichenkette erhält. Diese Zeichenkette repräsentiert einen Bruch, wobei garantiert ist, dass die übergeben Zeichenkette immer im Format 123/456 ist.
- Eine (überschreibende) toString-Methode, welche einen Bruch 3434 im Format 3/4 als String zurückgibt (ohne Leerzeichen und Zeilenumbruch!).
- Eine Instanzmethode addiere, welche als Parameter den zweiten Bruch erhält und als Rückgabewert den Ergebnisbruch zurückgibt (weder der aktuelle noch der übergebene Bruch werden verändert).
- Eine von außen nicht zugreifbare Methode kuerze, welche den aktuellen Bruch kürzt und zudem sicherstellt, dass der Bruch immer im gekürzten Zustand vorliegt.
Könnt ihr mir helfen?
Das habe ich bereits:
[CODE lang="java" title="Bruch.java"]public class Bruch {
private int zaehler;
private int nenner;
public Bruch(int a, int b){
this.zaehler = a;
this.nenner = b;
kuerze();
}
public String toString() {
String buffer = zaehler + "/" + nenner;
return buffer;
}
public void kuerze() {
int limit = Math.min(zaehler, nenner);
for (int i = 2; i <= limit; i++) {
if (zaehler % i == 0 && nenner % i == 0) {
zaehler /= i;
nenner /= i;
}
}
}
public int getZaehler(){
return zaehler;
}
public int getNenner(){
return nenner;
}
public Bruch addiere(Bruch br){
int z1 = zaehler * br.getNenner();
int z2 = nenner * br.getZaehler();
int n= nenner*br.getNenner();
return new Bruch(z1+z2, n);
}
}[/CODE]
Wichtig ist allerdings die vorgegebene Klasse, die ist nicht veränderbar....:
[CODE lang="java" title="TestBruch.java [READONLY]"]import java.io.*;
import java.lang.reflect.*;
public class TestBruch {
public static void main(String args[]) throws IOException {
Bruch a, b;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int zaehler, nenner;
if(args.length == 2) {
a = new Bruch(args[0]);System.out.println(a);
b = new Bruch(args[1]);System.out.println(b);
}
else if(args.length == 0) {
zaehler = Integer.parseInt(in.readLine());
nenner = Integer.parseInt(in.readLine());
a = new Bruch(zaehler, nenner);
System.out.println(a);
zaehler = Integer.parseInt(in.readLine());
nenner = Integer.parseInt(in.readLine());
b = new Bruch(zaehler, nenner);
System.out.println(b);
}
else {
try { codeVerification(Bruch.class); }
catch(SecurityException e) {
e.printStackTrace(System.out);
}
return;
}
Bruch c;
switch(in.readLine().charAt(0)) {
// case '*':
// c = a.multipliziere(b);
// System.out.println(a+"\n"+b+"\n"+c);
// break;
case '+':
c = a.addiere(b);
System.out.println(a+"\n"+b+"\n"+c);
break;
default:
System.out.println("not supported");
}
}
private static void codeVerification(Class<?> cls) throws
SecurityException {
for(Field f : cls.getDeclaredFields()) {
if(Modifier.isStatic(f.getModifiers()))
System.out.println("Es werde keine Klassenvariablen benötigt, aber die folgende gefunden: " + f.getName());
if(!Modifier.isPrivate(f.getModifiers())) {
System.out.println("Alle Attribute dürfen von außerhalb der Klasse nicht zugreifbar sein, das folgende Attribut ist aber von außen zugreifbar: " + f.getName());
}
}
Method kuerze = null;
for(Method m : cls.getDeclaredMethods()) {
switch(m.getName()) {
case "toString":
case "addiere":
case "multipliziere":
if(!Modifier.isPublic(m.getModifiers()))
System.out.println(m.getName() + " ist nicht public!");
break;
case "kuerze":
kuerze = m;
default:
if(!Modifier.isPrivate(m.getModifiers()))
System.out.println(m.getName() + " ist nicht private!");
}
if(Modifier.isStatic(m.getModifiers()))
System.out.println("Es werden keine static-Methoden benötigt aber die folgende gefunden: " + m.getName());
}
if(kuerze == null) {
System.out.println("Es fehlt eine von außen nicht zugreifbare Methode kuerze!");
}
else {
if(!kuerze.getReturnType().equals(Void.TYPE))
System.out.println("Für die Verwendung der kuerze-Methode wird kein Rückgabetyp benötigt!");
if(kuerze.getParameterCount()!=0) {
System.out.println("Die kuerze-Methode benötigt keine Parameter, da sie direkt auf die Attribute zugreifen soll.");
}
}
for(Constructor<?> constr : cls.getDeclaredConstructors()) {
if(!Modifier.isPublic(constr.getModifiers()))
System.out.println("In dieser Aufgabe sollten alle Konstruktoren von außen zugreifbar sein, was auf " + constr.toGenericString() + " nicht zutrifft.");
}
}
}[/CODE]
Ich danke euch im voraus für die Hilfe!