Java加油站项目编码麻烦

时间:2018-09-28 04:40:35

标签: java eclipse project

我是Java编码的初学者。不到4周前才开始在线课程。我目前正在从事需要进行

的项目
  

遍历逻辑决策以确定客户的需求。模拟有4个加油站的加油站...

将到目前为止所知道的内容拼凑在一起之后,我想到了下面的代码。它确实有一些黄色错误,当我在Eclipse中运行时,我只能得到打印输出:

welcome to gas station, choose station number 1, 2 or 3. 

请问可以从这里得到一些帮助吗?

public static void main(String[] args) {

    int stations;
    keyboard2 = new Scanner(System.in);

    System.out.print("Welcome to Gas Station \n");
    System.out.println("Choose Station Number: \n");
    System.out.println("1, 2, or 3 \n");

    stations = keyboard2.nextInt(2);

    switch (stations) {
        case 1:
            System.out.println("You entered Station 1.");
            break;

        case 2:
            System.out.println("You entered Station 2.");
            break;

        case 3:
            System.out.println("You entered Station 3.");
            break;

        default:
            System.out.println("Error: Invalid Number");
    }
}

private Scanner keyboard;

{

    System.out.print("Choose your fuel type:\n");
    System.out.println("Press 1 for Unleaded\n");
    System.out.println("Press 2 for Unleaded Plus\n");
    System.out.println("Press 3 for Unleaded Premium\n");

    int gastype;
    gastype = keyboard.nextInt(2);

    switch (gastype) {
        case 1:
            System.out.println("You Chose Unleaded.");
            break;

        case 2:
            System.out.println("You Chose Unleaded Plus.");
            break;

        case 3:
            System.out.println("You Chose Unleaded Premium.");
            break;

        default:
            System.out.println("Error: Invalid Number");

    }
}

private Scanner keyboard1;

{

    System.out.print("Enter gallon amount"
            + "Max amount 30 gallons)");
    int numberGallons;
    numberGallons = keyboard.nextInt(9);
}

double totalPayment = 0.0;
double numberGallons = 0;
double Unleaded = 0;
double UnleadedPlus = 0;
double UnleadedPremium = 0;
double tax = 0;
private static Scanner keyboard2;

{
    Unleaded = 2.50;
    UnleadedPlus = 3.00;
    UnleadedPremium = 3.50;
    tax = 3.5;

    totalPayment = numberGallons + Unleaded * tax;

    System.out.println("total gas amount: " + numberGallons
            + "\ntotal payment:" + Unleaded * tax + "\nthank you");

}

1 个答案:

答案 0 :(得分:2)

您似乎缺少关于类结构的知识,如果我使用占位符删除了代码的一部分并正确缩进了内容(可以通过“折叠”模拟),则需要在缩进/注意括号方面进行更多的练习。这些代码在您的IDE中,然后自动格式化。

    public static void main(String[] args)    
    {//Start main method
        int stations; 
        keyboard2 = new Scanner(System.in);

        System.out.print("Welcome to Gas Station \n");
        System.out.println("Choose Station Number: \n");
        System.out.println("1, 2, or 3 \n");

        stations = keyboard2.nextInt(2);


        switch (stations)
        {
            case 1:
            System.out.println("You entered Station 1.");
            break;


            case 2:
            System.out.println("You entered Station 2.");
            break; 

            case 3:
            System.out.println("You entered Station 3.");
            break;

            default:
            System.out.println("Error: Invalid Number"); 
       }//End Switch
    }//End Main Method

    private Scanner keyboard;
    {
        //Snip 1
    }

    private Scanner keyboard1;
    {
        //Snip 1
    }
    //Marker 2
    double totalPayment = 0.0;
    double numberGallons = 0;
    double Unleaded = 0;
    double UnleadedPlus = 0;
    double UnleadedPremium = 0;
    double tax = 0;
    private static Scanner keyboard2;
    {
        //Snip 1
    }
}//Class End

我用//Snip 1进行注释的部分是外部的主要方法,java会将其解释为类初始化器。

(请参阅https://www.dummies.com/programming/java/what-is-an-initializer-in-java/

这些不是与您的main方法一起运行的,实际上根本没有运行,因为它们不是 static 类初始化程序。

专用扫描仪键盘; 专用扫描仪键盘1; //Marker 2下面的其他fields正在类实例范围内定义。

与所有主要入口点一样,您的main方法是静态的,还没有初始化任何类,因此该类实例范围中的任何内容都没有运行,并且没有运行任何类初始化器。

要解决此问题,只需删除// End Main Method括号,在类的最后创建另一个,然后所有内容将再次包含在main方法中。我建议此时自动格式化代码。

Eclipse将抱怨这些字段,这些字段现在将变成局部变量,因为它们将在main方法的范围内定义,因此您可以通过删除键盘键盘keyboard1前面的访问修饰符“ private”来解决此问题。 。实际上,即使没有将其用作类中的字段,也可以每次使用相同的键盘变量作为局部变量。

希望这会有所帮助。

编辑:似乎您可能试图将其拆分为多种方法,并使它们与字段混淆。如果是这样,您需要继续学习如何声明方法,仅在字段不足后指定{}即可。

在这种情况下,Snip 1将标记您尝试创建新方法的位置。 您需要将它们指定为

private static void keyboard1()
{
    Scanner keyboard1 = new Scanner(System.in);
    //Snip1
};

在这种情况下,private void keyboard1()Scanner keyboard1没有关系,可以方便地命名。然后,您需要继续在主方法中调用此方法。因为它是静态的,所以您可以放心地这样做,但是如果需要多个加油站,则需要使它们成为非静态的,并初始化一个实例。

如果卡住了在方法之间传递变量,则可以1.将它们声明为类中的字段(请注意,它们必须是静态的,因为您是在静态main方法中访问它们的,而没有实例化一个类。 ),或者将它们作为方法的参数传递。