你好,这个网站的好人。现在我已经开始学习Java,因为我希望在编程方面追求未来。最近我遇到了一个似乎违背所有逻辑的错误,无论我坐在那里试图确定所有可能的原因多久,我都无法找到一个。
import javax.swing.JOptionPane;
public class Answer extends Main {
private static long numerator;
private static long preNumerator;
private static long denominator;
private static long preDenominator;
private static long remainder;
private static String result;
// private static long answer;
// public Line(){
// super();
// }
//
// public Line(long numerator, long denominator, long remainder){
// super(numerator, denominator, remainder);
// }
public Answer() {
this(0, 0);
}
public Answer(long n, long d) {
numNegativeCheck(n, d);
}
public static void numNegativeCheck(long n, long d) {
if (n < 0 || d < 0) {
numerator = n * 2;
numerator = n - numerator;
denominator = d * 2;
denominator = d - denominator;
remainderCalculate(numerator, denominator);
} else {
if (n > 0 || d > 0) {
remainderCalculate(n, d);
} else {
if (n > 0 || d < 0) {
preNumerator = n * 2;
numerator = n - preNumerator;
preDenominator = d * 2;
denominator = d - preDenominator;
remainderCalculateNeg(numerator, denominator);
} else {
if (n < 0 || d > 0) {
remainderCalculateNeg(n, d);
} else {
JOptionPane.showMessageDialog(null, "Error!");
}
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////
public static void remainderCalculateNeg(long n, long d) {
remainder = n / d;
remainderCheckNeg(n, d, remainder);
}
public static void remainderCheckNeg(long n, long d, long r) {
if (r == 0) {
calculationsRZeroNeg(n, d, r);
} else {
calculationsRNeg(n, d, r);
}
}
public static void calculationsRNeg(long n, long d, long r) {
numerator = n / remainder;
denominator = d / remainder;
displayNeg(numerator, denominator, r);
}
public static void calculationsRZeroNeg(long n, long d, long r) {
numerator = n / d;
denominator = 1;
displayNeg(numerator, denominator, r);
}
public static void displayNeg(long n, long d, long r){
if (r == 0){
result = "The answer is: " + numerator;
}else{
result = "The answer is: " + numerator + "/" + denominator;
}
}
////////////////////////////////////////////////////////////////////////////////////////
public static void remainderCalculate(long n, long d) {
if (n > d) {
remainder = n % d;
remainderCheck(n, d, remainder);
} else {
remainder = d % n;
remainderCheck(n, d, remainder);
}
}
public static void remainderCheck(long n, long d, long r) {
if (r == 0) {
calculationsRZero(n, d, r);
} else {
calculationsR(n, d, r);
}
}
public static void calculationsR(long n, long d, long r) {
numerator = n / remainder;
denominator = d / remainder;
displayFraction(n, d);
}
public static void calculationsRZero(long n, long d, long r) {
if (n > d) {
numerator = n / d;
denominator = 1;
displayFull(n, d);
} else {
denominator = d / n;
numerator = 1;
displayFull(n, d);
}
}
public static void displayFull(long n, long d) {
if (n > d) {
result = "The answer is: " + numerator;
} else {
result = "The answer is: " + numerator + "/" + denominator;
}
}
public static void displayFraction(long n, long d) {
result = "The answer is: " + numerator + "/" + denominator;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
public long getNumerator() {
return this.numerator;
}
public long getDenominator() {
return this.denominator;
}
public String getResult() {
return this.result;
}
}
这段代码可能有点乱,但我会解释它的简单要点。我正在制作一个可以减少分数的小程序。它可以处理分子和分母位置的负数,如果分母为 1,则不显示,而是将分子显示为整数(我知道很花哨)。numNegativeCheck 只是检查分数的哪些部分是负数,如果它们中的任何部分实际上是负数,它工作正常。带有所有 neg 的第二部分是与负数有关的简单方法,最后一部分是用于正数的方法。
关于问题:该程序似乎运行良好,但我注意到如果我输入一个正分子(例如 32)和一个负分母(例如 -4),它会显示“-8/1”。现在虽然这是正确的,但我的程序所做的大部分工作是,如果分母为 1,它只显示分子,所以它应该显示“-8”。
当负数计算方法完成后,它们将被定向到负数显示方法。然而,由于一些奇怪的原因,调用了“displayFraction”方法,这是一个完全不同的部分。在过去的一个小时里,我一直在考虑这个问题,只是坐在我的电脑屏幕前,多次逐行浏览代码,无法想出一个解决方案来解释为什么当我告诉它我想调用“displayNeg”方法它调用了别的东西。如果有人有解决方案,我会全力以赴。