Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-09-2008, 12:14   #1
Nalim83
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 412
[Java] principiante con problemi su array

ciao a tutti premetto che ho seri ma seri problemi con java.

Sto studiando gli array e volevo costruire uno schema di classe java dove voglio riceve in input un array (dimensione array e valori) e un valore x; e grazie ad alcuni metodi devo dire se questo valore appartiene all'array utilizzando una ricerca binaria.

L'algoritmo modulare l'ho fatto ma il mio problema è su come creare la classe e ricevere i valori dell'array in input.
Questo è un abbozzo sbagliato della classe:




//classe
public class Esercizio
{

// campi
// a è il vettore
private char A;

//n è il valore in input da cercare
final int n =


//costruttore
public Esercizio (char A, int n )

{

CHAR A = new char [n];
this.volore = valore;
int n = 0;
}





public void caricavett (Char []A)
{};
public void ordinamento (Char []A)
{};
public char minlista (Char []A)
{};
public int ricercabinaria (Char []A, char key)
{};
public char valorecentrale (Char []A)
{};

}




grazie a tutti
Nalim83 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2008, 12:31   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Umm, prima di cimentarsi con l'implementazione è meglio leggere/studiare qualcosa circa le strutture dati che vogliamo/dobbiamo usare nel linguaggio di programmazione scelto.

--> tutorial ufficiale della SUN sulla tecnologia Java: capitolo Array

Dopo aver letto questo, per quanto riguarda gli array in Java e come si usano non dovresti avere problemi
(così scoprirai, tra l'altro, che non ti serve passare la lunghezza dell'array, in quanto in Java l'implementazione di un array contiene già l'informazione sulla sua dimensione )
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2008, 12:41   #3
Nalim83
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 412
ho gia letto quella sezione...


//classe
public class Esercizio
{

// campi
// a è il vettore
private char A;


//costruttore
public Esercizio (char A)

{

CHAR A = new char [];
this.volore = valore;

}





public void caricavett (Char []A)
{};
public void ordinamento (Char []A)
{};
public char minlista (Char []A)
{};
public int ricercabinaria (Char []A, char key)
{};
public char valorecentrale (Char []A)
{};

}

Cosa ne pensi?
Nalim83 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2008, 13:05   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
//classe
public class Esercizio
{

// campi
// a è il vettore
private char A;


//costruttore
public Esercizio (char A)

{

CHAR A = new char [];
this.volore = valore;

}





public void caricavett (Char []A)
{};
public void ordinamento (Char []A)
{};
public char minlista (Char []A)
{};
public int ricercabinaria (Char []A, char key)
{};
public char valorecentrale (Char []A)
{};

}
Umm, penso che se la tua classe Esercizio ha la responsabilità di ricevere un array per poi farci qualcosa (nello specifico una ricerca binaria per trovare un elemento specifico) forse dovrebbe avere come membro non un char, ma un array di char, e di conseguenza nel costruttore prendere in ingresso un array di char e non un singolo char, giusto?

esempio/bozza:
Codice:
//classe
public class Esercizio
{
    private char[] charArray;

    public Esercizio(char[] data)
    {
        charArray = data;
    }
}

P.S.: dal codice che hai postato non è chiaro come vuoi realizzare la soluzione del problema che hai spiegato nel primo post.
Io ho dato per scontato che il tuo codice sarà strutturato con una classe principale dove sarà presente l'entry-point della tua applicazione (...il metodo statico: public static void main(String args[])) che avrà la responsabilità di creare/ricevere l'array da un input esterno (file di testo o tastiera) e la responsabilità di istanziare un oggetto di una seconda classe a cui verrà passato l'array in questione e a cui sarà chiesto di cercare un elemento specifico.
Con questo scenario in testa ho immaginato che la tua classe Esercizio fosse la seconda classe, quella che esegue la ricerca binaria.
E' giusto?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 19-09-2008 alle 13:20.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2008, 14:56   #5
Nalim83
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 412
grandissimo, hai capito tutto alla perfezione, volevo una classe tester con il main (che non devo crearla) e una classe dove ho rappresentato l'algoritmo (questa si). Dimmi tu se dobbiamo fare tutto con una classe.

