当前代码仅在运行时返回值0

时间:2014-01-22 05:13:45

标签: java class methods zero

这是控制台。在用户决定要计算的内容后输入值。从类返回的值为零。我有私有变量,有访问器和mutator。我不知道这是什么原因。有任何想法吗??请!

public class Console {

    public static final int USER_CHOIDE_VOLTAGE = 1;
    public static final int USER_CHOIDE_AMPERAGE = 2;
    public static final int USER_CHOIDE_RESISTANCE = 3;
    public static void main(final String[] args) {
        // Creates a Circuit Object
        Circuit myCircuit = new Circuit();
        // Creates a Scanner Object to get input from user
        Scanner keyboard = new Scanner(System.in);
        // Holds input from user
        int userChoice;
System.out.println("\n");
        System.out.println("This system will calculate the ");
        System.out.println("\tVoltage, Amperage, or Resistance ");
        System.out.println("\tgiven the other two values using Ohms Law.");
        System.out.println("\n");

        // Ask user what to calculate, if it is not one
        // of the options, ask again(while-do loop)
        do {
            System.out.println("Which value would you like to calculate?");
            System.out.println("\t1. Voltage");
            System.out.println("\t2. Resistane");
            System.out.println("\t3. Amperage");
            System.out.println("\n");
            System.out.println("Please select 1, 2, or 3");
            userChoice = keyboard.nextInt();

            //Switch follows cases for what the user would
            // like to calculate
        switch (userChoice) {
            case USER_CHOIDE_VOLTAGE:
                // Gets Amperage from User
                System.out.println("Please enter the Amperage:");
                // Sets Amperage value
                myCircuit.setAmperage(keyboard.nextDouble());
                // Gets Resistance from User
                System.out.println("Please enter the Resistance:");
                // Sets Resistance value
                myCircuit.setResistance(keyboard.nextDouble());
                // Returns Value for voltage from method
                System.out.println("The value of Voltage is: "
                        + myCircuit.getVoltage());
                break;

            case USER_CHOIDE_AMPERAGE:
                // Gets Voltage from User
                System.out.println("Please enter the Voltage:");
                myCircuit.setVoltage(keyboard.nextDouble());
                // Gets Resistance from User
                System.out.println("Please enter the Resistance:");
                // Sets Resistance value
                myCircuit.setResistance(keyboard.nextDouble());
                // Returns Value for Amperage from method
                System.out.println("The value of Amperage is: "
                        + myCircuit.getAmperage());
                break;

            case USER_CHOIDE_RESISTANCE:
                // Gets Amperage from User
                System.out.println("Please enter the Amperage:");
                // Sets Amperage value
                myCircuit.setAmperage(keyboard.nextDouble());
                // Gets Voltage from User
                System.out.println("Please enter the Voltage:");
                myCircuit.setVoltage(keyboard.nextDouble());
                // Returns Value for Resistance from method
                System.out.println("The value of Resistance is: "
                        + myCircuit.getResistance());
                break;
            // Do Nothing Since do while loop takes care of this option
            default:
            }
        } while (userChoice != USER_CHOIDE_VOLTAGE
            && userChoice != USER_CHOIDE_AMPERAGE
            && userChoice != USER_CHOIDE_RESISTANCE);

        System.exit(0);
        keyboard.close();
    }
}

这是班级

public class Circuit {

    private double voltage, resistance, amperage;

    public double getVoltage() {
        return voltage;
    }

    public double getResistance() {
        return resistance;
    }

    public double getAmperage() {
        return amperage;
    }

    public void setVoltage(double pVoltage) {
        voltage = pVoltage;
    }

    public void setResistance(double pResistance) {
        resistance = pResistance;
    }

    public void setAmperage(double pAmperage) {
        amperage = pAmperage;
    }

    public void calcVoltage() {
        voltage = amperage * resistance;
    }

    public  void calcResistance() {
        resistance = voltage / amperage;
    }
    public void calcAmperage() {
        amperage = voltage / resistance;
    }
}

5 个答案:

答案 0 :(得分:1)

您实际上从未调用任何Circuit类calc...()方法。

答案 1 :(得分:1)

您需要在最终的印刷陈述之前调用适当的calc方法。

例如,当userChoiceUSER_CHOIDE_VOLTAGE时:

        case USER_CHOIDE_VOLTAGE:
            // Gets Amperage from User
            System.out.println("Please enter the Amperage:");
            // Sets Amperage value
            myCircuit.setAmperage(keyboard.nextDouble());
            // Gets Resistance from User
            System.out.println("Please enter the Resistance:");
            // Sets Resistance value
            myCircuit.setResistance(keyboard.nextDouble());
            // *** Add the following line to your program. ***
            myCircuit.calcVoltage();
            // Returns Value for voltage from method
            System.out.println("The value of Voltage is: "
                    + myCircuit.getVoltage());
            break;

答案 2 :(得分:0)

这是问题

例如

您正在呼叫myCircuit.getVoltage()

并且在函数中你没有计算任何东西

public double getVoltage() {
    return voltage;
}

而是打电话

myCircuit.calcVoltage()

答案 3 :(得分:0)

您没有调用calcSomething()方法,因此,您没有计算任何内容,只是返回(getSomething())值而不进行修改。在继续之前,请检查您的打印声明,我认为它们应该是

System.out.println("\t1. Voltage");
System.out.println("\t2. Amperate");
System.out.println("\t3. Resistance");

因为你声明了常量:

public static final int USER_CHOIDE_VOLTAGE = 1;
public static final int USER_CHOIDE_AMPERAGE = 2;
public static final int USER_CHOIDE_RESISTANCE = 3;

继续说明,假设输入为2,因此switch会输入case USER_CHOIDE_AMPERAGE,这就是问题所在,您必须通过调用{来计算“安培” {1}}:

myCircuit.calcAmperage()

您必须对其他case USER_CHOIDE_AMPERAGE: System.out.println("Please enter the Voltage:"); myCircuit.setVoltage(keyboard.nextDouble()); System.out.println("Please enter the Resistance:"); myCircuit.setResistance(keyboard.nextDouble()); myCircuit.calcAmperage(); // ADD THIS LINE System.out.println("The value of Amperage is: " + myCircuit.getAmperage()); break; 进行类似的更改。

答案 4 :(得分:0)

您可以拨打电话..每个Getter方法中的方法,如..

  public double getAmperage() {
    calcAmperage();
    return amperage;
}



 public double getVoltage() {
    calcVoltage();
    return voltage;
}