我正在用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[]);
如何解决此问题?
当我运行主菜单时,它应该允许我从数组列表中进行选择。
我对您的代码做了一些更改。现在它起作用了。试试看。
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构造函数)中给定Array值。这将导致运行时异常,因为您无法在构造函数中创建数组常量。我更可行的方法是为您创建的"Starter"类型的每个对象创建一个私有数组作为属性。然后,您可以使用我们称之为"Getter"的方法来获取您正在创建的实例的myList属性的值。下面是我们如何更改入门级结构的一个小例子:
public class Starter {
private String[] myList = {"Coffee", "Tea", "Somola", "Cake"};
public String[] getterMethod() {
return this.myList;
}
}
现在我们有了Java中所谓的"Getter"方法,它将返回私有类属性,这样用户就不能更改Object的内部状态。以下是您将如何在主方法中调用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(),它将返回您要查找的私有数组的值。
实际上,您的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 + " ");
}
}
}
}