【问题标题】:Inputting Array Data into a method within a separate class from another method in another class将数组数据输入到与另一个类中的另一个方法不同的类中的方法中
【发布时间】:2014-01-03 05:17:33
【问题描述】:

这些类旨在协同工作以产生如下输出:http://i.imgur.com/Plu1yU5.png 我有一个逻辑错误,不允许我为显示和/或声明为 0 的变量生成输出和数据。我已经拼命工作了好几个小时试图修复这个错误——但无济于事。如果有人能告诉我如何解决我的代码中的问题以产生我想要的输出,我将不胜感激。

这是课

/**
 * This class instantiates car objects with ten private instance variables.
 * It contains eight mutator methods to calculate mi/gal, distance (mi), gal/mi,
 * total cost; minimum/maximum, total, and annual values for these variables within a car object.
 * There are getter methods for each private instance variable.
 *
 * @author A. Mackey
 * @version 01/02/14
 */
public class AnnualFuelUse
{
    //private instance variables
    private double gallonsUsed, pricePerGallon, totalCost,
                   minSpeed, maxSpeed,
                   minVariable, maxVariable, minMaxVariable,
                   galPerMi, miPerGal,
                   startingMiles, endingMiles, distance,
                   totalVariable[], totalValue;

    //constructor with two parameters
    AnnualFuelUse(int FillUpNumber, double eMiles, double sMiles, double galsUsed, double pricePerGal)
    {
        startingMiles = sMiles;
        endingMiles = eMiles;
        gallonsUsed = galsUsed;
        pricePerGallon = pricePerGal;
    }

    //mutator method which calculates the distance drive
    public void calcDistance()
    {
        distance = endingMiles - startingMiles;
    }

    //getter method to return the value of distance traveled by the object on one trip
    public double getDistance()
    {
        return distance;
    }

    //mutator method which calculates gallons used per mile driven
    public void calcMPG(double dist, double gallons)
    {
        miPerGal = dist / gallons;
    }

    //getter method to return the value of the miles per gallon of the object on one trip
    public double getMPG()
    {
        return miPerGal;
    }

    //mutator method which calculates miles driven per gallons used
    public void calcGPM(double gallons, double dist)
    {  
        galPerMi = gallons / dist;
    }

    //getter method to return the value of the gallons per mile of the object on one trip
    public double getGPM()
    {
        return galPerMi;
    }

    //mutator method which calculates total cost of filling up
    public void totalCost()
    {
        totalCost = pricePerGallon * gallonsUsed;
    }

    //getter method to return the value of the total gasoline purchases on one trip
    public double getTotalCost()
    {
        return totalCost;
    }

    //mutator method which calculates the minimum value of a given array
    public void min(double minMaxVariable[])
    {
        minVariable = Double.MAX_VALUE;
        for(int i = 0; i < minMaxVariable.length; i ++)
        {
            if((minMaxVariable[i]) < minVariable)
            {    
                minVariable = minMaxVariable[i];
            }
        }
    }

    //getter method to return the minimum value of a given array
    public double getMin()
    {
        return minVariable;
    }

    //mutator method which calculates the minimum value of a given array
    public void max(double minMaxVariable[])
    {
        maxVariable = Double.MIN_VALUE;
        for(int i = 0; i < minMaxVariable.length; i ++)
        {
            if((minMaxVariable[i]) > maxVariable)
            {
                maxVariable = minMaxVariable[i];
            }
        }
    }

    //getter method to return the minimum value of a given array
    public double getMax()
    {
        return maxVariable;
    }

    //mutator method which calculates the total value of a given array
    public void totalOf(double totalVariable[])
    {
        totalValue = 0;
        for(double newValue : totalVariable)
        {
            totalValue += newValue;
        }
    }

    //getter method to return the total value of a given array
    public double getTotalOf()
    {
        return totalValue;
    }
}

及其测试类

/**
 * This class tests the AnnualFuelUse class.
 *
 * An array of car objects is created to hold some of the private instance variables.
 *
 * A for loop is used to call the variables' methods on each object.
 * A second for loop is used to print an output header identifying the variables for the instance
 * A third for loop is used to print the values of the instance variables for each object.
 *
 * @author A. Mackey
 * @version 01/02/14
 */
