将Array Data输入到与另一个类中的另一个方法不同的类中的方法中

时间:2014-01-03 05:17:34

标签: java arrays methods logic

这些类可以协同工作,以产生如下输出: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日)

pastebin.com/BRJunSvS和pastebin.com/kRRb0dmu任何想法为什么我的MPG不是预计的年平均值???

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

在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)方法。