这段代码似乎编译不干净

时间:2019-01-07 12:17:24

标签: java compiler-errors

我正在用Java为餐厅创建程序。我正在使用ArrayList,但由于某种原因,我的入门类似乎未在主菜单中运行。

这是我的入门班:

import java.util.ArrayList;

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

这似乎是正确的,但是当我尝试从Main(主)菜单中进行选择时,它似乎不起作用。

主菜单:

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 :(得分:1)

我没有对您的代码进行任何更改。现在可以了。尝试看看。

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;
  }
}

答案 1 :(得分:0)

实际上,您的myArray在Starter类之外不可见,因此您必须通过声明为public或package default使其可见。在这里,您可以使用Arraylist。

因此您可以按以下方式更改课程:

W/Auth: [GetToken] GetToken failed with status code: NetworkError

并如下更新您的Menu.java类:

    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);
    }
}

答案 2 :(得分:0)

您的代码将不起作用,因为您试图在类构造函数(本例中为Starter构造函数)中提供Array值。这将导致RunTime异常,因为您不能在构造函数中创建Array常量。我更可行的方法是为您创建的“启动程序”类型的每个对象创建一个私有数组作为属性。然后,您可以使用我们称为“ Getter”方法的方法来获取要创建的实例的myList属性的值。这是一个迷你示例,说明如何在下面更改您的Starter类结构:

public class Starter {


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

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

现在,在Java中,我们有了所谓的“ Getter”方法,该方法将返回私有类属性,以便用户无法更改Object的内部状态。这是一个如何在主方法中调用数组的示例:

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()即可返回您要查找的私有数组的值。