Итак, у меня было простое приложение для школы. Который вычитает, делит, умножает и добавляет на фракции.Невозможно делить на ноль Фракции
Это сработало неплохо, но теперь с 1 долей я получаю сообщение об ошибке. Фракция: 28/16 - 42/24
Exception in thread "main" java.lang.ArithmeticException:/by zero
at sample.Breuk.reduce(Breuk.java:70)
at sample.Breuk.subtract(Breuk.java:44)
at sample.Main.main(Main.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Так я пошел к линии, где она идет не так, и оказалось, это был вычитанием фракции.
Теперь я вычислил фракции (28/16 - 42/24) и результат = 0.
Так что я знаю, где моя ошибка и что происходит не так, но я не знаю, как исправить это. У кого-нибудь есть советы для меня?
public Breuk subtract(Breuk other){
int d = teller * other.teller;
int n1 = noemer * other.teller;
int n2 = other.noemer * teller;
Breuk b = new Breuk(n1-n2,d);
b.reduce();
return b;
}
private void reduce() {
int i = Math.min(Math.abs(noemer), Math.abs(teller));
if (i == 0) {
System.out.println("Error");
}
while ((noemer % i != 0) || (teller % i != 0)) //BUG IS HERE//
i--;
noemer = noemer/i;
teller = teller/i;
}
}
ОСНОВНОЙ:
Breuk a = new Breuk(28,16);
Breuk b = new Breuk(42,24);
Breuk g = a.subtract(b); // Breuk A - Breuk b
System.out.println(a + " - " + b + " = "+ g);
При '% i' или'/i', проверьте, если 'i' не равен 0. Если это так, обрабатывайте его (вы сами решаете). – Maroun
У вас есть 'Breuk (0, 384)', то есть 'i' начинается как' 0'. Вероятно, вы печатаете «ошибку» (которая в данном случае не является ошибкой), но затем продолжайте в любом случае. Если 'noemer'' 0', вы должны просто свести к '0/1'. –
@tobias_k да, это правда, поэтому мне просто нужно изменить if, чтобы уменьшить его и сделать время в другом? – Lozeputten