Utilizzo switch

di il
3 risposte

Utilizzo switch

Ciao a tutti,
ho un dubbio sull'utilizzio dello switch insieme alla funzione math.random. Mi spiego meglio:
public Semaforo(){ 
        int a = (int)(Math.random()*4); 
        switch(a){ 
            case 0: stato="rosso"; 
            break; 
            case 1: stato="verde"; 
            break; 
            case 2: stato="giallo"; 
            break; 
            case 3: stato="lampeggiante"; 
        } 
    }
ma nello switch non va SEMPRE il caso di default?anche se eclipse cosi non mi da nessun errore.
ovvero dovrei e potrei scrivere cosi, lasciando invariato il *4 di math.random?o se ci metto il caso di default(che se non sbaglio è obbligatorio) devo modificare con *5?
public Semaforo(){ 
        int a = (int)(Math.random()*4);       // è corretto lasciare 4? 
        switch(a){ 
            case 0: stato="rosso"; 
            break; 
            case 1: stato="verde"; 
            break; 
            case 2: stato="giallo"; 
            break; 
            case 3: stato="lampeggiante";
            break;
            default:stato=" ";
            break; 
        } 
    }
attendo delucidazioni.
Grazie

3 Risposte

  • Re: Utilizzo switch

    Ciao!
    L'utilizzo del "default" non è sempre obbligatorio. Ad esempio nel tuo caso non lo è (però puoi comunque metterlo), mentre nel codice qua sotto lo è, altrimenti da un errore in compilazione.
    public Integer getInt(int n){
    		switch (n) {
    		case 1:
    			return new Integer(1);
    		case 2:
    			return new Integer(2);
    		case 3:
    			return new Integer(3);
    		default:
    			return new Integer(0); //se non ci fosse il default, cosa restituirebbe questo metodo?
    		}
    	}

    Per tornare alla tua domanda, anche se metti il default, puoi lasciare Math.random()*4 e semplicemente il default non verrà mai richiamato prima consideri tutti i possibili casi attraverso i vari "case". Anzi, dal mio punto di vista sarebbe sbagliato mettere Math.random()*5 per una questione semantica, ovvero che un semaforo ha 4 stati e non 5 (tant'è che nel default hai giustamente messo stato = " ", ovvero una stringa che ti rappresenta uno stato non meglio definito)
  • Re: Utilizzo switch

    Grazie Della!ultima domanda: secondo te è corretto scrivere lo switch così?
    eclipse non mi dà errore ma ho paura che il "case" deve cominciare da 0. Tu che dici?
    int v=(int)((Math.random()*10)+1);
    switch(v){
    case 1: valore=1; break;
    case 2: valore=2;break;
    case 3: valore=3;break;
    case 4: valore=4;break;
    case 5: valore=5;break;
    case 6: valore=6;break;
    case 7: valore=7;break;
    case 8: valore=8;break;
    case 9: valore=9;break;
    case 10: valore=10;break;
    default: System.out.print("valore errato"); break;
    }
    }
    se avessi scritto solo:
    int v=(int)((Math.random()*10));
    switch(v){
    case 0: valore=1; break;
    case 1: valore=2;break;
    case 2: valore=3;break;
    case 3: valore=4;break;
    case 4: valore=5;break;
    case 5: valore=6;break;
    case 6: valore=7;break;
    case 7: valore=8;break;
    case 8: valore=9;break;
    case 9: valore=10;break;
    default: System.out.print("valore errato"); break;
    }
    }
    non dovevo mettere il + 1, e partire da case 0, giusto? è corretto fatto cosi?
  • Re: Utilizzo switch

    Direi che aggiungere o meno il +1 e' una questione di preferenza personale, e in alcuni casi puo essere comodo per dare piu' coerenza con lo stato reale. Nel tuo caso e' piu' elegante aggiungere +1 cosi si mantiene meglio la coerenza con l'asegnazione del valore desiderato.
Devi accedere o registrarti per scrivere nel forum
3 risposte