Этот код не компилируется - PullRequest
0 голосов
/ 07 января 2019

Я создаю программу на Java для ресторана. Я использую ArrayList, но по какой-то причине мой начальный класс не запускается в главном меню.

Это мой стартовый класс:

import java.util.ArrayList;

public class Starter
{
    Starter()
    {  
        String[] myList = {"Coffee", "Tea", "Somosas", "Cake"};
        //System.out.println(myList[]);
    }
}

Кажется, это правильно, но когда я пытаюсь выбрать из главного меню, оно не работает.

Главное меню:

import java.util.Scanner; 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Menu
{
    static Scanner input = new Scanner(System.in);

    public static void main(String[]args)
    {
        System.out.println("1=Starter");
        System.out.println("2= Main Course");
        System.out.println("3=Desert");

        int a =input.nextInt();
        input.nextLine();

        if(a==1)
        {
            System.out.println("Starter");
            Starter OS1=new Starter();
            System.out.println("Your starter is "+OS1.myList[]);

        }
    else if(a==2)
    {

        System.out.println("Main Course");
        MaiinCourse OMC1=new MaiinCourse();
        System.out.println("Your MainCourse is "+OMC1.MCname);
        System.out.println("The price is "+OMC1.MCprice);
    }

    else if(a==3)
    {
        System.out.println("Desert");
        Deserrt ODS1=new Deserrt();
        System.out.println("Your Desert is "+ODS1.DSname);
        System.out.println("The price is "+ODS1.DSprice);
    }
    else 
    {
        System.out.println("End");
        System.out.println("Program Closing");

       System.exit(1);

    }
}
}

Я получаю ошибку:

'.class' expected System.out.println("Your starter is "+OS1.myList[]);

Как это исправить?

Когда я запускаю главное меню, оно должно позволять мне выбирать из списка массивов.

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Я сделал несколько изменений в вашем коде. Теперь это работает. Попробуй и посмотри.

import java.util.Arrays;
import java.util.Scanner;

public class Menu
{
  static Scanner input = new Scanner(System.in);

  public static void main(String[]args)
  {
    System.out.println("1=Starter");
    System.out.println("2= Main Course");
    System.out.println("3=Desert");

    int a = input.nextInt();
    input.nextLine();

    if (a == 1)
    {
      System.out.println("Starter");
      Starter OS1 = new Starter();
      System.out.println("Your starter is " + Arrays.toString(OS1.getMyList()));

    }
  }
}

class Starter
{
  private String[] myList = {"Coffee", "Tea", "Somosas", "Cake"};

  public String[] getMyList()
  {
    return myList;
  }
}
0 голосов
/ 08 января 2019

Ваш код не будет работать, потому что вы пытаетесь задать значения Array внутри вашего конструктора класса (в данном случае конструктор Starter). Это приведет к исключению RunTime, поскольку вы не можете создавать константы Array в конструкторе. Мне гораздо более жизнеспособным подходом было бы создание частного массива в качестве атрибута для каждого создаваемого вами объекта типа «Стартер». Затем вы можете использовать то, что мы называем методом «Getter», чтобы получить значение атрибута myList для создаваемого вами экземпляра. Вот небольшой пример того, как мы можем изменить структуру вашего класса Starter ниже:

public class Starter {


     private String[] myList = {"Coffee", "Tea", "Somola", "Cake"};

     public String[] getterMethod() {
          return this.myList;
     }
}

Теперь у нас есть метод, называемый в Java методом «Getter», который возвращает атрибут закрытого класса, чтобы пользователи не могли изменять внутреннее состояние объекта. Вот пример того, как вы будете вызывать Array в вашем основном методе:

public class App {

   public static void main( String[] args ) throws IOException{

    System.out.println("1=Starter");
    Scanner input = new Scanner(System.in);
    System.out.println("Enter a number");
    int a = input.nextInt();
    if(a == 1) {
        System.out.println("Starter");
        Starter OS1 = new Starter();
        System.out.println(Arrays.toString(OS1.getterMethod()));
      }



    }

 }

Это очень упрощенная версия вашего кода, которую я просто использовал для иллюстрации более широкой концепции. Вот вывод:

1=Starter
Enter a number
1
Starter
[Coffee, Tea, Somola, Cake]

Мы просто вызываем getterMethod (), который возвращает значение для частного массива, который вы ищете.

0 голосов
/ 07 января 2019

На самом деле ваш myArray не виден за пределами класса Starter, поэтому вы должны сделать его видимым, объявив его как public или package default. Здесь вы можете воспользоваться помощью Arraylist.

Таким образом, вы можете изменить свой класс, как показано ниже:

    public class Starter {

    // this myList will be visible outside of this class and can be accessed to show menu.
    ArrayList<String> myList = new ArrayList<>();

    Starter() {
        String[] myArray = { "Coffee", "Tea", "Somosas", "Cake" };

        for (String str : myArray) {
            myList.add(str);
        }

        //System.out.println(myList);
    }
}

и, пожалуйста, обновите Ваш класс Menu.java, как показано ниже:

import java.util.Scanner;

public class Menu {

    static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("1=Starter");
        System.out.println("2= Main Course");
        System.out.println("3=Desert");

        int a = input.nextInt();
        input.nextLine();

        if (a == 1) {
            System.out.println("Starter : ");
            Starter os1 = new Starter();

            for (String str : os1.myList) {
                System.out.print(str + " ");
            }

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...