【问题标题】:Passing returned variables to other static methods for calculations将返回的变量传递给其他静态方法进行计算
【发布时间】:2018-12-09 05:15:53
【问题描述】:

大家晚上好,

我必须创建一个使用两个类的程序。一个将包含用于输出的主方法,另一个类将用于静态方法调用主方法。我在这方面做得更好一些,但现在的问题是将一个静态方法中的返回变量传递给另一个静态方法以用于计算。现在我的措辞可能不正确,如果是这样,请告诉我。

到目前为止,我已经创建了四种方法中的两种。方法会输入总金额,第二种方法会使用 if,else 语句考虑佣金率是多少,第三种方法将使用前一种方法中确定的费率计算佣金金额,第四种方法会显示结果。

我遇到的问题是在第二个类的第一个静态方法中,它会显示问题,我可以输入金额。但是,输入不会转移到下一个方法,尽管我将它作为参数传递给第二个方法。我觉得一旦我理解了为什么它没有通过,我就不应该在编写程序的其余部分时遇到问题。主类称为 TapCoCommission。具有静态方法的类是 TapCoCommissionCalc(令人困惑,但老师希望这些方法以这种方式命名。)

我认为这与设置返回值的方式或参数的方式有关。任何澄清都非常感谢!

//Main class begins here
import java.util.Scanner;
import static java.lang.System.out;

public class TapCoCommission
{
    public static final int COMMISSION_2 = 2;
    public static final int COMMISSION_5 = 5;
    public static void main(String[] args)
    {
        double inputTotalMonthlySales = 0;
        double commRate = 0;

        TapCoCommissionCalc.inputTotalSales(inputTotalMonthlySales);   
        TapCoCommissionCalc.setCommRate(inputTotalMonthlySales);


    }
}

// Class with static methods begin here

import java.util.Scanner;
import static java.lang.System.out;

public class TapCoCommissionCalc 
{

    public static final double COMMISSION_2 = 0.02;
    public static final double COMMISSION_5 = 0.05;

    public static double inputTotalSales(double inputTotalMonthlySales)
    {
        Scanner keyboard = new Scanner(System.in);      
        out.println("Enter the total sales for this month.");
        inputTotalMonthlySales = keyboard.nextDouble(); 
        return inputTotalMonthlySales;
    }

    public static double setCommRate(double inputTotalMonthlySales)
    {
        double commRate = 0;

        if (inputTotalMonthlySales <= 10000)
        {
            commRate = COMMISSION_2;
            return commRate;
        }

        else if (inputTotalMonthlySales > 10000)
        {
            commRate = COMMISSION_5;
            return commRate;
        }

        else
        {
            out.println("Please enter amount a positive numerical amount in dollars and cents.");

        }

    return commRate;
    }

    public static double calcCommAmount(double commRate, double inputTotalMonthlySales)
    {
        double commAmount = commRate * inputTotalMonthlySales;

        return commAmount;
    }

    public static void displayCommResults()
    {

    }
}

【问题讨论】:

    标签: java methods parameters static return


    【解决方案1】:
    public static final int COMMISSION_2 = 2;
        public static final int COMMISSION_5 = 5;
        public static void main(String[] args)
        {
            double inputTotalMonthlySales = 0;
            double commRate = 0;
    
            inputTotalMonthlySales=VipCustomer.inputTotalSales(); 
            commRate=VipCustomer.setCommRate(inputTotalMonthlySales);
            System.out.println(commRate);
    
    
        }
    

    在你的主要方法中试试这个。它会正常工作的。

    您实际上不必为第一种方法传递参数 inputTotalMonthlySales,因为您正在为该值获取用户输入。您的代码的问题是您没有将方法的返回值存储在任何变量中,甚至没有打印它们。这就是为什么你看不到任何输出。

    【讨论】:

      【解决方案2】:

      您不需要将inputTotalMonthlySales 传递给第一个方法,只需传递第二个。事实上,inputTotalMonthlySales 是你从第一种方法中得到的值。

      所以你应该把main改成这样的行。

          double inputTotalMonthlySales = TapCoCommissionCalc.inputTotalSales();   
          double commRate = TapCoCommissionCalc.setCommRate(inputTotalMonthlySales);
      

      您应该将inputTotalSales 更改为如下所示。

      public static double inputTotalSales(){
          Scanner keyboard = new Scanner(System.in);      
          out.println("Enter the total sales for this month.");
          double  inputTotalMonthlySales = keyboard.nextDouble(); 
          return inputTotalMonthlySales;
      }
      

      这个想法是,当您在被调用的方法中有 return 时,这就是调用方法中可用的值。您可以在编写时将该值分配给变量

      something = method call ( .... );
      

      【讨论】:

        【解决方案3】:

        第二课

        public static double inputTotalSales(double inputTotalMonthlySales)
        {
            Scanner keyboard = new Scanner(System.in);      
            out.println("Enter the total sales for this month.");
            inputTotalMonthlySales = keyboard.nextDouble(); 
            return inputTotalMonthlySales;
        }
        

        不需要输入参数inputTotalMonthlySales。这个方法的正确写法是:

        public static double inputTotalSales()
        {
            Scanner keyboard = new Scanner(System.in);      
            out.println("Enter the total sales for this month.");
            double inputTotalMonthlySales = keyboard.nextDouble(); 
            return inputTotalMonthlySales;
        }
        

        inputTotalMonthlySales 是方法中的一个局部变量,返回给调用者。

        头等舱

            double inputTotalMonthlySales = 0;
            ....
            TapCoCommissionCalc.inputTotalSales(inputTotalMonthlySales); 
            TapCoCommissionCalc.setCommRate(inputTotalMonthlySales);  
        

        将最后两行改为

            inputTotalMonthlySales = TapCoCommissionCalc.inputTotalSales();
            commRate = TapCoCommissionCalc.setCommRate(inputTotalMonthlySales);
        

        这会将方法返回的值存储到局部变量中。这个局部变量与在第二个类的方法中声明的不同,尽管它具有相同的名称。

        另外,一个强烈的警告:你不应该使用浮点数(即double)来存储货币值,因为浮点数不能准确地表示所有十进制值,从而导致计算错误。货币应始终使用BigDecimal。有关所有血腥细节,请阅读What Every Computer Scientist Should Know About Floating-Point ArithmeticIs Floating Point Broken?

        【讨论】:

        • 我将不得不注意该警告。奇怪的是,这本书从来没有解释过,但钱绝对是需要准确的最重要的事情之一。
        猜你喜欢
        • 1970-01-01
        • 2012-10-04
        • 1970-01-01
        • 2013-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-10
        • 1970-01-01
        相关资源
        最近更新 更多