Posts written by RootkitNeo

  1. .
    Si, a me sembra corretto! Comunque compila e viene eseguito, quindi di errore tecnici non ce ne sono. ;)

    Puoi anche evitare di utilizzare sempre il this ogni volta che richiami un metodo della classe o una variabile della classe. Allo stesso modo puoi evitarlo nel costruttore quando non devi assegnare ad una variabile un'altra variabile che ha lo stesso nome; insomma per essere chiaro:

    CODICE
    public Parco(int dimensione){
                  this.dimensione = dimensione;
                  this.posizione2roditore = new TreeMap<Posizione, Roditore>();
                  this.posizione2rapace = new TreeMap<Posizione, Rapace>();
                  this.popolaTerritorio();
          }


    Puoi scriverlo come:
    CODICE
    public Parco(int dimensione){
                  this.dimensione = dimensione;
                  posizione2roditore = new TreeMap<Posizione, Roditore>();
                  posizione2rapace = new TreeMap<Posizione, Rapace>();
                  popolaTerritorio();
          }



    Il metodo con commento "DOMANDA 2" puoi anche riscriverlo in questo modo:
    CODICE
    public Map<Integer, Integer> cibo2numeroRoditori() {
                  Map<Integer, Integer> ciboRoditori = new TreeMap<Integer, Integer>();
                  List<Roditore> roditori = new ArrayList<Roditore>(this.getRoditori());
                 
                  for(Roditore r : roditori) {
                          int cibo = r.getCibo();
                          ciboRoditori.put(cibo, Collections.frequency(roditori,cibo));
                  }
                  return ciboRoditori;
          }


    java.util.Collections#frequency() qui il metodo che utilizzo. :)
  2. .
    Dovrei vedere in che modo è costruita la classe che contiene quel metodo.

    Da come si presenta la dichiarazione del metodo, posso dedurre che la variabile è definita all'interno della classe, in quelli che vengono anche chiamati "variabili di istanza".
    Concettualmente si tratta di rappresentare dei dati: la classe non fa altro che incapsulare i dati che ti servono (i membri della classe, ovvero le variabili ed i metodi) e fornire un interfaccia per i dati (i metodi svolgono questo compito in quanto solitamente le variabili sono dichiarate come private).

    Un metodo non statico può ricevere o non ricevere i parametri e può restituire o no un valore.
    Per quanto riguarda lo static al metodo dipende appunto com'è formata l'intera classe, se posti il codice posso chiarirti la cosa. ;)

    Dovrei vedere tutte le classi dell'intero progetto. :P
  3. .
    Figurati! Ieri ti ho risposto un po' di fretta e senza esempi perchè stavo per uscire, quindi se hai domande non esitare. ;)
  4. .
    Ciao, scusa il ritardo nella risposta!

    Si, è come dici: static fa in modo che quella variabile sia comune a tutti gli oggetti. In pratica quando crei un oggetto viene fatta una copia di tutte le variabili di istanza, dichiarate nei campi di istanza insomma. Ma questa cosa non vale per le variabili statiche. Quindi se da un oggetto setti un valore ad una variabile statica, questa avrà quel valore per tutti gli oggetti che crei.

    Non si utilizzano sempre i metodi statici, è molto raro (o comunque li si utilizzano in contesti particolari). Un metodo statico è molto particolare, ed ha delle limitazioni: può ad esempio essere chiamato solo da altri metodi statici (ecco perchè nel tuo codice non puoi non utilizzarli dato che main è statico). Li si utilizzano solitamente in classi che non necessitano la creazione di un oggetto; un esempio è la classe <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html" target="_blank">java.lang.Math. Questa classe esegue solo calcoli matematici, l'unica cosa che serve è passare due numeri... non si crea quindi un contesto di "incapsulamento"... ogni volta che ti serve una funzionalità chiami direttamente quella!

    Nelle applicazioni reali si usano in questi casi ed in pochi altri, altrimenti si cerca di evitare. Uno degli aspetti negativi (oltre alle limitazioni che impongono) è che rendono il codice poco OOP, sembra quasi un codice C.

    Se non vuoi i metodi statici in quel caso devi creare un oggetto: creare un'altra classe con tutti i metodi e che poi vai a richiamare dopo la creazione dell'oggetto. Nel tuo caso avrebbero senso anche statici, ma di solito si crea comunque un'altra classe (tipo la classe Math di Java).
    L'alternativa a tutto ciò è creare un oggetto della classe OperazioniAritmetiche: http://pastebin.com/rXpG0uYa

    Piccola nota: le variabili nei metodi non servono, puoi direttamente restituire il risultato facendo return a/b;.

    Se hai altre domande da porre, non farti problemi. ;)
  5. .
    Il parsing è quello che hai fatto con la funzione explode. Se ricordo bene restituisce un array con tutti gli elementi della stringa che riceve in input (separati da un token particolare). Però devi salvarli in una matrice a parte, come ti ho mostrato sopra, altrimenti ad ogni ciclo perdi il valore precedente. Stesso discorso per la variabile indice, deve essere dichiarata fuori dal for. Inoltre dato che devi scorrere un file ti conviene usare un while come nel mio esempio (o un for, ma l'importante è che scorri sino al termine del file). Poi non puoi utilizzarla in quel modo $linea_testo.

    Oppure fai così:

    CODICE
    $indice = 0;
    $handle = fopen("NomeFile.txt","r");

    if($handle) {
     while (($linea = fgets($handle)) != false) {
       $contenuto_linea = explode(',',$linea);
       
       $matrice[$indice][0] = $contenuto_linea[0]; // primo elemento della stringa, il Nome se non ricordo male
       $matrice[$indice][1] = $contenuto_linea[1]; // indirizzo
       $indice++;
     }
    } else {
     // Apertura file non riuscita
    }

    fclose($handle);


    In pratica il codice è questo, devi solo definire $matrice come una matrice.
  6. .
    Non vedo la graffa di chiusura del codice, e se definisci index all'interno del for ad ogni ciclo viene azzerato...
    Il mio codice non funziona? Cosa non capisci di preciso?
  7. .
    Ciao e benvenuto! ;)

    Grazie!
  8. .
    Si, delle variabili ed una classe sono meglio. Quelle static sono inutili in questo caso.
  9. .
    Si, alcuni errori ci sono.

    Prima di tutto le variabili static non ti servono. Questo perchè ogni Scontrino avrà ad esempio un negozio differente. Diverso è il caso in cui hai solo quel negozio... allora in teoria potrebbe anche starci.

    L'altro errore è il modo in cui dichiari le variabili statiche. Ricordati che le parentesi graffe definiscono un blocco di codice. Se dichiari delle variabili in un blocco, non le puoi vedere all'esterno (il blocco static si usa per inizializzarle, ma dovrai dichiararle fuori come static); ecco perchè ti dice che non esistono i campi statici: perchè di fatto al termine del blocco static non esistono più.


    Io opterei per una classe Negozio con tutti i dati del caso (nome, p. iva, cell, indirizzo,...). Ogni negozio avrà un elenco di prodotti; questi poi verranno assegnati ad uno Scontrino nel momento della creazione dello Scontrino.

    Gli oggetti (e le variabili di istanza, o le variabili membro (non so come le chiami)) vanno inizializzati con il costruttore, infatti questo è proprio il suo compito (non a caso si chiama costruttore, proprio perchè "costruisce" l'oggetto, inizializzando i dati).

    Schematizzo un po' le classi:

    Negozio.java
    CODICE
    Negozio {
     * private nomeNegozio: String
     * private pIva : String
     * private indirizzo: String // qui potresti suddividere l'indirizzo volendo, quindi classe Indirizzo con città, via e numeri civico
     * private cellulare: String
     * private elencoProdotti: ArrayList<Prodotto>

     - getNome(): String
     - getIndirizzo(): String
     - getPIva(): String
     - getCell(): String
     - emettiScontrino: Scontrino

     // E magari i metodi setter per modificare gli attributi, ed altri per gestire il Negozio
    }

    Quelli contrassegnati con l'asterisco sono variabili, quelli con il segno meno sono i metodi. Il resto dopo ai due punti è il tipo di dato della variabile (nel caso dei metodi è il valore che restituiscono).

    La classe Prodotto avrà quindi anche lei il nome del prodotto e le info sul prodotto, tipo il prezzo (e magari il reparto di assegnazione).

    Prodotto.java
    CODICE
    Prodotto {
     * nome: String
     * prezzo: double
     * reparto: String

     // Anche qui metodi getter/setter come sopra più eventuali altri che servono per il Prodotto
    }


    Scontrino.java
    CODICE
    Scontrino {
     * private Negozio
     * private prodottiComprati: ArrayList<Prodotto>

     // Qui potresti avere un metodo che restituisca uno String con il nome del negozio e la spesa, ad esempio
    }



    Si potrebbe implementare il tutto in altri modi. Ad esempio una classe che gestisca i negozi. Potresti anche avere una classe che gestisce i Clienti che contenga la spesa del singolo cliente. In questo caso in Negozio avresti un arraylist di Clienti.

    CODICE
    Negozio negozio = new Negozio(.....); // Nome, indirizzo, ....
    negozio.addProdotto(new Prodotto(.....)); // Specifichi il prodotto, oppure volendo passi i dati e all'interno di addProdotto crei l'oggetto prodotto
    // al suo interno aggiungi poi ovviamente l'oggetto all'arraylist di prodotti.

    Cliente c = new Cliente();
    negozio.addCliente(c);

    // Qui potresti mostrare i prodotti del negozio stampati a video, l'utente li sceglie
    // Un esempio potrebbe essere:
    // 1. Pasta [prezzo]
    // 2. Riso [prezzo]
    // I numeri possono corrispondere ad un "codice prodotto" oppure alla posizione nell'arraylist (per farla facile)
    // l'utente specifica quindi il numero del prodotto.
    Prodotto p = negozio.compraProdotto(indice);

    // compraProdotto in Negozio potrebbe essere quindi:
    // -----------------------------------------------------------------
    Prodotto compraProdotto(int indice) {
     return elencoProdotti.get(indice);
    }
    // ---------------------------------------------------------------

    // Poi il prodotto restituito in p, lo aggiungi al carrello di quel cliente
    cliente.aggiungiAlCarrello(p);




    Sono tutte idee buttate li senza pensare troppo. ;) Avendo un idea di ciò che vuoi realizzare potrebbe essere più semplice creare il tutto (altrimenti così vengo bombardato da 1000 aggiunte da fare).
  10. .
    Ho commesso un errore io... ero stanco morto.

    Il blocco è static, quindi:
    CODICE
    public static int[] array;
    // Oppure
    // private static int[] array;

    static {
    array = new int[10];
    }



    Le variabili statiche si utilizzano per settare magari dei parametri da passare al costruttore.
    Quando termino il piccolo progetto a cui sto lavorando te lo mostro, uso qualche variabile static.

    Ok, ti risponderò questa sera penso, sono proprio di corsa ora.
  11. .
    Figurati. ;)

    CITAZIONE
    Perchè le stringhe sono una classe e gli array no? Perchè array è un tipo primitivo o simile?

    No, String è una classe perchè... è una classe. lol Gli array sono un costrutto del linguaggio. Poi puoi avere array di ogni tipo (int, double, boolean, char, String, TuoOggetto).
    L'array che hai dichiarato di nome array è semplicemente un... array. Un array altro non è che un gruppo di variabili simili raggruppate per mezzo di un nome comune. Ovvero hai array[0], array[1] etc. dove ogni cella dell'array è una locazione di memoria.
    Puoi avere anche un array di colori (java.awt.Color).
    CODICE
    Color[] colori = new Color[10];


    In questo caso la lunghezza dell'array la ottieni sempre con colori.length. Ovviamente al suo interno andranno oggetti di tipo Color.

    Una stringa cos'è? Una stringa è un insieme di caratteri. E' in pratica un array di caratteri (internamente).
    CODICE
    public final class String
       implements java.io.Serializable, Comparable<String>, CharSequence {
       /** The value is used for character storage. */
       private final char value[];


    Come vedi usa value per contenere la stringa.
    La lunghezza della stringa infatti la ottieni facendo:
    CODICE
    stringa.length();


    questo perchè stai chiamando un metodo della classe String, ovvero:
    CODICE
    public int length() {
           return value.length;
       }



    CITAZIONE
    ok, chiarissimo...praticamente un valore che non viene azzerato quando si istanzia un nuovo oggetto?

    Si, in pratica lo puoi dire anche così. Se cambi il valore è così per tutti, appunto perchè non viene copiato negli oggetti che crei.


    CITAZIONE
    Qui mi blocco..non riesco a capire il legame tra una variabile che rimane fissa per tutti gli oggetti (quindi se dico che n vale 1, vale uno per l'oggetto a, b ,c..) e per i metodi statici, che restituiscono un valore, e quel valore rimane fisso per?? Nessun oggetto visto che non ce ne sono......Quel valore viene associato a un'altra variabile, ed è ok, ma si potrebbe fare anche senza metodi statici.....

    Calma, calma.
    Quando crei un oggetto e dentro a quella classe c'è una variabile statica, quella non appartiene a quell'oggetto. In pratica non vederla come: tutti gli oggetti hanno quella variabile, e se la modifico da uno, cambia a tutti. Tutti gli oggetti non hanno una copia di quella variabile (ecco perchè è globale). Tutti le istanze della classe (tuti gli oggetti) condividono la stessa variabile.

    Provalo:
    CODICE
    class A {
     static int membroStatico = 10;

    }

    class Esempio {
     public static void main(String[] args) {
       // Se voglio posso accedere al membro statico anche qui, senza nessun oggetto
       System.out.println(A.membroStatico);

       A oggetto1 = new A();
       A oggetto2 = new A();
       
       oggetto2.membroStatico = 20;
       
       System.out.println(oggetto1.membroStatico);

       oggetto1.membroStatico = 100;
       System.out.println("Modifica del valore statico\n");
       System.out.println("A.membroStatico: " + A.membroStatico);
       System.out.println("oggetto1.membroStatico: " + oggetto1.membroStatico);
       System.out.println("oggetto2.membroStatico: " + oggetto2.membroStatico);
     }
    }



    Le variabili statiche sono usate in poche situazioni. Io se devo essere sincero non le ho mai utilizzate. Mi è capitato di utilizzare molto tempo fa dei metodi statici. In pratica dovevo passare un oggetto di tipo GregorianCalendar e modificarne la data, passando alla settimana successiva o precedente; ho creato quindi una classe con costruttore privato e metodi statici, così che passando il mio oggetto mi venisse restituito lo stesso oggetto con una data di 7 giorni più avanti/indietro.
    Quel tipo di classe come puoi osservare è del tutto "scollegata" dal resto, cioè, non ha legami con il resto del software... tutto ciò che fanno i metodi al suo interno è sottrarre o sommare 7 giorni.
    Stesso discorso vale per la classe Math: vuoi la radice di un numero N, passi il numero. Non importa che lo usi perchè il tuo software è una calcolatrice o perchè lo utilizzi per calcolare i numeri primi.


    CITAZIONE
    ok, anche questo, se volessi dichiararle public il procedimento sarebbe analogo?

    public al posto di private si. Per quanto riguarda le variabili statiche (non gli oggetti) puoi dichiararle anche senza il blocco. Il blocco static da una precedenza differente all'inizializzazione della variabile... però non ricordo più in che modo la cambiava.

    CODICE
    public
    {
    array = new int[10];
    }



    CITAZIONE
    Ti dico la verità: sto seguendo dei tutorial su internet (perchè dopo un paio di manuali letti non sapevo proprio come esercitarmi praticamente), e lui sembra, oltre che pratico, chiaro e semplice

    L'incapsulamento è stato il capitolo dopo, ciò che mi manca davvero (da capire) sono gli esempi pratici..(in che contesto e per contrastare cosa posso utilizzarlo?)
    E inoltre mi servirebbe trovare degli esercizi..ho scaricato vari file in PDF che oltre a contenere l'argomento su cui dovrei esercitarmi (Esempio: Funzioni ricorsive) mi chiede altre cose che non so nemmeno cosa siano xD...Alcune riesco ad aggirarle (tipo l'input..), altre mi cambiano il senso dell'esercizio
    Avresti un eserciziario da consigliarmi?

    Di chi sono i tutorial?

    Dipende che tipo di esercizio vorresti, e cosa conosci. Qui su SPC ne trovi un sacco... se vai verso le ultime pagine probabilmente trovi i più semplici e classici. Così su due piedi no saprei cosa consigliarti... ;)


    CITAZIONE
    Per gli array ok :)

    Ehm..ho visto l'esercizio...ma che dovrei restituire nel metodo? Il numero di passaggi effettuati per spostare la torre?

    No, proprio i vari passaggi per spostarla. :) In pratica in quali pioli spostare il disco.
    Indizio: qui su SPC ho postato proprio io questo esercizio (che è un classico della ricorsione)...


    CITAZIONE
    Scusami se sto andando off topic, credo che modificherò il titolo in problemi vari xD
    Mi sono ricordato ora che il titolo della discussione non posso modificarlo...Puoi modificarlo tu? "Funzione ricorsiva senza parametri, Metodo static e Array"? Mi sembra abbastanza completa

    Tranquillo, no problem. ;)
    Si, ci può stare. Ora modifico.
  12. .
    Il punto è che non ti serve fatto in quel modo.
    Non ricordo moltissimo PHP, ma ciò che hai scritto non è corretto secondo me. Prima di tutto la matrice è vuota, ed in secondo luogo nome ed indirizzo sono sulla stessa riga.
    Tutto ciò che devi fare è questo:

    1) scorrere il file (cosa che stai facendo con il primo for);
    1.1) per ogni riga che leggi parsarla
    2) inserire i due valori della stringa all'interno dell'array

    Quindi dovrai avere una variabile che viene incrementata ogni volta che il ciclo di lettura termina.
    Una sorta di pseudo codifica è la seguente:

    CODICE
    $indice = 0;

    while (!feof($leggo)) {
     $linea_testo = file($leggo);

     $nome = // parsi $linea_testo per ottenere il nome
     $indirizzo = // ottieni l'indirizzo

     $matrice[$indice][0] = $nome;
     $matrice[$indice][1] = $indirizzo;
     
     $indice++;
    }
  13. .
    CITAZIONE (Dodiz @ 11/7/2014, 16:58) 
    vi posto qui il codice che ho creato (ho usato le classi per esercitarmi, immagino si possa fare anche senza?

    Si, si potrebbe anche fare senza, ma dichiarando nella classe che contiene il main un metodo statico.


    CITAZIONE
    Questa è la classe array ricorsività:
    CODICE
    .......


    Dove avrei già qualche domanda:
    la funzione dell'identificatore (giusto?) static, è quella di mantenere fisso il valore di i? L'ho visto poco fa ma non ci ho capito molto

    Non quoto anche il codice per non creare troppa confusione.

    Veniamo a noi. Prima di tutto è relativamente corretto, nel senso che funziona. Per compilarlo però dovrai rimuovere quella variabile n non dichiarata, oppure dichiararla. La dichiarazione è inutile, dato che come ha detto uomo in verde esiste "length" per conoscere la lunghezza.
    Qui però una distinzione molto importante: per gli array si usa array.length, senza le tonde! Le tonde si utilizzano per la lunghezza delle stringhe.

    Con la parola chiave static è meglio andar cauti. Si utilizza con regole ben precise e rigide (un metodo statico può essere chiamato in particolari circostanze ed operare su dati statici).
    Lo scopo è semplicemente quello di dichiarare una "variabile globale". Cosa significa? Significa "semplicemente" che quando crei un oggetto non viene fatta una copia di una variabile dichiarata come static, ma viene usata in comune da tutti gli oggetti.

    CITAZIONE
    Poi il tizio diceva che se tutti i parametri vengono identificati static non c'è bisogno del costruttore per la classe (come la classe Math), e qui neanche ho capito perchè..

    Se tutte le variabili sono static, non serve un costruttore perchè... non serve un oggetto! E perchè non serve un oggetto? Per quanto detto sopra, ovvero per il semplice fatto che le variabili static sono usate in comune, ad un oggetto non viene fatta una copia di una variabile statica.

    Solitamente classi come quella descritta "dal tipo" (come appunto java.lang.Math) vengono chiamate in gergo "classi di utilità". Sono quel tipo di classi che svolgono compiti generali, come appunto fa Math. Tutti possono aver bisogno di una radice quadrata, o del seno, ed opera solo su un numero... in pratica ricevono un valore e danno il risultato.
    In questo caso il costruttore della classe viene dichiarato privato, così da non poter essere istanziato.
    Ti mostro una piccola parte della classe Math:

    CODICE
    /*
    * Copyright (c) 1994, 2011, Oracle and/or its affiliates. All rights reserved.
    * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
    *
    *
    *
    */

    package java.lang;
    import java.util.Random;


    /**
    * ..................
    *
    * @author  unascribed
    * @author  Joseph D. Darcy
    * @since   JDK1.0
    */

    public final class Math {

       /**
        * Don't let anyone instantiate this class.
        */
       private Math() {}


       public static final double E = 2.7182818284590452354;


       public static final double PI = 3.14159265358979323846;

       public static double sin(double a) {
           return StrictMath.sin(a); // default impl. delegates to StrictMath
       }


       public static double cos(double a) {
           return StrictMath.cos(a); // default impl. delegates to StrictMath
       }


       public static double tan(double a) {
           return StrictMath.tan(a); // default impl. delegates to StrictMath
       }


       public static double asin(double a) {
           return StrictMath.asin(a); // default impl. delegates to StrictMath
       }


       public static double acos(double a) {
           return StrictMath.acos(a); // default impl. delegates to StrictMath
       }


       public static double atan(double a) {
           return StrictMath.atan(a); // default impl. delegates to StrictMath
       }

       public static double toRadians(double angdeg) {
           return angdeg / 180.0 * PI;
       }

       public static double toDegrees(double angrad) {
           return angrad * 180.0 / PI;
       }


       public static double exp(double a) {
           return StrictMath.exp(a); // default impl. delegates to StrictMath
       }

      // ..........
    }


    I puntini di sospensione sono i miei, ho rimosso i commenti ed ho riportato una piccola parte di codice (il file con tutti i commenti è composto da 1527 righe, e capirai che è un po' scomodo riportarlo qui lol).
    Come vedi il costruttore viene dichiarato private, così che questa classe non possa essere istanziata. Infatti la si usa in questo modo:
    CODICE
    int n = 10;
    int r = Math.sqrt(n);


    Questa è la regola di accesso ai membri statici: Classe.nomeMetodo() e Classe.nomeVariabile.

    Inoltre, mi stavo scordando di una cosa. L'inizializzazione di un membro statico dovrebbe avvenire in un altro modo: ovvero utilizzando un blocco static.
    CODICE
    public static int[] array;

          static {
            array = new int[10];
          }


    Ad ogni modo a te non servono membri statici, ma se vuoi fare una classe in "stile Math" allora dovrai pensarla diversamente.

    CITAZIONE
    Questo è il main
    CODICE
    public class Main {

           public static void main(String[] args)
           {
                   
                   ArrayRicorsività numeri = new ArrayRicorsività();
                   
                   numeri.array[0] = 1;
                   numeri.array[1] = 2;
                   numeri.array[2] = 3;
                   numeri.array[3] = 4;
                   numeri.array[4] = 545;
                   //ecc...
                   
                   numeri.stampasommaricorsiva(0);
                   
           }
           
    }


    Il problema principale è: visto che è una funzione ricorsiva ho necessariamente bisogno del parametro (i) che va ogni volta incrementato ecc..
    Ma in realtà non ho bisogno di quel parametro (quando richiamo il metodo) perchè me li deve stampare tutti, e non avrei bisogno di un valore diverso da 0, anzi non ci dovrebbe proprio essere..
    Quindi, ho sbagliato in qualche modo l'esercizio, o mi sto solo creando dei problemi inutili? xD

    Il modo in cui passi il parametro non è di per sè sbagliato.
    Le rare volte in cui ho scritto un metodo ricorsivo è stato poi per inglobarlo all'interno di un altro. Ovvero, un metodo (tipo il main()) chiama un metodo nella classe, e quel metodo inizializza quello ricorsivo (passando se è il caso un parametro).

    Considera comunque che la ricorsione è comodo solo in certi casi. Vi sono implementazioni di algoritmi molto complesse iterativamente (come il QuickSort...), e la ricorsione è di grande aiuto. In generale comunque è meno efficiente di un corrispettivo algoritmo iterativo.

    Ancora non conosci la OOP suppongo. Uno dei concetti chiave è l'incapsulamento dei dati per proteggerli da accessi esterni (in quasi tutti i casi le variabili sono dichiarate come private).
    Io l'avrei scritta senza metodi statici (oppure rendendola simile a Math, come detto prima) e con l'array private.

    CITAZIONE
    Ah, per gli array... è corretto fare così?
    int[] array = new int[10] = {1, 4, 5, 6, 2, 3, 4, 9, 10, 11};
    se si, come si fa quando il parametro (che è un array) è in un oggetto/classe??

    Grazie.......per la pazienza...xD

    No, non è proprio corretto. Non serve il secondo numero tra le quadre, in quanto il numero viene determinato automaticamente con gli elementi tra le graffe, e non serve il secondo segno =.
    Quindi:
    CODICE
    int[] array = new int[] {1,2,3,4,5,6,7};


    Quando operi su tipi di dati differenti, come String o un tuo oggetto, funziona esattamente allo stesso modo.
    CODICE
    String[] array = new String[10];

    // Oppure

    String[] array = new String[] {"1", "2", "3"};



    Se vuoi un altro esercizio ricorsivo puoi buttarti su questo: http://it.wikipedia.org/wiki/Torre_di_Hanoi#Soluzione (c'è anche un topic in Esercizi). ;)

    Tieni presente che la ricorsione non la userai molte volte. Vi sono appunto casi particolari come alcuni di algoritmi di ordinamento (vedi il QuickSort ad esempio), la successione di fibonacci è comoda (e più chiara) se calcolata ricorsivamente e vi sono altri casi. Ora non mi vengono in mente applicazioni più pratiche... Nei programmi che ho scritto non l'ho mai utilizzata, se non ricordo male.

    Credo d'aver risposto a tutto. Se hai domande non esitare a chiedere. ;)
  14. .
    Si, un array a due dimensioni mi sembra una buona soluzione. Concordo su tutto, almeno a prima vista, ma non capisco perchè il ciclo for-each. Gli elementi sono già associati, ogni volta che inserisci gli elementi occupano una data posizione.
    Per essere più chiaro, nel caso di una matrice (array a due dimensioni):

    CODICE
    array[0][0] = "Nome1";
    array[0][1] = "Indirizzo1";
    array[1][0] = "Nome2";
    array[1][1] = "Indirizzo2";


    In pratica ogni riga è composta da due colonne: nella prima il nome, e nella seconda l'indirizzo (associato a quel nome).
    Quindi se vuoi il secondo nome (indice di riga 1) dovrai solo accedere all'elemento array[1][0]. Nella colonna 1 (<i>array[1][1]) troverai invece il suo indirizzo.

    E' questo che intendevi?
  15. .
    Se sei agli inizi e non devi usare GUI, ti sconsiglio un IDE.
5866 replies since 5/1/2009
.