Ora ti spiego tutto l'esercizio fin dall'inizio così sono più chiaro


L'esercizio si compone di due punti

1.Utilizzando un formalismo di rappresentazione degli algoritmi a scelta, fornire la specifica di un algoritmo, in forma modulare, per il seguente problema.
Dato in input un vettore non ordinato di caratteri alfabetici e un carattere alfabetico, stabilire se il carattere in input è presente nel vettore, utilizzando una ricerca binaria.

2. Dare la definizione di una classe java per la realizzazione dell'algoritmo dell'esercizio precedente



Il primo esercizio l'ho svolto: ossia per risolvere l'algoritmo ho creato un algoritmo modulare con queste voci:

INIZIO - chiedi dim vettore - caricavett - ordinamento per selezione - trova minimo lista - ricerca binaria - trova valore centrale - FINE


Ossia per poter fare l'orinamento, mi serve trovare il minimo lista.
per poter fare la ricerca binaria mi serve che l'array sia ordinato e che sappia ogni volta quale sia il valore centrale dell'array.
Per l'algoritmo non ho avuto grandi problemi ma ora tocca alla classe.


Non so come ringraziarti...


Ora devo farti qualche domanda:
1. char[] è un tipo ossia per dire che voglio un array di char devo mettere char[] e non char soltanto.

2. Ho solo un problema sul metodo ricercabinaria: deve prendere l'array in input e il carattere da comparare e deve dare come output vero o falso.
la variabile key data in input dove devo dichiararla?
(non so se sono stato chiaro)



//classe
public class Esercizio
{

//campo
private char[] charArray;

//costruttore
public Esercizio(char[] data)
{
charArray = data;
}



//metodi

public void caricavett (Char[] charArray)
{};
public void ordinamento (Char[] charArray)
{};
public char minlista (Char[] charArray)
{};
public bolean ricercabinaria (Char[] charArray, char valoredatrovare)
{};
public char valorecentrale (Char[] charArray)
{ };

}

Ultima modifica di Nalim83 : 19-09-2008 alle 15:05.
Nalim83 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2008, 15:23   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Nalim83 Guarda i messaggi
Ora devo farti qualche domanda:
1. char[] è un tipo ossia per dire che voglio un array di char devo mettere char[] e non char soltanto.
Ma non avevi detto di aver già letto questo link che ti avevo postato?
Non conto mica balle io : lì c'è tutto quello che serve sapere sugli array in Java, anche la risposta alla tua domanda.

Quote:
Originariamente inviato da Nalim83 Guarda i messaggi
2. Ho solo un problema sul metodo ricercabinaria: deve prendere l'array in input e il carattere da comparare e deve dare come output vero o falso.
la variabile key data in input dove devo dichiararla?
(non so se sono stato chiaro)
Do per scontato che il metodo "ricercaBinaria" sia un metodo della classe Esercizio.
Stabilito questo, dato che la classe Esercizio riceve già l'array sul quale effettuare la ricerca tramite il suo costruttore, il metodo "ricercaBinaria" essendo un metodo definito nella classe Esercizio non ha bisogno di riceverlo nuovamente come parametro, usa quello già presente nella classe.
L'unico parametro in ingresso di cui ha bisogno è il carattere da cercare.
Assumo che "ricercaBinaria" debba restituire l'indice nell'array nel quale viene trovato l'elemento richiesto.

Continuando a espandere il codice postato prima mi trovo in questa situazione:
Codice:
//classe
public class Esercizio
{
    private char[] charArray;
    
    public Esercizio(char[] data)
    {
        charArray = data;
    }
    
