Pages: [1]   Go Down
Print
Author Topic: Domande su terza prova  (Read 779 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Shides
Matricola
*
Offline Offline

Gender: Male
Posts: 47



« on: 27-02-2012, 20:00:17 »

Ragazzi, ultime domande per la terza prova:
 1)Si ipotizza che abbiamo la seguente situazione:
 <abstract>Prodotti
 Olio extends Prodotti
 <abstract>Vino extends Prodotti
 VinoBianco extends Vino
 Spumante extends VinoBianco
 VinoRosso extends Vino

 Quando dobbiamo inizializzare l'array in modo casuale i seguenti tranci di codice sono esatti?
 
Code:
//vett è un vettore di Prodotti
 vett[i] = new Olio(..);
 vett[i] = new VinoBianco(..);
 vett[i] = new VinoRosso(..);
 vett[i] = new Spumante(..);
Grazie!

 2)Considerata la situazione di prima, se voglio avere soltanto le istanze dei vini posso scrivere nel seguente modo?
Code:
if(vett[i] instanceof Vino)

 Oppure devo scrivere così?
 
Code:
if((vett[i] instanceof VinoBianco)||(vett[i] instanceof VinoRosso)||(vett[i] instanceof Spumante))
Grazie!

 3)(non so se la questione è stata già trattata) Quando chiede gli oggetti riordinati in base a qualcosa, senza clonarli dobbiamo fare un ciclo for che, sostanzialmente, fa questo lavoro:
Code:
for(int i=0; i<vett.length; i++)
 vett2[i] = vett[i];

 e successivamente lavorare su vett2 esatto? Wink Perchè dovrebbe copiare i riferimenti e noi non facciamo altro che sistemare i riferimenti..
 Grazie!

4)Spesso chiede una costante "c", il valore di questa gliela devo far passare al costruttore esatto? Smiley


Grazie! Smiley
« Last Edit: 11-03-2012, 19:48:40 by Shides » Logged
rEDTUNING
Matricola
*
Offline Offline

Gender: Male
Posts: 26


Siamo β-ridotti male


« Reply #1 on: 27-02-2012, 21:07:03 »

1)Si ipotizza che abbiamo la seguente situazione:
 <abstract>Prodotti
 Olio extends Prodotti
 <abstract>Vino extends Prodotti
 VinoBianco extends Vino
 Spumante extends VinoBianco
 VinoRosso extends Vino

 Quando dobbiamo inizializzare l'array in modo casuale i seguenti tranci di codice sono esatti?
 //vett è un vettore di Prodotti
 vett = new Olio(..);
 vett = new VinoBianco(..);
 vett = new VinoRosso(..);
 vett = new Spumante(..);
 Grazie!

Non ho ben capito che intendi per "tranci di codice"...comunque sia, se ti riferisci (sicuramente) all'esercizio dei prodotti agricoli il testo specifica: "Si fornisca un frammento di programma che descriva la creazione e l'inizializzazione casuale di una collezione di 30 prodotti". In modo casuale devi dire che tipo di oggetto creare in vett e inizializzarli con valori anch'essi casuali. Se guardi un pò di prove svolte della seconda prova c'è l'esempio che cerchi, nel pezzo di codice che mette il prof per l'inizializzazione casuale puoi capire come procedere.

Quote
2)Considerata la situazione di prima, se voglio avere soltanto le istanze dei vini posso scrivere nel seguente modo?
 if(vett instanceof Vino)

 Oppure devo scrivere così?
 if((vett instanceof VinoBianco)||(vett instanceof VinoRosso)||(vett instanceof Spumante))
 Grazie!
http://www.java2s.com/Tutorial/Java/0060__Operators/TheinstanceofKeyword.htm
Se guardi l'ultimo esempio
"Since a subclass 'is a' type of its superclass, the following if statement, where Child is a subclass of Parent, returns true."
Fa capire che se io ho una classe A e una classe B sottoclasse di A (quindi B extdens A), se creo un oggetto B

Code:
B oggetto = new B();

e faccio

Code:
if(oggetto istanceOf A)

esso ritornerà true. Per risponderti, se vuoi solo le istanze di Vini basta fare

Code:
if(vett[i] instanceof Vino)
in quanto VinoBianco, VinoRosso e spumante sono comunque gerarchicamente sottoclassi di Vino.

Code:
3)(non so se la questione è stata già trattata) Quando chiede gli oggetti riordinati in base a qualcosa, senza clonarli dobbiamo fare un ciclo for che, sostanzialmente, fa questo lavoro:
 for(int i=0; i<vett.length; i++)
 vett2 = vett;

 e successivamente lavorare su vett2 esatto? Wink Perchè dovrebbe copiare i riferimenti e noi non facciamo altro che sistemare i riferimenti..
 Grazie!

