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

时间:2014-02-23 04:00:21

标签: 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 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种方法(添加,搜索和擦除联系人)。 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;
    } 
          }

2 个答案:

答案 0 :(得分:1)

你的问题是opcion是在循环中定义的,因此它的范围在关闭while之前结束

将定义移出循环以解决问题:

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

这些程序有2个问题

1.您需要在while循环之前声明选项变量。

2.如果你想调用Agenda.anyMethod(),你需要创建一个类的实例/对象,否则你可以将类议程声明为static.then你可以直接调用该方法   Agenda.addContacto();