2013-11-26 2 views
2

Эта программа упрощена до того, что мы найдем в музыкальном магазине. Мы вводим желаемую нами команду, и это делает то, что предполагает эта команда. Это варианты.Throw exception in switch statement

  • Создать "клиент "|" музыка "|" продажа"

  • Список "клиент "|" музыка "|" продажа"

  • Erase "клиент «|» музыка «|» продажи "(с использованием или без использования кода, который генерируется, когда мы создаем новое заявление)

Программа должна выполняться до тех пор, пока типа„закрыть“.

Здесь я отправляю то, что я делал до сих пор.

Главный вопрос заключается в том, как выдать исключение, если мы вводим неверный код или вводим то, что здесь не существует. Теперь, когда это происходит, это только начинается в начале. Я бы apreciate тоже, если вы дадите мне советы на любые изменения или модификации, которые вы считаете, может быть лучше для этой программы, я только начинаю с этим, и я знаю, что это может быть сделано в лучшем виде:

public class Main { 

    static GestionarMusica musiclist= new GestionarMusica(20); 
    static GestionarCliente clientlist= new GestionarCliente(20); 

    static Scanner input= new Scanner(System.in); 
    static String instructions; 

    public static void main (String[] args){ 

    do{ 
     try{ 
      System.out.println("Waiting for instructions: "); 
      instructions= input.nextLine(); 

      switch (instructions){ 
       case "create client": 
        createClient(); 
        break; 
       case "create music": 
        createMusic(); 
        break; 
       case "create selling": 
        //createSelling(); 
        break; 

       case "list client": 
        listClient(); 
        break; 
       case "list music": 
        listMusic(); 
        break; 
       case "list selling": 
        //listSelling(); 
        break; 
      } 
     }catch (NullPointerException npe){ 
      System.out.println("There are not articles on the list"); 
     } 

     if (instructions.equals("erase client")){ 
      eraseClientWithoutCode(); 
     } 
     if (instructions.length() <= 18 && instructions.length() >= 17 && instructions.substring(0, 16).equals("erase client")){ 
      String client_code = instructions.substring(16); 
      client_code = client_code.trim(); 
      int code = Integer.parseInt(client_code); 
      eraseClientWithCode(code); 
     } 

     if (instruction.equals("erase music")){ 
      eraseMusicWithoutCode(); 
     } 
     if (instructions.length() <= 17 && instructions.length() >= 16 && instructions.substring(0, 15).equals("erase music")){ 
      String music_code = instructions.substring(15); 
      music_code = music_code.trim(); 
      int code = Integer.parseInt(music_code); 
      eraseMusicWithCode(code); 
     } 

     if (instructions.equals("erase selling")){ 
      eraseSellingWithoutCode(); 
     } 
     if (instructions.length() <= 16 && instructions.length() >= 15 && instructions.substring(0, 14).equals("erase selling")){ 
      String selling_code = instructions.substring(14); 
      selling_code = selling_code.trim(); 
      int code = Integer.parseInt(selling_code); 
      eraseSellingWithCode(code); 
     } 

    }while(!instructions.equals("close")); 
} 


public static void createMusic() { 
    System.out.println("Insert album title: "); 
    String title = teclado.nextLine(); 
    System.out.println("Insert album autor: "); 
    String autor = teclado.nextLine(); 
    System.out.println("Insert format: "); 
    String format = input.nextLine(); 

    musiclist.add(new Music(title, autor, format, musiclist.generateCode())); 
} 

public static void listMusic() { 
    System.out.println(musiclist.toString()); 
} 

public static void eraseMusicWithCode(int code) { 
    musiclist.delete(code); 
    System.out.println("Article deleted"); 
} 

public static void eraseMusicWithoutCode() { 
    System.out.println("Insert article code: "); 
    int code = input.nextInt(); 
    musiclist.delete(code); 
    System.out.println("Article deleted"); 
} 

UPDATE-- Об использовании по умолчанию в заявлении коммутатора

Я не могу использовать значение по умолчанию, потому что по этой причине. Внутри переключателя у меня есть , создайте и список команд, но мне пришлось установить команды erase вне ведьмы, потому что это зависит от того, вводю ли я команду с кодом или без нее. Итак, если я введу команду стирания, и если у меня есть значение по умолчанию внутри коммутатора, оно покажет исключение.

+0

в коммутаторе, используйте значение по умолчанию: \\ исключение. – wxyz

+0

Чтобы выбросить исключение в оператор switch, вы генерируете исключение. Единственный небольшой сюрприз в том, что если случай только генерирует исключение - логика 'if' - тогда' break' будет мертв, если вы его используете, и компилятор будет жаловаться. Поэтому пропустите 'break'. –

+0

Опубликована информация об использовании команды по умолчанию – masmic

ответ

4

Если вы хотите использовать switch/case, добавьте default для обработки неизвестных команд. Для этого вам не нужны никакие исключения. Просто неправильно обрабатывайте неправильный ввод. Итак, вам придется подготавливать ввод и определять, являются ли эти случаи тремя аргументами. Переместите код для специальных случаев внутри switch/case и проверьте третий параметр. Я делаю это для одного случая, чтобы вы могли понять. Так с невыполнением, немного грязный, не тестировалось код будет:

public static void main (String[] args){ 

    do{ 
     try{ 
      System.out.println("Waiting for instructions: "); 
      instructions= input.nextLine(); 
     String preparsedInstructions = instructions; 
     int from = instructions.indexOf(" "); 
     if(from > -1){ 
      int to = preparsedInstructions.indexOf(" ", from + 1); 
      if(to > -1){ 
       preparsedInstructions = preparsedInstructions.substring(0, to); 
      } 
     } 

      switch (preparsedInstructions){ 
       case "create client": 
        createClient(); 
        break; 
       case "create music": 
        createMusic(); 
        break; 
       case "create selling": 
        //createSelling(); 
        break; 

       case "list client": 
        listClient(); 
        break; 
       case "list music": 
        listMusic(); 
        break; 
       case "list selling": 
        //listSelling(); 
        break; 
       case "erase client": 
      if (instructions.length() <= 18 && instructions.length() >= 17 && instructions.substring(0, 16).equals("erase client")){ 
       String client_code = instructions.substring(16); 
       client_code = client_code.trim(); 
       int code = Integer.parseInt(client_code); 
       eraseClientWithCode(code); 
      }else{ 
        eraseClientWithoutCode(); 
      } 
        break; 
     ...//do for erase music,selling 

     default: //error handling 
      } 
     }catch (NullPointerException npe){ 
      System.out.println("There are not articles on the list"); 
     } 



    }while(!instructions.equals("close")); 
} 
+0

Опубликована информация об использовании команды по умолчанию – masmic

+0

Я добавил, как вы можете реорганизовать свой код. – user987339

+0

Я попробую сейчас, только одна вещь ... в этой строке 'prepsedInstructions = ss1.substring (0, to);', какая переменная 'ss1'? – masmic

0

Вы можете добавить корпус default:, в котором вы храните что-то еще не входящее. Оператор в default: выполняется, если значение, если не указано ни одного из перечисленных параметров. Я считаю, что switch's documentation хорошо показывает, как это сделать.

+0

Опубликована информация об использовании команды по умолчанию – masmic

0

Просто упростить

 case "list selling": 
       //listSelling(); 
       break; 

     default: 
      if(instructions.equals("erase music") || instructions.equals("erase client")){ 
       System.out.println("hello delete"); 
       //do your operation 
      } 
      else{ 
       System.out.println("hello default throw exceliotn"); 
       throw new RuntimeException("Invalid entry"); 

      } 
     } 

Вы можете эффективно перемещать пункт if в к способу и вы можете вернуться " boolean flag 'для определения исключения или исключения. Это повысит читаемость.