2009-10-18 24 views
6

Ho una risposta sì o no &. Vorrei chiedere un altro si o nessuna domanda se la risposta fosse sì. Il mio istruttore vuole che usiamo charAt (0) come input per la risposta.Domanda Java: è possibile avere un'istruzione switch in un altro?

È possibile avere un'istruzione switch in un altro (come un'istruzione nidificata if)?

Grazie in anticipo.

EDIT: Ecco un esempio del mio codice pseudo =

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

nel tempo che ti ha portato a scrivere questa domanda si potrebbe avere provato da soli ... solo dicendo ... –

+0

Penso che il punto di SO sia che le persone non hanno bisogno di scrivere codice per testare un'idea. –

+2

@ande_turner: no. SO è qui per rispondere alle domande, non per fare cose invece di persone. –

risposta

14

Sì, ma non lo fanno. Se hai bisogno di un ulteriore livello di logica del genere, posiziona il secondo Switch nel suo metodo con un nome descrittivo.

MODIFICA: con l'esempio che hai aggiunto, hai due condizioni booleane. Raccomanderei invece di usare l'interruttore, usando invece le condizioni if & else. Utilizzare (STRING.charAt(0) == 'y') come test case, o qualcosa di metodico come boolean isY(final String STRING) { return (STRING.charAt(0) == 'y' || STRING.charAt(0) == 'Y'); }

+5

+1 per la sintassi di "sì ma non". – CPerkins

1

È possibile, ma sarebbe molto complicato e difficile da leggere. C'è quasi sicuramente un modo migliore, come chiamare un metodo all'interno della prima istruzione switch e fare qualsiasi altra elaborazione necessaria (incluso un altro switch se necessario) in quel metodo.

0

La maggior parte dei linguaggi di programmazione è ortogonale. Ciò significa che l'utilizzo di una funzionalità di solito non dipende dalla posizione, se significativa.

Ad esempio, non è possibile dichiarare una variabile locale come pubblica.

+1

@Srini: Non vedo come questo risponda alla domanda. Nello specifico, non dice nulla sul fatto che 'switch' in Java sia ortogonale. L'ortogonalità è una proprietà che i progettisti di linguaggi di programmazione si sforzano, ma raramente raggiungono interamente. Non è possibile dedurre che qualsiasi particolare costrutto linguistico sarà ortogonale senza comprendere le specifiche del linguaggio. Potrebbe essere una delle eccezioni. –

2

Sì. Gli interruttori interrompono il modello di istruzione del blocco di linguaggio, ma questo è principalmente a causa di C/C++ da cui si basa l'istruzione switch utilizzata da Java.

In tutte e tre le lingue, l'istruzione switch assume la seguente forma:

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

Perché un'istruzione switch rompe lo schema linguaggio tradizionale, molti programmatori avvolgono i loro più istruzioni in un caso utilizzando lo stile di blocco tradizionale: { }

Questo perché la maggior parte dei costrutti in tutte e tre le lingue consente di considerare istruzioni di stile di blocco come un'unica istruzione, ma l'istruzione switch non richiede lo stile di blocco per l'esecuzione di più istruzioni in un singolo caso.

Senza l'istruzione break che separa ogni caso, ci sarà "sfumare" - se caso n è stato abbinato e non ha avuto una pausa, il codice sotto di essa (caso n + 1) verrebbe eseguita - se caso n + 1 non ha avuto un'interruzione ed è stato abbinato, il codice predefinito sarebbe stato eseguito, se nessuno dei due avesse avuto un'interruzione, quando si è verificato il caso n, il codice per il caso n, il caso n + 1 e il default sarebbero stati eseguiti.

L'impostazione di default è opzionale, e specifica un'azione predefinita per un'istruzione switch per eseguire. In genere, la condizione predefinita è un gestore generico o una buona posizione per generare un'eccezione se il valore non può essere logicamente diverso dai valori nell'istruzione switch.

per illustrare un'istruzione switch esecuzione all'interno di un'istruzione switch, dare un'occhiata a questo esempio inventato:

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

fai solo attenzione al codice precedente - se lo stai traducendo in java, nota che le istruzioni case devono essere espressioni costanti – Chii

+0

Chii - Buon punto. Inoltre, le enumerazioni di Java 5 sono consentite anche nelle istruzioni switch. – MetroidFan2002

Problemi correlati