    public int ricercaBinaria(char c)
    {
         // implementazione ricerca binaria
         // ...
         // e return del risultato (l'indice nell'array che va da 0 a N)
         // se non presente torno -1
    }
}
Esempio di utilizzo della classe (assumiamo ti trovarci nel metodo main della classe che istanzierà e userà Esercizio):
Codice:
public static void main(String args[])
{
    // creo un array di caratteri su cui effettuare la ricerca
    // e un carattere da cercare.
    char[] charSequence = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
    char key = 'e';

    // uso un oggetto di tipo Esercizio per:
    // scoprire se il carattere da cercare è presente;
    // quindi trovarne la posizione nell'array;
    Esercizio es = new Esercizio(charSequence);
    
    int keyIndex = es.ricercaBinaria(key);
    if (keyIndex != -1)
    {
        System.out.println("il carattere cercato: " + key + " è presente");
        System.out.println("in posizione: " + keyIndex + ".");
    }
    else
    {
        System.out.println("il carattere cercato: " + key + " non è presente.");
    }
}
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 19-09-2008 alle 17:36. Motivo: errore nel codice
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2008, 16:09   #7
Nalim83
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 412
ho letto nel link che per creare un vettore


anArray = new int[10]; // allocates memory for 10 integers


come mai non non l'abbiamo fatto??

ossia non abbiamo usato la struttura NEW TIPO[dimensione]

Ultima modifica di Nalim83 : 19-09-2008 alle 16:16.
Nalim83 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2008, 16:45   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Guarda, ci sono due modi per allocare gli array (entrambi spiegati nel link).
1] Puoi, come hai giustamente detto, dichiarare un array specificando esplicitamente la dimensione dell'array, con la notazione:
Codice:
// dichiara una reference a un array di char
// nota bene: l'array non esiste ancora, questo codice crea solo un riferimento 
// a un array di caratteri, non l'array
char[] charArray;
In questo caso si deve poi creare l'array vero e proprio e associarlo al riferimento:
Codice:
// crea un array di char di lunghezza 10 e lo associa al riferimento
charArray = new char[10];
posso anche "sintetizzare" queste due istruzioni scrivendole in forma compatta:
Codice:
char[] charArray = new char[10];
Ora la mia variabile "charArray" è un riferimento ad un array di caratteri di lunghezza 10. Bene, mettiamoci dentro dieci caratteri:
Codice:
// opzione 1: inserisco i caratteri uno alla volta
charArray[0] = 'a';
charArray[1] = 'a';
charArray[2] = 'a';
charArray[3] = 'a';
charArray[4] = 'a';
charArray[5] = 'a';
charArray[6] = 'a';
charArray[7] = 'a';
charArray[8] = 'a';
charArray[9] = 'a';

// opzione 2: inserico i caratteri tramite un ciclo for
// notare l'uso del membro "lenght": è un intero contenente il numero di
// elementi (la lunghezza) dell'array
for (int i = 0; i < charArray.lenght; i++)
{
    charArray[i] = 'a';
}

2] Come alternativa posso usare questa notazione per creare l'array: in questo caso il compilatore desume la lunghezza dell'array dal numero di elementi racchiusi tra le parentesi {}. Questa è anche la notazione che ho usato nel mio post sopra, e come vedi l'operatore new non viene esplicitato, però viene comunque allocato un array di 10 char. Inoltre gli elementi sono già inizializzati al valore corrispondente esplicitato:
Codice:
// il compilatore deduce la lunghezza dell'array dal numero di 
// elementi inizializzati
char[] charArray = {'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'};
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 19-09-2008 alle 16:52.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2008, 08:53   #9
Nalim83
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 412
continuo a ringraziarti e a chiederti info.


Come abbiamo svolto l'esercizio (se non ho capito male) abbiamo due classi, una dove ho il main e chiedo in input i valori del vettore e mi creo il vettore e la seconda classe nella quale passo il vettore gia costruito e gli applico i metodi. Ossia in un'unica classe devo caricare il vettore e applicare i metodi. Se si come diventerebbe?

Sarebbe possibile creare un'unica classe che faccia quello che fanno le due classi separate?
Tutto in un'unica classe


Ossia devo creare un'unica classe che carichi il vettore e che attraverso 4 metodi faccia:
1.trovi il minimo valore del vettore, 2.ordini il vettore, 3.trovi il valore centrale del vettore 4. faccia la ricerca binaria.


Questa è la classe esercizio, come diventerebbe se dovessi nella stessa classe dovessi caricare il vettore e applicare i metodi?


//creo la classe Esercizio

public class Esercizio