public class AnnualFuelUseTester
{
    //main method
    public static void main(String[] args)
    {
        //declaring and initialising variables
        String header = "Annual Gas Mileage Calculations",
               headerLine = "===============================";
        String[] headerInfo = { "Fill Up" , "   Days" , "    Start Miles" , "   End Miles" , "Distance" , "Gallons" , "     Price" , "Cost" , "  Miles/Gal" , "Gal/Mile" };
        int[] fillUpNumber = {1, 2, 3, 4},
              daysSinceFill = {1, 4, 8, 13};
        double[] startMiles = {24963, 25437, 25937, 26221},
                 endMiles = { 25437, 25937, 26221, 26794},
                 gallonsUsed = { 21.4, 21.2, 12.2, 23.7},
                 milesPerGallon = new double[startMiles.length],
                 gallonsPerMile = new double[startMiles.length],
                 pricePerGallon = {3.52, 3.45, 3.39, 3.41},
                 totalCost = new double[startMiles.length],
                 distance = new double[startMiles.length];
        int minDistance,
            maxDistance,
            totalDistance,
            annualDistance;
        double minMPG, minCost,
               maxMPG, maxCost,
               totalGallonsUsed, totalCostSum,
               annualGallonsUsed, annualCost, annualMPG;

        //initialization of array of objects
        AnnualFuelUse[] car = {new AnnualFuelUse(fillUpNumber[0], endMiles[0], startMiles[0], gallonsUsed[0], pricePerGallon[0]),
                               new AnnualFuelUse(fillUpNumber[1], endMiles[1], startMiles[1], gallonsUsed[1], pricePerGallon[1]),
                               new AnnualFuelUse(fillUpNumber[2], endMiles[2], startMiles[2], gallonsUsed[2], pricePerGallon[2]),
                               new AnnualFuelUse(fillUpNumber[3], endMiles[3], startMiles[3], gallonsUsed[3], pricePerGallon[3])};

        //call methods  
        for(int index = 0; index < car.length; index++)
        {
            distance[index] = car[index].getDistance();
            milesPerGallon[index] = car[index].getMPG();
            gallonsPerMile[index] = car[index].getGPM();
            totalCost[index] = car[index].getTotalCost();
        }

        //I desire to invoke the methods which relate to these particular variables in order to define them
        minDistance = 0;
        minMPG = 0;
        minCost = 0;
        maxDistance = 0;
        maxMPG = 0;
        maxCost = 0;
        totalDistance = 0;
        totalGallonsUsed = 0;
        totalCostSum = 0;
        annualDistance = 0;
        annualGallonsUsed = 0;
        annualCost = 0;
        annualMPG = 0;

        //print results
        System.out.printf("%74s%n", header);
        System.out.printf("%74s%n", headerLine);

        for(String info : headerInfo)
        {
            System.out.print(info + "\t");
        }

        System.out.println("\n=========================================================================================================================");

        for(int index = 0; index < car.length; index++)
        {
            System.out.printf("%4d%10d%14.0f%14.0f%12.0f%16.1f%11.2f%12.2f%12.2f%13.3f%n", fillUpNumber[index], daysSinceFill[index], startMiles[index], endMiles[index], distance[index], gallonsUsed[index], pricePerGallon[index], totalCost[index], milesPerGallon[index], gallonsPerMile[index]);
        }

        System.out.println("=========================================================================================================================\n");

        System.out.printf("Minimum:%46d%27.2f%24.2f%n", minDistance, minMPG, minCost);
        System.out.printf("Maximum:%46d%27.2f%24.2f%n%n", maxDistance, maxMPG, maxCost);
        System.out.printf("Totals:%47d%16.1f%35.2f%n", totalDistance, totalGallonsUsed, totalCostSum);
        System.out.printf("Annual Projection:%36d%16.1f%11.2f%24.2f%n", annualDistance, annualMPG, annualGallonsUsed, annualCost);
    }
}

感谢您的帮助,谢谢。

编辑(2014 年 1 月 3 日美国东部标准时间 03:00)

pastebin.com/BRJunSvS 和 pastebin.com/kRRb0dmu 知道为什么我的 MPG 不是预计的年平均值吗?

