2009-10-18 1 views
6

У меня есть да или нет вопрос & ответ. Я хотел бы задать другой вопрос «да» или «нет», если «да» был ответом. Мой инструктор хочет, чтобы мы использовали charAt (0) для ввода ответа.Java Вопрос: Возможно ли иметь оператор switch в другом?

Возможно ли иметь оператор switch в другом (как вложенный оператор if)?

Заранее спасибо.

EDIT: Вот пример моего псевдо-код =

display "Would you like to add a link (y = yes or n = no)? " 
input addLink 

switch (link) 
    case 'y': 
     display "Would you like to pay 3 months in advance " + "(y = yes or n = no)?" 
     input advancePay 

       switch(advPay) 
         case 'y': 
       linkCost = 0.10 * (3 * 14.95) 

       case 'n' 
       linkCost = 14.95    
    case 'n' 
     linkCost = 0.00 
+16

в то время, которое потребовалось вам, чтобы написать этот вопрос, который вы могли бы опробовали сами ... просто говорю ... –

+0

Я думаю, что точка SO заключается в том, что людям * n не нужно писать код для проверки идеи. –

+2

@ande_turner: no. SO здесь, чтобы отвечать на вопросы, а не делать что-то вместо людей. –

ответ

14

Да, но этого не делают. Если вам нужен следующий уровень логики, поместите второй коммутатор в свой собственный метод с описательным именем.

EDIT: На примере, который вы добавили, у вас есть два булевых условия. Я бы рекомендовал против использования переключателя вообще, используя if & else условные обозначения. Используйте (STRING.charAt(0) == 'y') в качестве тестового примера, или что-то по методике, как boolean isY(final String STRING) { return (STRING.charAt(0) == 'y' || STRING.charAt(0) == 'Y'); }

+5

+1 для лаконичности «да, но не надо». – CPerkins

1

Возможно, но это было бы очень запутанно и трудно читать. Существует почти наверняка лучший способ, например вызов метода в первом операторе switch и выполнение любой необходимой обработки (включая другой переключатель, если необходимо) в этом методе.

0

Большинство языков программирования являются ортогональными. Это означает, что использование функции обычно не зависит от местоположения, если оно имеет смысл.

Например, вы не можете объявить локальную переменную общедоступной.

+1

@Srini: Я не понимаю, как это отвечает на вопрос. В частности, он ничего не говорит о том, является ли 'switch' в Java ортогональным. Ортогональность - это свойство, к которому стремятся разработчики языка программирования, но редко достигают цели. Вы не можете сделать вывод о том, что любая конкретная языковая конструкция будет ортогональной, не понимая спецификации языка. Это может быть одним из исключений. –

2

Да. Переключатели разбивают шаблон оператора языкового блока, но это в основном из-за C/C++, из которого основан оператор switch, используемый Java.

Во всех трех языках, оператор переключатель принимает следующий вид:

switch(variable) { 
    case n: 
     statement 1; 
     statement n; 
     (optional) break; 
    case n+1: 
     statement 1; 
     statement n; 
     (optional) break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 

Поскольку коммутатор заявление ломает традиционную картину языка, многие программисты завернуть их несколько операторов в случае использования традиционного стиля блока: { }

Это связано с тем, что большинство конструкций на всех трех языках допускают, чтобы оператор стиля блока рассматривался как один оператор, но оператор switch не требует, чтобы стиль блока выполнял несколько операторов в одном случае.

Без инструкции break, разделяющей каждый случай, будет «проваливаться» - если случай n был согласован и не имел перерыва, код под ним (случай n + 1) будет выполнен - ​​если случай n + 1 не имел перерыва и был сопоставлен, будет выполняться код по умолчанию, если ни один из них не имел разрыва, при сопоставлении случая n будет выполняться код для случая n, case n + 1 и default.

По умолчанию является необязательным, и указывается действие по умолчанию для оператора switch для выполнения. Обычно условие по умолчанию является либо общим обработчиком, либо хорошим местом для генерирования исключения, если это значение не может быть логически иным, чем значения в инструкции switch.

Для иллюстрации переключатель заявление выполняющийся внутри переключателя заявление, посмотрите на этот надуманный пример:

String message = null; 
int outerVariable = getOuterVariable(); 
switch(outerVariable) { 
    case n: 
     statement 1; 
     statement n; 
     break; 
    case n+1: 
     int innerVariable = getInnerVariable(); 
     switch(innerVariable) { 
      case 1: 
       message = "IT WAS 1"; 
       break; 
      default: 
       message = "WHY WOULD YOU DO THIS? OH THE HUMANITY!"; 
     } 
     break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 
+0

просто будьте осторожны с приведенным выше кодом - если вы переводите его в java, обратите внимание, что операторы case должны быть постоянными выражениями – Chii

+0

Chii - Хорошая точка. Кроме того, перечисления Java 5 также разрешены в операторах switch. – MetroidFan2002

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