2015-08-19 2 views
0

@MadProgrammer, функция переключателя останавливается после одного выбора. Кажется, я не могу вернуться к OnlineStore(). Я пробовал делать заявление. Это не сработало. Он будет идти по умолчанию затем обратно в меню, независимо от входа, 1 или 2.Цикл оператора переключателя JOptionPane

 import javax.swing.JOptionPane; 

     public class OnlineStore 
     { 
      String[] ColorType = {"blue", "green", "black"}; 
      final int COLOURS = 3; // t choices 
      int[] Color = new int[COLOURS]; 
      int sum, mselect; 

      public static int display_menu() // Not the main program but the main menu. 
      { 
       String input; 
       int mselect; 
       input = JOptionPane.showInputDialog("Welcome!" + "\n\n1. Add tshirt order\n2. Edit tshirt order\n3. View current order\n4. Checkout" + "\n\nPlease enter your choice: "); 
       // return Integer.parseInt(input); 
       mselect = Integer.parseInt(input); 
       return 0; 
      } 

      public OnlineStore() // Switch-case program 
      { 
       do 
       { 
       display_menu(); 
       switch (mselect) 
       { 
        case 1: 
         add_t(); 
         break; 
        case 2: 
         edit_t(); 
         break; 
        default: // If an error is encountered. 
         JOptionPane.showMessageDialog(null, "Oh dear! Error!"); 
         break; 
       } 
       } while (mselect < 3); 
      } 

      public final int add_t() 
      { 
       for (int index = 0; index < ColorType.length; index++) 
       { 
     <output> 
       } 
       return Color.length; 
      } 

      public final int edit_t() 
      { 
       for (int index = 0; index < ColorType.length; index++) 
       { 
     <output> 
      } 

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

     } 
+0

@Codebender На самом деле, я не думаю, что ОП хочет поля экземпляра класса, но должен возвращаться значение из метода и его использования в инструкции 'switch' вместо этого – MadProgrammer

+0

@MadProgrammer, это правильно .. Кроме того, метод находится в статическом контексте. – Codebender

ответ

1

Первая ...

public static int display_menu() // Not the main program but the main menu. 
{ 
    String input; 
    int mselect; 
    input = JOptionPane.showInputDialog("Welcome!" + "\n\n1. Add tshirt order\n2. Edit tshirt order\n3. View current order\n4. Checkout" + "\n\nPlease enter your choice: "); 
    // return Integer.parseInt(input); 
    mselect = Integer.parseInt(input); 
    return 0; 
} 

Вы не возвращаются mselect, но возвращаются 0. Вместо этого вы должны, вероятно, сделать что-то больше, как ...

public static int display_menu() // Not the main program but the main menu. 
{ 
    String input; 
    input = JOptionPane.showInputDialog("Welcome!" + "\n\n1. Add tshirt order\n2. Edit tshirt order\n3. View current order\n4. Checkout" + "\n\nPlease enter your choice: "); 
    // return Integer.parseInt(input); 
    return Integer.parseInt(input); 
} 

Далее вы используете mselect, который не имеет никакого значения, чтобы проверить в вашем switch

public OnlineStore() // Switch-case program 
{ 
    do { 
     display_menu(); 
     switch (mselect) { 
      case 1: 
       add_t(); 
       break; 
      case 2: 
       edit_t(); 
       break; 
      default: // If an error is encountered. 
       JOptionPane.showMessageDialog(null, "Oh dear! Error!"); 
       break; 
     } 
    } while (mselect < 3); 
} 

, но вместо этого, вы должны использовать возвращаемое значение из display_menu()

public OnlineStore() // Switch-case program 
{ 
    do { 
     switch (display_menu()) { 
      case 1: 
       add_t(); 
       break; 
      case 2: 
       edit_t(); 
       break; 
      default: // If an error is encountered. 
       JOptionPane.showMessageDialog(null, "Oh dear! Error!"); 
       break; 
     } 
    } while (mselect < 3); 
} 

Будьте очень осторожны static, это не ваш друг и может легко превратить хороший запуск программы в к мусору.

Вместо этого вы могли бы сделать что-то больше похоже ...

public class OnlineStore { 

    String[] ColorType = {"blue", "green", "black"}; 
    final int COLOURS = 3; // t choices 
    int[] Color = new int[COLOURS]; 
    int sum; 

    public int display_menu() // Not the main program but the main menu. 
    { 
     String input; 
     input = JOptionPane.showInputDialog("Welcome!" + "\n\n1. Add tshirt order\n2. Edit tshirt order\n3. View current order\n4. Checkout" + "\n\nPlease enter your choice: "); 
     // return Integer.parseInt(input); 
     return Integer.parseInt(input); 
    } 

    public OnlineStore() // Switch-case program 
    { 
     boolean exit = false; 
     do { 
      switch (display_menu()) { 
       case 1: 
        add_t(); 
        break; 
       case 2: 
        edit_t(); 
        break; 
       case 4: 
        exit = true; 
        break; 
       default: // If an error is encountered. 
        JOptionPane.showMessageDialog(null, "Oh dear! Error!"); 
        break; 
      } 
     } while (!exit); 
    } 

    public final int add_t() { 
     return 0; 
    } 

    public final int edit_t() { 
     return 0; 
    } 

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

} 
+0

Спасибо! Я попробую. – rlee

+0

Он работает! Как всегда, вы великолепны! :-) Я буду очень опасаться «статичности». Кроме того, где этот оператор «return Integer.parseInt (input)» возвращает значение? Основная программа или класс. Мои извинения заранее. Я все еще пытаюсь понять основные принципы. Если вы можете направить меня к источнику для дальнейшего чтения, я буду этому благодарен. – rlee

+0

По существу, 'return Integer.parseInt (input);' возвращает значение 'input' (обрабатывается' int') обратно вызывающему абоненту, который получает 'switch (display_menu()) {' – MadProgrammer

1

Похоже, что вы не даете mВЫБОРу, значение. Что вы, вероятно, хотите сделать, это

 int sum; 
     static int mselect = 0; 

     public static int display_menu() // Not the main program but the main menu. 
     { 
      String input; 
      input = JOptionPane.showInputDialog("Welcome!" + "\n\n1. Add tshirt order\n2. Edit tshirt order\n3. View current order\n4. Checkout" + "\n\nPlease enter your choice: "); 
      // return Integer.parseInt(input); 
      mselect = Integer.parseInt(input); 
      return 0; 
     } 
+0

IMHO- 'static' - это плохой выбор, особенно если метод уже способен вернуть значение, указывая необходимое состояние. – MadProgrammer

+0

Согласен, но я полагаю, что у ОП есть причины для того, что он пытается сделать. Я позволю ему решить, что делать, я просто дал ему исправить его текущее состояние. – Deximus

+0

Позор, вы могли бы предложить более профессиональное решение своей проблемы, решить их проблему и научить их некоторым лучшим практикам одновременно – MadProgrammer

0

Вы назначаете ввод в локальную переменную. Его охват только с помощью метода. local Variable scope

mselect = Integer.parseInt(input); 
return mselect; 

и назначить

mselect = display_menu(); 

или сделать mВЫБОР, как статические и удалить локальную переменную.

Смежные вопросы