Передача возвращаемых переменных другим статическим методам для вычислений - PullRequest
0 голосов
/ 30 июня 2018

Добрый вечер всем,

Мне нужно создать программу, которая использует два класса. Один будет содержать метод main для вывода, а другой класс - статические методы для вызова метода main. Я стал немного лучше в этом, но теперь проблема заключается в передаче возвращаемых переменных в одном статическом методе другому статическому методу, который будет использоваться в вычислениях. Теперь я могу сформулировать это неправильно, если да, дайте мне знать.

Пока что я создал два из четырех методов. Методы будут вводить итоговое значение, второй метод будет учитывать, какую ставку комиссии будет использовать оператор 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()
    {

    }
}

Ответы [ 3 ]

0 голосов
/ 30 июня 2018

Вам не нужно передавать 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 ( .... );
0 голосов
/ 30 июня 2018
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 для первого метода, потому что вы принимаете пользовательский ввод для этого значения. Проблема с вашим кодом заключается в том, что вы не сохраняете возвращаемое значение метода в какой-либо переменной и даже не печатаете их. Вот почему вы не видите никаких результатов.

0 голосов
/ 30 июня 2018

Во втором классе

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);  

изменить последние 2 строки на

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

Сохраняет значение, возвращаемое методом, в локальную переменную. Эта локальная переменная отличается от объявленной в методе второго класса, даже если она имеет то же имя.

Кроме того, сильное ПРЕДУПРЕЖДЕНИЕ. Никогда не используйте плавающую точку (т. Е. double) для хранения значений валюты, поскольку плавающая точка не может точно представлять все десятичные значения, что приводит к ошибкам в вычислениях. Валюта должна всегда использовать BigDecimal. Для всех кровавых подробностей прочитайте Что должен знать каждый учёный об арифметике с плавающей точкой и С плавающей точкой разбита?

...