Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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_Methods_Menu_Switch Statement - Fatal编程技术网

Java开关菜单错误以及如何从另一个类调用方法

Java开关菜单错误以及如何从另一个类调用方法,java,methods,menu,switch-statement,Java,Methods,Menu,Switch Statement,嗨,我正在学习Java,我正在做一个作业,我需要*创建一个调用多个方法的菜单。我有3门课(Contacto、Agenda和Principal)。我的任务是评估构造函数和数组以及其他一些基本理论 My menu error is: Principal.java:34: error: cannot find symbol while(opcion!=4).* 我已经检查并声明了变量“opcion” public class Principal{ private static void impr

嗨,我正在学习Java,我正在做一个作业,我需要*创建一个调用多个方法的菜单。我有3门课(Contacto、Agenda和Principal)。我的任务是评估构造函数和数组以及其他一些基本理论

My menu error is: Principal.java:34: error: cannot find symbol while(opcion!=4).* 
我已经检查并声明了变量“opcion”

public class Principal{

private static void imprimeMenu(){
    Scanner input = new Scanner(System.in);

    String mainMenu = ("Choose an option from the menu: \n"
                        + "1. Add contact\n"
                        + "2. Find contact\n"
                        + "3. Search contact\n"
                        + "4. Exit");

    do{
    System.out.println(mainMenu);
    int opcion = input.nextInt();

    switch(opcion){
        case 1:
            break;
        case 2:
            System.out.println("Search");
            break;
        case 3:
            System.out.println("Erase");
            break;
        default:
            System.out.println("Command not recognize");
            break;
        }
    }
    while(opcion!=4);
}

public static void main(String[] args){
    imprimeMenu();      
}
}
在我的案例中,我需要调用名为Agenda的类中的3个方法(添加、搜索和删除联系人)。这三种方法无效,并接收一个参数。我试过了,但出现了一个错误,它说我需要一些参数:

case 1:
    Agenda.addContacto(); and also tried Agenda.addContacto(contacto);
我的课程安排是这样的

public class Agenda{
private Contacto [] contactos;
private int numContactos;


public Agenda(){
    this.contactos = new Contacto[10];
    this.numContactos = 0;
}

public Agenda(int x){
    this.contactos = new Contacto[x];
    this.numContactos = 0;
}

public void addContact(Contacto contact){
    if(numContactos<contactos.length){
        this.contactos [numContactos] = contact; 
        numContactos+=1;
    } 
          }
公共课堂议程{
私人联系人[]联系人;
私人国际numContactos;
公共议程(){
this.contactos=新联系人o[10];
this.numContactos=0;
}
公共议程(int x){
this.contactos=新联系人o[x];
this.numContactos=0;
}
公共无效添加联系人(Contacto contact){

如果(numContactos您的问题是
opcion
是在循环内部定义的,因此它的作用域在关闭
之前结束,而
是在关闭
之前结束的

将定义移到循环之外以解决问题:

int opcion = 0;
do{
    System.out.println(mainMenu);
    opcion = input.nextInt();

    switch(opcion){
        case 1:
            break;
        case 2:
            System.out.println("Search");
            break;
        case 3:
            System.out.println("Erase");
            break;
        default:
            System.out.println("Command not recognize");
            break;
        }
} while(opcion!=4);

正确调用
Agenda.addContacto
方法确实是
Agenda.addContacto(contacto)
。在进行调用之前,您需要确保
contacto
设置为
contacto
对象的实例。

这些程序有两个问题

1.您需要在while循环之前声明option变量

2.如果要调用Agenda.anyMethod(),则需要创建该类的实例/对象,否则可以将该类Agenda声明为静态。然后可以直接将该方法调用为 议程.addContacto()