Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这段代码似乎编译得不干净_Java_Compiler Errors - Fatal编程技术网

Java 这段代码似乎编译得不干净

Java 这段代码似乎编译得不干净,java,compiler-errors,Java,Compiler Errors,我正在用Java为一家餐厅创建一个程序。我正在使用ArrayList,但由于某些原因,我的初学者类似乎没有在主菜单中运行 这是我的入门课: import java.util.ArrayList; public class Starter { Starter() { String[] myList = {"Coffee", "Tea", "Somosas", "Cake"}; //System.out.println(myList[]);

我正在用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[]);
如何解决这个问题


当我运行主菜单时,它应该允许我从数组列表中进行选择

实际上,您的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);
    }
}
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 + " ");
            }

        }
    }
}

我对你的代码做了一些修改。现在它起作用了。试试看

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

在这种情况下,您的代码将无法工作,因为您试图在类构造函数中提供数组值。这将导致运行时异常,因为您无法在构造函数中创建数组常量。我认为更可行的方法是创建一个私有数组,作为您创建的Starter类型的每个对象的属性。然后,您可以使用我们称之为Getter方法的方法来获取您正在创建的实例的myList属性的值。下面是我们如何更改初学者类结构的一个小示例:

public class Starter {


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

     public String[] getterMethod() {
          return this.myList;
     }
}
现在我们有了Java中所谓的Getter方法,它将返回private class属性,这样用户就不能更改对象的内部状态。下面是一个如何在主方法中调用数组的示例:

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,它将返回您正在寻找的私有数组的值

myList是Starter构造函数中的局部变量。它不是一个字段。菜单类中缺少2}s!?还有,你是想打印OS1.myList[a]还是类似的东西?试图打印OS1.myList[]毫无意义不要发布屏幕截图的链接。如果你想改进你的代码,你的问题。@Shahed我已经编辑过了,接受我的编辑,格式就完成了。为什么我会在咖啡和蛋糕之间加括号。如何删除它?如果你不需要括号,那么只需迭代列表并按你想要的方式打印:每个循环或迭代器。让我在答案中给你更新的菜单类。我在新行中得到新错误。我编辑了代码。还有一个新的错误,我给你整个菜单类。按原样运行。好的,没关系。这是工作,谢谢。只有一件事,如何删除支架有一个选择一个接一个。让用户从starter列表中选择一个您的意思是,您的starter输出中的括号是[咖啡、茶、果酱、蛋糕]?这就是Arrays.toString将数组表示为字符串的方式。如果我们想以不同的方式打印我的列表,我们必须自己编写。