【问题标题】:Java Switch menu error and how to call a method from another classJava Switch菜单错误以及如何从另一个类调用方法
【发布时间】:2014-02-23 04:00:21
【问题描述】:

您好,我目前正在学习 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 个方法都是 void 并接收一个参数。我试过了,但我得到一个错误,它说我需要一些参数:

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

【问题讨论】:

    标签: java methods menu switch-statement


    【解决方案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 对象的实例。

    【讨论】:

      【解决方案2】:

      这些程序有 2 个问题

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

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

      【讨论】:

        猜你喜欢
        • 2015-06-19
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多