{

//definizione di campi
private char[] a ;

//costruttore
public esercizio (char [] vett)
{
a = vett;
}


// definizione di metodi

// il metodo deve restituire un intero che indichi la posizione del valore minore del vettore
public int minlista ()
{}

// il metodo deve restituire lo stesso vettore ma con i valori ordinati dal più piccolo al più grande
public void ordinamento ()
{}

// il metodo deve restituire un intero che contenga la posizione del valore centrale
public int valorecentrale ()
{}


// il metodo deve riceve come paramentro in input un valore n, e dare come risultato un intero che indichi la posizione del valore n nel vettore
public int ricercabinaria (char c)
{}

}





Grazie ancora

Ultima modifica di Nalim83 : 21-09-2008 alle 17:11.
Nalim83 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2008, 11:14   #10
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Sì sì....possibilissimo!!!

Basta andare contro il paradigma della programmazione ad oggetti e scoprirai che riuscirai a mettere anche tutto nel main!!!!!!!!!!!
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2008, 09:31   #11
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Certamente puoi "collassare" tutto in un unica classe, se questo è quello che devi fare:
Codice:
public class Esercizio
{
    private char[] charArray;
     
    public Esercizio (char [] inputArray)
    {
        charArray = inputArray;
    }
    
    // torna l'indice dell'elemento di valore minore contenuto in charArray
    public int minlista ()
    {
         // ...implementazione
    }

    // ordina charArray mediante un algoritmo di ordinamento
    public void ordinamento ()
    {
        // ...implementazione algoritmo di ordinamento
    }

    // restituisce il valore dell'elemento centrale di charArray
    public int valoreCentrale ()
    {
         // ...implementazione: deve gestire il fatto che charArray può avere
         // ...un unmero totale di elementi pari o dispari
    }

    // restiuisce l'indice del'elemento cercato 
    // oppure -1 se tale elemento non è presente
    public int ricercaBinaria (char c)
    {
        // ...implementazione della ricerca binaria
    }

    // entry-point dell'applicazione:
    public static void main(String[] args)
    {
         char[] charSequence = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
         char key = 'e';

         Esercizio es = new Esercizio(charSequence);
         int keyIndex = es.ricercaBinaria(key);

         if (keyIndex != -1)
         {
             System.out.println("il carattere cercato: " + key + " è presente");
             System.out.println("in posizione: " + keyIndex + ".");
         }
         else
         {
             System.out.println("il carattere cercato: " + key + " non è presente.");
         }
    }
}
Certo non è molto object oriented, ma forse sono altri aspetti quelli su cui state studiando in questo momento.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2008, 10:01   #12
Nalim83
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 412
ossia al posto di creare due classi ne creo solo una e inserisco nella classe il main, alla fine non cambia nulla.
Ma cmq mi consiglio sempre di fare due classi vero?

Continuo a ringraziarti
e sicuramente ti darò fastidio altre volte



GRAZIE
Nalim83 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2008, 11:25   #13
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Nalim83 Guarda i messaggi
Ma cmq mi consigli sempre di fare due classi vero?
Io ti consiglio di sì. La logica dell'approccio sarebbe questa:
- Una classe rappresenta la struttura dati e gli algoritmi correlati (class Esercizio è formata da una struttura dati, al momento un array di char, e da un insieme di metodi che sanno come operare in modo coerente sulla struttura dati in questione. Tali metodi, come ad esempio quello di ricerca e quello di ordinamento, sono gli algoritmi);
- Un'altra classe funge da entry-point dell'applicazione e rappresenta un caso di utenza della classe Esercizio: crea un oggetto Esercizio inserendo un set di dati, poi chiede ad Esercizio di eseguire delle operazioni su quel set di dati.

Volendo astrarre ulteriormente: l'inserimento dei dati in Esercizio dovrebbe essere compito di un'altra classe, che li legge da una fonte (database, file di testo, tastiera o altro).

Inoltre nota che metodi di class Esercizio quali "ordinamento()" potrebbero essere implementati in più di una maniera: potresti voler ordinare usando un algoritmo tipo Insertion-Sort quando nell'array hai un numero di elementi piccoli, oltre una certa soglia potresti volere usare invece un Merge-Sort (è solo un esempio).