【问题讨论】:

    标签: java arrays methods logic


    【解决方案1】:

    距离、成本、每加仑英里数和每英里加仑数字段尚未初始化,因为您尚未调用任何方法来计算这些值。

    无论如何,我认为存储任何基于其他实例变量计算的值没有多大意义。为什么不只是在调用getDistance() 时计算距离然后返回计算值?这样您就可以少维护一个字段。

    这又是您的类,这次删除了一些实例变量和 setter,以及一些更改的 getter。我冒昧地将您的 minmaxtotalOf 方法更改为静态方法。我不知道这是否是一种好习惯,但它们似乎不需要访问实例级变量或方法。

    public class AnnualFuelUse
    {
        //private instance variables
        private double gallonsUsed, pricePerGallon, startingMiles, endingMiles;
    
        //constructor with two parameters
        AnnualFuelUse(int FillUpNumber, double eMiles, double sMiles, double galsUsed, double pricePerGal)
        {
            startingMiles = sMiles;
            endingMiles = eMiles;
            gallonsUsed = galsUsed;
            pricePerGallon = pricePerGal;
        }
    
        //getter method to return the value of distance traveled by the object on one trip
        public double getDistance()
        {
            return endingMiles - startingMiles;
        }
    
        //getter method to return the value of the miles per gallon of the object on one trip
        public double getMPG()
        {
            return getDistance() / gallonsUsed;
        }
    
        //getter method to return the value of the gallons per mile of the object on one trip
        public double getGPM()
        {
    
            return gallonsUsed / getDistance();
        }
    
        //getter method to return the value of the total gasoline purchases on one trip
        public double getTotalCost()
        {
            return pricePerGallon * gallonsUsed;
        }
    
        //mutator method which calculates the minimum value of a given array
        public static double min(double minMaxVariable[])
        {
            double minVariable = Double.MAX_VALUE;
            for(int i = 0; i < minMaxVariable.length; i ++)
            {
                if((minMaxVariable[i]) < minVariable)
                {    
                    minVariable = minMaxVariable[i];
                }
            }
            return minVariable;
        }
    
        //mutator method which calculates the minimum value of a given array
        public static double max(double minMaxVariable[])
        {
            double maxVariable = Double.MIN_VALUE;
            for(int i = 0; i < minMaxVariable.length; i ++)
            {
                if((minMaxVariable[i]) > maxVariable)
                {
                    maxVariable = minMaxVariable[i];
                }
            }
            return maxVariable;
        }
    
        //mutator method which calculates the total value of a given array
        public static double totalOf(double totalVariable[])
        {
            double totalValue = 0;
            for(double newValue : totalVariable)
            {
                totalValue += newValue;
            }
            return totalValue;
        }
    }
    

    这应该注意表格上部的零。至于最小值、最大值和总值,它们显然无论如何都会为零,因为您已经将它们设置为这样。假设您已将上述方法设为静态,您可以这样称呼它们。请注意,minmaxtotalOf 返回类型为 double 的值。

    minDistance = (int)AnnualFuelUse.min(distance);
    minMPG = AnnualFuelUse.min(milesPerGallon);
    minCost = AnnualFuelUse.min(totalCost);
    maxDistance = (int)AnnualFuelUse.max(distance);
    maxMPG = AnnualFuelUse.max(milesPerGallon);
    maxCost = AnnualFuelUse.max(totalCost);
    totalDistance = (int)AnnualFuelUse.totalOf(distance);
    totalGallonsUsed = AnnualFuelUse.totalOf(gallonsUsed);
    totalCostSum = AnnualFuelUse.totalOf(totalCost);
    

    【讨论】:

    • 不知何故,我在脑海中想到我所在的课程促使我永远使用 getter 方法。这看起来很愚蠢——但为了强调,这门课经常让我在我的程序中做一些愚蠢的事情。非常感谢你们的帮助。
    • pastebin.com/BRJunSvSpastebin.com/kRRb0dmu 知道为什么我的 MPG 不是预计的年平均值吗?
    • @alx:由于这是一个不同的问题,我认为最好发布一个关于它的新问题。
    【解决方案2】:

    AnnualFuelUse 类中有一个名为 public void calcDistance() 的方法。但它永远不会被调用。因此 getDistance 方法总是返回 0。

    在调用 getDistance() 之前调用 calcDistance 会填充距离列。

        //call methods  
        for(int index = 0; index < car.length; index++)
        {
            car[index].calcDistance();
            distance[index] = car[index].getDistance();
            milesPerGallon[index] = car[index].getMPG();
            gallonsPerMile[index] = car[index].getGPM();
            totalCost[index] = car[index].getTotalCost();
        }
    

    public void calcGPM(double gallons, double dist) 方法也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多