Java代码不调用必要的方法

Java代码不调用必要的方法,java,Java,你们好,本网站的优秀人士。现在我已经开始学习Java,因为我希望在编程方面有一个未来。最近,我遇到了一个似乎违反所有逻辑的错误,无论我在那里坐多久试图确定每一个可能的原因,我都无法找到一个 import javax.swing.JOptionPane; public class Answer extends Main { private static long numerator; private static long preNumerator; private static long d

你们好,本网站的优秀人士。现在我已经开始学习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只检查分数的哪些部分是负数,如果其中任何部分实际上是负数,那么它工作正常。第二部分是关于负数的简单方法,最后一部分是关于正数的方法

关于这个问题:这个程序似乎运行得很好,但我注意到如果我输入一个正分子,比如32,负分母,比如-4,它会显示-8/1。现在,虽然这是正确的,但我的程序所做的大部分工作是,如果分母是1,它只显示分子,所以它应该显示-8


负片计算方法完成后,将指向负片显示方法。然而,出于某种奇怪的原因,调用displayFraction方法,这是一个完全不同的部分。在过去的一个小时里,我一直在思考这个问题,只是坐在我的电脑屏幕前,一行一行地反复查看代码,无法找到一个解决方案,为什么当我告诉它我想调用displayNeg方法时,它会调用其他方法。如果有人有解决方案,我洗耳恭听。

你使用过调试器或穷人的调试器系统吗。out.printlnfoo variable=+foo;要检查代码运行时的状态和行为?使用调试器将向您显示程序真正在做什么—为什么,而不是您认为它应该做什么。提示:要更改int的符号,只需执行余数=-rements;。您不需要将原始值减去两倍。对所有这些都不熟悉的一个副作用是我想调试,但不知道如何调试。我正在使用Eclipse,已经浏览了整个web,但它似乎不起作用。我也不知道这是否重要,但整个程序都在一个JOptionPane中运行。@ViliMilner-不幸的是,几乎没有其他人会这么做。事实上,大多数人可能会认为你在尝试其他东西。其他注意事项-尝试使用更多在方法内部声明的局部变量,如果可以,尤其要避免使用静态变量。更专注于传递包含所需信息的值/值对象。尝试将方法参数标记为如何使用它们,并消除未使用的参数。