首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟加油站

模拟加油站
EN

Stack Overflow用户
提问于 2014-10-16 22:54:49
回答 1查看 2.1K关注 0票数 1

所以我应该创建一个程序,在这个程序中,我有一个加油站,有5个加油泵,我不知道如何跟踪统计数据,程序正确地从类型的加油箱中减去了剩余的汽油数量,但是当下一个客户加汽油时,统计数据会被抹去吗?任何帮助都将不胜感激,以下是我的代码。请记住,这只是一个5级课程的一部分,而这只是其中的一部分。

代码语言:javascript
复制
import java.util.Random;
import java.util.Scanner;
public class GasPump
{
    static Scanner Input = new Scanner (System.in);
    private static double totalRevenue;
    private  static double currentPurchase;
    //private int currentGasType;
    private static double currentGasType;
    private static double currentGasAmount;
    private Client currentClient;
    private int clock;
    private static double regularTank;
    private static double plusTank;
    private static double supremeTank;
    //private static double amountLeftInTank;



    public void updatePump()
    {
        if (currentClient != null)
        {
            clock--;
            if (clock == 0)
            {
                //totalRevenue += currentPurchase;
                totalRevenue = totalRevenue + currentPurchase;
                resetPump ( );

            }
        }
    }

    public void resetPump ( )    
    {
        clock = 0;
        currentClient = null;
        currentPurchase = 0;
        //currentGasType = "";
        currentGasType = 0;
        currentGasAmount = 0;

    }

    public boolean pumpOpen()
    {
        return (clock == 0) && (currentClient == null);
    }

    public static double getCurrentGasType() 
    {
        regularTank = 1000;
        plusTank = 1000;
        supremeTank = 1000;

        //Scanner Input = new Scanner(System.in);
        System.out.println("What type of gas would you like?");
        System.out.println("Regular , Plus or Premium");
        System.out.println("1)Regular: $2.99 per gallon; 2)Plus: $3.99 per gallon; 3)Premium: $4.99 per gallon");
        currentGasType = Input.nextDouble();

        Random gen = new Random ();
        //currentGasAmount = gen.nextDouble ()* 45;
        currentGasAmount = gen.nextDouble()*50;
        double roundOff = (double) Math.round(currentGasAmount * 100) / 100;
        //System.out.println("How many gallons would you like?");
        //currentGasAmount = Input.nextDouble();
        if (currentGasType == 1) 
        {
            currentGasType = 2.99;
            regularTank = regularTank - currentGasAmount;
        }
        else if (currentGasType == 2) 
        {
            currentGasType = 3.99;
            plusTank = plusTank - currentGasAmount;
        }
        else 
        {
            currentGasType = 4.99;
            supremeTank = supremeTank - currentGasAmount;
        }

        System.out.println("# of gallons purchased: " + currentGasAmount);
        System.out.println("Amount of regular gas left:  " + regularTank);
        System.out.println("Amount of plus gas left: " + plusTank);
        System.out.println("Amount of supreme gas left: " + supremeTank);
        return currentGasType;


    }

    /*public static double getCurrentGasAmount() {
        Random gen = new Random ();
        currentGasAmount = gen.nextDouble ()* 50;
        //System.out.println("How many gallons would you like?");
        //currentGasAmount = Input.nextDouble();
        System.out.println("# of gallons purchased: " + currentGasAmount);
        return currentGasAmount;
    }
     */
    public static double getCurrentPurchase() 
    {
        currentPurchase = currentGasType * currentGasAmount;
        return currentPurchase;

    }

    public static double getTotalRevenue() {
        totalRevenue += currentPurchase;

        System.out.println("Total revenue so far is " + totalRevenue);
        return totalRevenue;
    }
    /*public static double getAmountLeftInTank() 
    {
        regularTank = 1000;
        plusTank = 1000;
        supremeTank = 1000;
        if (currentGasAmount == 1) 
            if (currentGasType == 1)
        {
            //regularTank = regularTank - currentGasAmount; 
        }
            else if (currentGasType == 2)
        else if (currentGasAmount == 2) 
        {
            //plusTank = plusTank - currentGasAmount;
        }
        else 
        {
            supremeTank = supremeTank - currentGasAmount;
        }
        System.out.println("Amount of regular gas left:  " + regularTank);
        System.out.println("Amount of plus gas left: " + plusTank);
        System.out.println("Amount of supreme gas left: " + supremeTank);
        return amountLeftInTank;
    }
     */
    public void serveAClient (Client aClient)
    {
        clock = 10;
        currentClient = aClient;


        GasPump.getCurrentGasType();
        System.out.println("Your total is " + GasPump.getCurrentPurchase());
        GasPump.getTotalRevenue();

        //GasPump.getAmountLeftInTank();
        /*
         * design get methods
         * ask client what type of gas he wants 
         * add more code here
         */
        // add the total here
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-10-16 22:57:31

对于存储在GasPump中的数据,不要使用静态字段。

静态字段是单例的,它们只在所有GasPump实例之间共享一个值。这意味着如果您有多个GasPump实例,则调用reset将重置所有燃气泵。

通过从每个字段中删除关键字static,每个GasPump都将有一个单独的字段副本,因此调用reset只会擦除GasPump的一个实例的字段。

下面的图表可以帮助您直观地了解其中的区别:

在本例中,count在CircleWithCount的实例c1和c2之间共享。

您可以在此处阅读有关在字段中使用静态关键字的更多详细信息:What does the 'static' keyword do in a class?

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26407490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档