Sbaglio o dimentichi sempre l'indice negli array?  nono
Non so se la questione è stata trattata, se qualcuno ha una risposta precisa perfavore la scriva pure per me. A colpo d'occhio direi di si, tutti gli esecizi richiedono l'ordinamento in un array indipendente e senza clonare gli oggetti...quindi si, ma ripeto, se qualcuno ha una risposta sicura la dica perfavore

Quote
4)Spesso chiede una costante "c", il valore di questa gliela devo far passare al costruttore esatto? Smiley

Mmm non credo...se seguiamo il testo alla lettera dovremmo dichiarare C come una costante ("final" o considerato il fatto che su questa costante ci dobbiamo lavorare metterei un bel "protected final") e quindi assegnargli un valore costante.


Se qualcuno trova errori nelle mie considerazioni corregga, meglio saperle ora bene queste cose prima del test di domani  ciao
Logged

Vincenzo 'rEDTUNING' Greco

Se i compilatori potessero prendere vita mi prenderebbero a schiaffi per tutti gli errori che faccio.
Shides
Matricola
*
Offline Offline

Gender: Male
Posts: 47



« Reply #2 on: 27-02-2012, 21:14:21 »

Ciao, gli indici non li ha copiati e non so perchè  univ (avevo postato questo problema anche da un'altra parte)..
Per il punto 1 si, fai conto che li ci sia uno switch con i vari case Wink
Per il punto 2 grazie mille!  yoh
Per il punto 3 veniva giusto (se non ometteva gli indici xD) o comunque mi è stato suggerito di fare:
Code:
Prodotti vett2[] = vett;

Per quanto riguarda la costante sono un pò perplesso perchè penso che "ogni" oggetto abbia la sua costante e che quindi deve essere inizializzata con l'oggetto  testate testate

Logged
rEDTUNING
Matricola
*
Offline Offline

Gender: Male
Posts: 26


Siamo β-ridotti male


« Reply #3 on: 27-02-2012, 22:08:39 »

Per il secondo punto ti direi no perchè scrivendo

 
Code:
Prodotti vett2[] = vett;

Vai a far riferire a vett2 vett, quindi qualsiasi cosa fai su vett2 va a modificare vett e quindi vett2 non è un array indipendente come richiedeva il testo.

Il metodo corretto è farlo con il for come avevamo detto prima, in questo caso crei un array indipendenti e gli vai a mettere in ogni singola locazione la referenza alla locazione corrispondente dell'array principale. In questo modo se tocchi vett2 non vai a modificare vett.

Ti riporto un piccolo esempio per capire meglio. Se io ho:

Code:
class test{
private int n;
test(int n){
this.n = n;
}
public int getN(){
return n;
}
public void setN(int n){
this.n = n;
}
}

public class prova{

public static void main(String[] args){

test[] A = new test[5];

A[0] = new test(2);
A[1] = new test(1);
A[2] = new test(12);
A[3] = new test(7);
A[4] = new test(5);

for(int a = 0; a<A.length; a++){
System.out.print(A[a] .getN()+ " ");
}

test[] B = A;

System.out.print("\n");

for(int a = 0; a<B.length; a++){
System.out.print(B[a] .getN()+ " ");
}

B[0] = A[3];

System.out.print("\n");

for(int a = 0; a<B.length; a++){
System.out.print(B[a] .getN()+ " ");
}

System.out.print("\n");

for(int a = 0; a<A.length; a++){
System.out.print(A[a] .getN()+ " ");
}

}

}

L'output sarà:

Code:
2 1 12 7 5
2 1 12 7 5
7 1 12 7 5
7 1 12 7 5

quindi ecco la prova che se modifico B vado a cambiare pure A, ma se cambio il codice invece di test[] B = A; metto:
      
Code:
test[] B = new test[A.length];
for(int b = 0; b<B.length; b++)
      B[b] = A[b];

ecco che l'output è:

Code:
2 1 12 7 5
2 1 12 7 5
7 1 12 7 5
2 1 12 7 5

come possiamo vedere abbiamo modificato l'array B senza toccare l'array A.


Se c'è qualcuno che ha ultimi dubbi sull'istanceOf vi rimando a questo esempio interessante:
http://www.java-samples.com/showtutorial.php?tutorialid=332

Se c'è comunque qualcuno che chiarisce di preciso il quarto punto sarebbe cosa gradita 
Logged

Vincenzo 'rEDTUNING' Greco

Se i compilatori potessero prendere vita mi prenderebbero a schiaffi per tutti gli errori che faccio.
Pages: [1]   Go Up
Print
Jump to: