Похоже, вам не хватает знаний о структуре класса, и вам нужно больше практиковаться в том, чтобы делать отступы / обращать внимание на скобки, если я удаляю части вашего кода с помощью заполнителей и правильно делаю отступы (что можно смоделировать с помощью "сворачивания").эти разделы кода в вашей 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/)
Они НЕ работают с вашим основным методом и вообще не работают, так как не являются статическими инициализаторами класса.
частная клавиатура сканера; частная клавиатура сканера1, а другие поля ниже //Marker 2
определяются в области экземпляра класса.
Вы метод main, как и все основныеточки входа статичны, классы еще не инициализированы, поэтому все, что находится в области видимости экземпляра класса, не выполняется, и инициализаторы классов не выполнялись.
Чтобы это исправить, просто удалите скобку // End Main Method, создайте другую в самом конце вашего класса, и все снова будет включено в метод main.Я рекомендую автоматически форматировать ваш код на этом этапе.
Eclipse будет жаловаться на поля, которые теперь будут превращаться в локальные переменные, так как они будут определены в области действия метода main, так что вы можете исправить это с помощьюудаление модификатора доступа «приватный» перед клавиатурой, клавиатура1.Фактически, вы можете использовать одну и ту же переменную клавиатуры в качестве локальной переменной для каждого ее использования, даже не делая ее полем в классе.
Надеюсь, это поможет.
Редактировать: Похоже, вы пытались разделить это на несколько методов, и их перепутали с полями.Если это так, вам нужно прочитать, как объявлять методы, просто недостаточно указать {} после поля.
В этом случае Snip 1
будет означать, где вы пытались создать новые методы.вам нужно будет указать их как
private static void keyboard1()
{
Scanner keyboard1 = new Scanner(System.in);
//Snip1
};
, в этом случае private void keyboard1()
не имеет отношения к Scanner keyboard1
и может быть названо как угодно.Затем вам нужно будет перейти к вызову этого метода в вашем основном методе.Поскольку он статичен, вы можете сделать это безопасно, но если вам нужно несколько бензоколонок, вам нужно будет сделать их нестатичными и инициализировать экземпляр.
Если вы застряли, передавая переменные между методами, вы1. можете объявить их как поля в классе (отметив, что они должны быть статическими, поскольку вы обращаетесь к ним в методе static main без создания экземпляра класса.) Или передать их в качестве аргументов методу.