【问题标题】:Joptionpane does not process switch-caseJoptionpane 不处理 switch-case
【发布时间】:2015-11-05 22:50:46
【问题描述】:

我的 switch-case 选项和 joptionpane 有问题。选择四个选项之一后,程序结束。它不显示选择。它应该显示选择/选择。

  import javax.swing.JOptionPane; // JOptionPane call

  public class OnlineStore 
  {
     // public static void main(String[] args) // main program
      public void display_menu() // Not the main program but the main menu.
      {
          String main_selection;
          int mSelect;

          main_selection = JOptionPane.showInputDialog("Welcome!\n\n1. Add T-                Shirt Order\n2. Edit T-Shirt Order\n3. View Current Order\n4. Checkout\n\nPlease   enter your choice: ");
    mSelect = Integer.parseInt(main_selection);

      }

      public OnlineStore() // Switch-case program
      {
          display_menu(); // Call display menu.
          switch (mSelect)
          {
              case 1:
                  JOptionPane.showMessageDialog(null, "Option 1");
                  break;
              case 2:
                  JOptionPane.showMessageDialog(null, "Option 2");
                  break;
              case 3:
                  JOptionPane.showMessageDialog(null, "Option 3");
                  break;
              case 4:  // Deliberately not including a default selection.
                  JOptionPane.showMessageDialog(null, "Option 4");
                  break;  
           } 

      } 

      public static void main(String[] args) // main program
      {
          new OnlineStore(); // Call out the program.
      }
  }

当我使用 Scanner 时,结果还可以。

【问题讨论】:

  • 我必须说它对我有用,在更改代码后。您提供的代码无法编译。 mSelect 仅在 display_menu 中本地定义
  • @kevin esche。知道了。有用!我还将“String main_selection”移到了课堂上一级。

标签: java swing switch-statement joptionpane


【解决方案1】:

主要问题是display_menu 中发生的事情与您在OnlineStore 中处理的事情之间没有上下文关系。

相反,为什么不让display_menu 返回选定的值/选项并将其包含在switch 语句中,例如

public class OnlineStore {

    // public static void main(String[] args) // main program

    public int display_menu() // Not the main program but the main menu.
    {
        String main_selection;

        main_selection = JOptionPane.showInputDialog("Welcome!\n\n1. Add T-                Shirt Order\n2. Edit T-Shirt Order\n3. View Current Order\n4. Checkout\n\nPlease   enter your choice: ");
        return Integer.parseInt(main_selection);

    }

    public OnlineStore() // Switch-case program
    {
        switch (display_menu()) {
            case 1:
                JOptionPane.showMessageDialog(null, "Option 1");
                break;
            case 2:
                JOptionPane.showMessageDialog(null, "Option 2");
                break;
            case 3:
                JOptionPane.showMessageDialog(null, "Option 3");
                break;
            case 4:  // Deliberately not including a default selection.
                JOptionPane.showMessageDialog(null, "Option 4");
                break;
        }

    }

    public static void main(String[] args) // main program
    {
        new OnlineStore(); // Call out the program.
    }
}

循环菜单

public class OnlineStore {

    // public static void main(String[] args) // main program

    public int display_menu() // Not the main program but the main menu.
    {
        String main_selection;

        main_selection = JOptionPane.showInputDialog("Welcome!\n\n1. Add T-                Shirt Order\n2. Edit T-Shirt Order\n3. View Current Order\n4. Checkout\n\nPlease   enter your choice: ");
        return Integer.parseInt(main_selection);

    }

    public OnlineStore() // Switch-case program
    {
        boolean exit = false;
        do {
            switch (display_menu()) {
                case 1:
                    JOptionPane.showMessageDialog(null, "Option 1");
                    break;
                case 2:
                    JOptionPane.showMessageDialog(null, "Option 2");
                    break;
                case 3:
                    JOptionPane.showMessageDialog(null, "Option 3");
                    break;
                case 4:  // Deliberately not including a default selection.
                    JOptionPane.showMessageDialog(null, "Option 4");
                    break;
            }
        } while (!exit);
    }

    public static void main(String[] args) // main program
    {
        new OnlineStore(); // Call out the program.
    }
}

【讨论】:

  • switch-case 功能在一次选择后停止。我似乎无法让它回到 OnlineStore()。我尝试了 do-while 语句,但主菜单弹出两次。
  • 你把循环放在哪里了?大概它应该包装 switch 语句
  • 是的。不幸的是,菜单出现了两次。
  • 不确定您使用的是什么代码,但类似于上面的示例(注意,示例永远不会退出,但我假设您的一个案例最终会将 exit 标志设置为 true )
  • switch-case 功能在一次选择后停止。我似乎无法让它回到 OnlineStore()。我尝试了 do-while 语句。它没有用。我可以创建另一个问题与您分享更多代码>
【解决方案2】:

在类而不是方法中声明 mSelect 变量。

public class OnlineStore {
int mSelect;
// public static void main(String[] args) // main program

public void display_menu() // Not the main program but the main menu.
{
    String main_selection;

    main_selection = JOptionPane.showInputDialog("Welcome!\n\n1. Add T-                Shirt Order\n2. Edit T-Shirt Order\n3. View Current Order\n4. Checkout\n\nPlease   enter your choice: ");
    mSelect = Integer.parseInt(main_selection);

}

public OnlineStore() // Switch-case program
{
    display_menu(); // Call display menu.
    switch (mSelect) {
        case 1:
            JOptionPane.showMessageDialog(null, "Option 1");
            break;
        case 2:
            JOptionPane.showMessageDialog(null, "Option 2");
            break;
        case 3:
            JOptionPane.showMessageDialog(null, "Option 3");
            break;
        case 4:  // Deliberately not including a default selection.
            JOptionPane.showMessageDialog(null, "Option 4");
            break;
    }

}

public static void main(String[] args) // main program
{
    new OnlineStore(); // Call out the program.
}}

【讨论】:

  • @MadProgrammer 我检查了代码。从 display_menu 返回 int 值
  • @MadProgrammer,试过了。没用。给了我错误。
  • @MadProgrammer,对不起,你是对的。刚刚又跑了。它有效。
  • @rlee 如果您在类内部和方法外部声明 mSelect 变量,代码将起作用
【解决方案3】:

目前,没有扫描器,没有整数被设置为mselect - 所以你的开关选择default,如果你想定义一个:

switch(mSelect){
.
.
.
default: JOptionPane.showMessageDialog(null, "ERROR");
}

另一种解决方案是您将默认值设置为mSelect like

int mSelect = 1;

【讨论】:

  • 这是有道理的。感谢您的洞察力!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多