Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[java] leggere array con if

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] [java] leggere array con if

Messaggioda Foto Utenteel92 » 23 mar 2015, 20:44

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:
Avatar utente
Foto Utenteel92
5 2
 
Messaggi: 28
Iscritto il: 10 feb 2015, 13:50

1
voti

[2] Re: [java] leggere array con if

Messaggioda Foto Utenteikim » 23 mar 2015, 20:56

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.
Avatar utente
Foto Utenteikim
145 1 1 4
New entry
New entry
 
Messaggi: 81
Iscritto il: 6 nov 2014, 21:09

1
voti

[3] Re: [java] leggere array con if

Messaggioda Foto UtenteDarwinNE » 23 mar 2015, 23:13

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.
Follow me on Mastodon: @davbucci@mastodon.sdf.org
Avatar utente
Foto UtenteDarwinNE
31,0k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 4420
Iscritto il: 18 apr 2010, 9:32
Località: Grenoble - France


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti