Pagina 1 di 1

[java] leggere array con if

MessaggioInviato: 23 mar 2015, 20:44
da el92
Ciao ho un problema che sembra abbastanza semplice ma che mi sta facendo disperare...allora io dovrei leggere da input la lettera D e il programma mi dovrebbe stampare il contenuto dell'array("N","E","S","W").
La mia soluzione è:

Codice: Seleziona tutto
import java.util.*;
class Provaarray{
public String aDestra(String d){
String punti[]={"N","E","S","W"};
String punto="";
int pos=0;
   if(d.equals("D")&&pos<punti.length){
      punto=punti[pos];
      pos++;   
}
return punto;
}

public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
Provaarray p=new Provaarray();
System.out.println(p.aDestra("D"));
System.out.println(p.aDestra("D"));
}
}

lo so che si fa un ciclo for...ma posso leggere un array con un if,digitando più volte da main il metodo aDestra("D")? :roll:

Re: [java] leggere array con if

MessaggioInviato: 23 mar 2015, 20:56
da ikim
el92 ha scritto: posso leggere un array con un if,digitando più volte da main il metodo aDestra("D")? :roll:

perché ti serve fare una cosa del genere ?
Non ho provato il codice ma ad occhio direi che come l'hai scritto non funziona perché la variabile "pos" viene distrutta ogni volta che la funzione "aDestra" finisce l'esecuzione o comunque la azzeri ogni volta che entri nella funzione.

Re: [java] leggere array con if

MessaggioInviato: 23 mar 2015, 23:13
da DarwinNE
Se posso permettere di dare un piccolo consiglio, anche se sono un non informatico ;-)

Sarebbe meglio scegliere una regola per l'indentazione e seguirla in maniera rigorosissima. Per esempio, oggi va di moda questo stile:

Codice: Seleziona tutto
import java.util.*;
class Provaarray {
    public String aDestra(String d) {
        String punti[]={"N","E","S","W"};
        String punto="";
        int pos=0;
        if(d.equals("D")&&pos<punti.length) {
            punto=punti[pos];
            pos++;   
        }
        return punto;
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String s=sc.nextLine();
        Provaarray p=new Provaarray();
        System.out.println(p.aDestra("D"));
        System.out.println(p.aDestra("D"));
    }
}


Se fai così, vedi ad occhio che come indicato giustamente da Foto Utenteikim, la variabile pos fa parte del blocco interno al metodo aDestra e quindi da brava variabile locale "si dimentica" di quello che è successo quando esci dal blocco.

Volendo, esisterebbe la possibilità di "dare un po' di fosforo" per fare in modo che il valore in pos non venga perduto (sono le variabili dette "statiche"), ma in questo caso sarebbe una pessima soluzione, brutta ed inutile. E' considerata cattiva pratica di programmazione avere funzioni che si "lasciano delle tracce" qua e là.
In gergo, si dice che la funzione ha "effetti collaterali", vedi per esempio qui:

http://it.wikipedia.org/wiki/Effetto_co ... nformatica)

Si rende meno chiaro il flusso dei dati nel programma e lo si rende più difficile da leggere, capire e correggere in caso di problemi.