Molto semplicisticamente, più vuoi rendere capace e versatile il tuo "sistema" più diventa necessario e utile astrarre e modularizzare l'implementazione sotto forma di codice; Java è orientato agli oggetti, quindi bisognerebbe tenere da conto questa sua predisposizone e programmare in aderenza con questo paradigma.

Quote:
Continuo a ringraziarti
e sicuramente ti darò fastidio altre volte
Prego.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2008, 11:38   #14
Nalim83
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 412
perfetto
Nalim83 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2008, 15:52   #15
Nalim83
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 412
New Esercizio

Data una classe Java, Binario, per la rappresentazione di un numero in formato binario (base2), fornire la realizzazzione di un suo metodo, compare, che ha come parametro formale un oggetto di tipo Binario e restituisce 0 (risp. 1) se il numero binario rappresentato dal parametro implicito è maggiore (risp. minore) del numero binario rappresentato dal parametro formale.


/* Classe */
public class Binario
{

/*campi*/
private int valore;


/*costruttore*/
public Binario (int numero)
{
this.valore= numero;
}

/*metodo compare*/
public char compare (int dato)
{
if ()

else



}



}





Mi daresti una mano a svolgere questo esercizio???

Ultima modifica di Nalim83 : 22-09-2008 alle 16:16.
Nalim83 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2008, 17:05   #16
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Ok.

Come spunto parto dalla bozza di codice che hai postato (ho tolto i commenti e identato il codice):
Codice:
public class Binario
{
    private int valore;

    public Binario (int numero)
    {
        this.valore= numero;
    }

    public char compare (int dato)
    {
        if ()
        else
    }
}
Il testo dell'esercizio era questo, evidenzio alcuni punti:
Quote:
Data una classe Java, Binario, per la rappresentazione di un numero in formato binario (base2), fornire la realizzazzione di un suo metodo, compare, che ha come parametro formale un oggetto di tipo Binario e restituisce 0 (risp. 1) se il numero binario rappresentato dal parametro implicito è maggiore (risp. minore) del numero binario rappresentato dal parametro formale.
1) Leggendo il testo dell'esercizio, in particolare la parte evidenziata in grassetto, e confrontando quindi la richiesta del testo con la definizione del metodo "compare" nella bozza del codice si nota un errore.
Riesci a correggerlo?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2008, 20:56   #17
Nalim83
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 412
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Ok.

Come spunto parto dalla bozza di codice che hai postato (ho tolto i commenti e identato il codice):
Codice:
public class Binario
{
    private int valore;

    public Binario (int numero)
    {
        this.valore= numero;
    }

    public char compare (int dato)
    {
        if ()
        else
    }
}
Il testo dell'esercizio era questo, evidenzio alcuni punti:


1) Leggendo il testo dell'esercizio, in particolare la parte evidenziata in grassetto, e confrontando quindi la richiesta del testo con la definizione del metodo "compare" nella bozza del codice si nota un errore.
Riesci a correggerlo?

Si sapevo di aver sbagliato ma non sapevo come fare.
In questo modo secondo te va bene?
Ho creato un nuovo oggetto denominato es e l'ho messo come parametro formale.



public class Binario
{
private int valore;

public Binario (int numero)
{
this.valore= numero;
}

//ho creato un oggetto con l'ausilio della classe Binario
Binario es = new Binario(2);

public char compare (Binario es)
{
if ()
else


}
}

Ultima modifica di Nalim83 : 22-09-2008 alle 21:10.
Nalim83 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2008, 08:54   #18
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Prima di tutto una puntualizzazione: quando devi postare del codice sarebbe auspicabile che tu lo racchiudessi tra i tag "["CODE"]" "["/CODE"]" (le virgolette non vanno messe, le ho aggiunte io).
In questo modo viene mantenuta l'identazione del codice e risulta più agevole leggerlo.

Quote:
Originariamente inviato da Nalim83 Guarda i messaggi
Si sapevo di aver sbagliato ma non sapevo come fare.
In questo modo secondo te va bene?
Ho creato un nuovo oggetto denominato es e l'ho messo come parametro formale.
Continuo a integrare il codice con la tua aggiunta:
Codice:
public class Binario
{
    private int valore;

    public Binario (int numero)
    {
        this.valore= numero;
    }

