hallo
ich hab folgende zwei java files:
und
Beide können kompiliert werden und Calc0 läuft auch. Das Problem: Wenn ich zwei Werte übergebe dann ergibt die Ausgabe immer 0. ABER wenn ich als Nenner 0 wähle wird es trotzdem erkannt und wie gewünscht wird die kleinste bzw. grösste Integer Zahl ausgeben. .. ..??
Woran liegt das? Also irgendwo müssen die Werte ja verloren gehen wenn die Ausgabe immer 0 ist.
ich hab folgende zwei java files:
Code:
import java.io.*;
import javagently.Stream;
class Rational0
{
// Attribute -------------------------------------------------
protected int numerator; // Zähler
protected int denominator; // Nenner
// Konstruktoren ---------------------------------------------
public Rational0()
{
numerator = 0;
denominator = 1;
}
public Rational0(int a, int b)
{
set(a, b);
}
// weitere Methoden ------------------------------------------
/** Zuweisung von neuen Werten an die Attribute */
public void set(int a, int b)
{
numerator = a;
denominator = b;
/***** Anpassung für den Sonderfall b = 0 ****/
if (b == 0) {
denominator = 1;
if (a < 0)
{
numerator = Integer.MIN_VALUE;
}
else
{
numerator = Integer.MAX_VALUE;
}
}
/*********************************************/
}
//------------------------------------------------------------
/** Multiplikation zweier rationaler Zahlen */
public Rational0 mult(Rational0 other)
{
return new Rational0(numerator * other.numerator,
denominator * other.denominator);
}
//------------------------------------------------------------
/** Methode zur Berechnung des grössten gemeinsamen
Teilers zweier ganzer Zahlen a und b */
private static int gcd(int a, int b)
{
int next;
int result = Math.abs(a);
int rest = Math.abs(b);
while (rest != 0)
{
next = result;
result = rest;
rest = next % result;
}
return result;
}
// Addition zweier R Zahlen
public Rational0 add(Rational0 other) {
return new Rational0(numerator * other.denominator + denominator * other.numerator,
denominator * other.denominator);
}
// Subtraktioin zweier R Zahlen
public Rational0 sub(Rational0 other) {
return new Rational0(numerator * other.denominator - denominator * other.numerator,
denominator * other.denominator);
}
// Ausgabe einer R Zahl
public void output() {
double zahl = numerator/denominator;
System.out.println(zahl);
}
// Änderung ab Tastatur
public void change() throws IOException {
Stream in = new Stream(System.in);
PrintStream out = System.out;
out.println("\nMomentaner Zähler :"+numerator+
"\nMomentaner Nenner :"+denominator);
out.println("\nNeuer Zähler :");
numerator = in.readInt();
out.println("Neuer Nenner :");
denominator = in.readInt();
}
}
und
Code:
import java.io.*;
import javagently.*;
class Calc0{
public static void main(String[] args) throws IOException {
Stream in = new Stream(System.in);
PrintStream out = System.out;
out.println("Geben sie einen Zaehler ein: ");
int zähler = in.readInt();
out.println("Geben sie einen Nenner ein: ");
int nenner = in.readInt();
Rational0 zahl = new Rational0(zähler, nenner);
out.println();
zahl.output();
}
}
Beide können kompiliert werden und Calc0 läuft auch. Das Problem: Wenn ich zwei Werte übergebe dann ergibt die Ausgabe immer 0. ABER wenn ich als Nenner 0 wähle wird es trotzdem erkannt und wie gewünscht wird die kleinste bzw. grösste Integer Zahl ausgeben. .. ..??
Woran liegt das? Also irgendwo müssen die Werte ja verloren gehen wenn die Ausgabe immer 0 ist.