    //ho creato un oggetto con l'ausilio della classe Binario
    Binario es = new Binario(2);

    public char compare (Binario es)
    {
        // da implementare...
        // if ()
        // else
    }
}
Dunque fermiamoci un attimo a ragionare.
Il testo richiedeva di realizzare un metodo chiamato "compare" nella classe Binario. Fin qui ci siamo. Ii testo dice anche che questo metodo deve accettare come parametro formale un oggetto di tipo Binario. E questo l'hai corretto nel tuo ultimo post, dato che prima avevi messo come parametro formale un tipo int.
La parte in grassetto nero, va bene dunque.

Il problema mi sembra l'aggiunta in grassetto blu.
Per essere precisi, dal punto di vista della sintassi non è un errore, ma credo proprio che lo sia dal punto di vista della semantica.
La domanda è: perchè adesso la classe Binario ha bisogno di avere come membro di classe un oggetto di tipo Binario?
Cioè, perchè hai pensato di dover aggiungere la riga in blu?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2008, 09:15   #19
Nalim83
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 412
ho deciso di inserire la riga in blu perchè ho creato un oggetto di tipo Binario denominato es.
La traccia mi diceva :
Data una classe Java, Binario, per la rappresentazione di un numero in formato binario (base2), fornire la realizzazzione di un suo metodo, compare, che ha come parametro formale un oggetto di tipo Binario e restituisce 0 (risp. 1) se il numero binario rappresentato dal parametro implicito è maggiore (risp. minore) del numero binario rappresentato dal parametro formale.

L'oggetto di tipo Binario da utilizzare come parametro formale non bisogna crearlo con la stringa

Binario es = new Binario(2);


Ossia in questo modo io ho creato un oggetto della classe Binario o sbaglio?
Nalim83 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2008, 09:43   #20
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Nalim83 Guarda i messaggi
Ossia in questo modo io ho creato un oggetto della classe Binario o sbaglio?
Sì, con quella riga tu hai istanziato un oggetto di tipo Binario.
Ma il problema non è questo, leggi sotto.

Quote:
Originariamente inviato da Nalim83 Guarda i messaggi
L'oggetto di tipo Binario da utilizzare come parametro formale non bisogna crearlo con la stringa:

Binario es = new Binario(2);
Sì, ovviamente l'oggetto che verrà passato come parametro al metodo "compare" andrà creato da qualche parte nell'applicazione.
L'errore sta appunto nel fatto che tu lo crei dentro la classe Binario stessa.
Invece gli oggetti di tipo Binario verranno creati e usati da qualche altra parte dell'applicazione, e sarà in quel contesto che il metodo "compare" riceverà un oggetto Binario.

Facciamo un esempio. Supponiamo che la classe Binario sia completa e funzionante. Vediamo come potrebbero essere usati gli oggetti di tipo Binario.
La classe Main è l'entry-point dell'applicazione; al suo interno crea due oggetti di tipo Binario e confronta il primo con il secondo tramite il metodo "compare":
Codice:
public class Main
{
    public static void main(String[] args)
    {
        // crea due oggetti Binario, con i valori 1 e 2
        Binario bin1 = new Binario(1);
        Binario bin2 = new Binario(2);
        
        System.out.println("Confronto tra bin1 e bin2");
        
        // compare() torna 0 se bin2 è il maggiore, altrimenti torna 1
        int risultato = bin1.compare(bin2);
        
        if (risultato == 0)
        {
             System.out.println("bin1 è maggiore di bin2");
        }
        else
        {
             System.out.println("bin1 è minore di bin 2");
        }
    }
}
Ecco, come vedi è la classe Main che crea e usa gli oggetti di tipo Binario.
La classe Binario ha solo la responsabilità di definire le proprietà e i comportamenti che un qualsiasi oggetto Binario (si dice "istanza" della classe Binario) deve possedere.

Nel nostro caso, per come abbiamo definito la classe, Binario contiene un valore di tipo int, una sua istanza viene costruita passando un valore int al costruttore e può essere confrontata con un'altra istanza di tipo Binario mediante il metodo "compare".

Fino a qui è tutto chiaro?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:26.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v