Pages: [1] 2   Go Down
Print
Author Topic: Aiuto! Esercizio di laboratorio!!!  (Read 2960 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« on: 27-01-2009, 22:00:59 »

Vi ringrazio in anticipo per l'aiuto... posto il codice dell'esercizio svolto da me (le classi A, B, C, D si trovano in altri file, tutte ben funzionanti):
Code:
import java.util.*;

public class Laboratorio
{
public static void main (String[] args)
{
int i;
Random r = new Random (6353433);
A [] vett = new A [100];
for (i=0; i<vett.length; i++)
{
int x = r.nextInt(10);
int y = r.nextInt(100);
int z = r.nextInt(30);
if (r.nextInt(2)==1) vett[i] = new B(x, y, z);
else vett[i] = new C(x, y, z);
}

D [] d = new D [vett.length];
int Sommaf = 0, Sommafobj = 0, istanzediB = 0;
i=0;

while (i<vett.length)
{
Sommaf += vett[i].f();

d[i] = new D(r.nextInt(47));

Sommafobj += vett[i].f(d[i]);

if ((vett[i] instanceof B) && (!(vett[i] instanceof C)))
istanzediB ++;

i++;
}

System.out.println("Risultati :" + Sommaf +",\t"+ Sommafobj+",\t"+ istanzediB);
}
}

Ora puntiamo l'attenzione sulla stringa maledetta:
Code:
Sommafobj += vett[i].f(d[i]);

Questo è il messaggio d'errore al riguardo:
Code:
>javac Laboratorio.java
Laboratorio.java:29: f() in A cannot be applied to (D)
Sommafobj += vett[i].f(d[i]);
                    ^
Laboratorio.java:29: inconvertible types
found   : <nulltype>
required: int
Sommafobj += vett[i].f(d[i]);
                      ^
2 errors
>Exit code: 1

Per me è tutto ok!!! Cosa ha che non và!?!?
« Last Edit: 27-01-2009, 22:03:29 by Stai Zitto » Logged
MIC
Matricola
*
Offline Offline

Posts: 15


« Reply #1 on: 27-01-2009, 23:10:03 »

fai un cast a B e vedi che funziona

io personalmente quel punto l'ho fatto così:
Code:
int sumF=0;
for(int i=0; i<vett.length; i++)
{
D obj=new D(r.nextInt(47));
sumF+=((B)vett[i]).f(obj);
}

Logged
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #2 on: 28-01-2009, 15:52:00 »

Non ha molto senso questa cosa secondo me... se faccio il cast non mi cambia anche i metodi? oppure sbaglio?
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #3 on: 28-01-2009, 16:07:21 »

in che senso cambia i metodi?il metodo f(obj) si trova solamente nella classe B quindi per poterlo invocare da un riferimento alla superclasse bisogna fare il casting così come ha scritto MIC..
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #4 on: 28-01-2009, 16:15:50 »

No, il metodo viene ereditato anche da c, dico bene?
Il problema (secondo me) è che se castiamo cambiamo il contenuto dei metodi, cioè tutti gli vett[ i ] farebbero quello che è scritto in B, e non in C.
Non se sono sicuro, è un'ipotesi...

Qualche luminare ci illumini per favore!!!

EDIT:
Ho fatto il cast, ora la stinga è questa:
Code:
Sommafobj += ((B)(vett[i])).f(d[i]);
e mi funziona.... però non capisco perchè fare questo cast.... qualcuno può illuminare il mio buio?
« Last Edit: 28-01-2009, 16:26:19 by Stai Zitto » Logged
andreacannella
Administrator
Forumista Esperto
*****
Offline Offline

Gender: Male
Posts: 1.488


Andea Cannella - www.andreacannella.com


WWW
« Reply #5 on: 29-01-2009, 16:38:44 »

Caro collega, il casting va fatto in quanto l'array che ti sei creato con il codice fornito nel testo della prova è un array di oggetti di classe A.
Il metodo f con parametri è previsto SOLTANTO per oggetti di classe B. Eccoti spiegato il motivo del casting a B.
Spero di averti "illuminato"...
Cheesy:D

Buona giornata

 ciao ciao
Logged

Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall)

Good times for a change
See, the luck I've had
Can make a good man
Turn bad

So please, please, please
Let me, let me, let me
Let me get what I want
This time

The Smiths
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #6 on: 29-01-2009, 18:45:17 »

Ho compreso... ma in parte!
C non è l'estenzione di B? Quindi non dovrebbe aver ereditato anche lui quel metodo?
Logged
andreacannella
Administrator
Forumista Esperto
*****
Offline Offline

Gender: Male
Posts: 1.488


Andea Cannella - www.andreacannella.com


WWW
« Reply #7 on: 29-01-2009, 18:49:13 »

Il vettore è dichiarato di oggetti di classe A, quindi non può avere il metodo di cui stiamo parlando.
Se fosse stato un vettore di C avresti avuto ragione...
Logged

Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall)

Good times for a change
See, the luck I've had
Can make a good man
Turn bad

So please, please, please
Let me, let me, let me
Let me get what I want
This time

The Smiths
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #8 on: 29-01-2009, 19:00:07 »

mmm ancora non comprendo... L'array è di A, ma ogni ogni elemento dell'array non assegniamo un B o un C?
O forse ogni elemento è un A che fà riferimento ad un B o un C?

........ LUCEE!!! LUCEEEE!!! [Emoticon] Asd
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #9 on: 29-01-2009, 19:01:47 »

Essendo l'array di A i riferimenti sono di classe A anche se puntano ad oggetti di classe B o C...
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
andreacannella
Administrator
Forumista Esperto
*****
Offline Offline

Gender: Male
Posts: 1.488


Andea Cannella - www.andreacannella.com


WWW
« Reply #10 on: 29-01-2009, 19:15:49 »

Brava Viviana!
Finalmente una che ha compreso quello che volevo dire a StaiZitto...
Logged

Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall)

Good times for a change
See, the luck I've had
Can make a good man
Turn bad

So please, please, please
Let me, let me, let me
Let me get what I want
This time

The Smiths
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #11 on: 29-01-2009, 19:19:46 »

Bè ho cercato di spiegarglielo anch'io...speriamo che adesso sia chiaro 
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
andreacannella
Administrator
Forumista Esperto
*****
Offline Offline

Gender: Male
Posts: 1.488


Andea Cannella - www.andreacannella.com


WWW
« Reply #12 on: 29-01-2009, 19:31:27 »

Non credo.....Cheesy ma quantomeno non scriverà più...
Cheesy:D
asd
Logged

Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall)

Good times for a change
See, the luck I've had
Can make a good man
Turn bad

So please, please, please
Let me, let me, let me
Let me get what I want
This time

The Smiths
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #13 on: 29-01-2009, 19:38:45 »

 [Emoticon] Asd
No dai è giusto che si chiarisce i dubbi...
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #14 on: 29-01-2009, 20:58:18 »

Non credo.....Cheesy ma quantomeno non scriverà più...
Cheesy:D
asd

Mi dispiace, non è così facile zittirmi! XD
Non ho ancora capito al 100%, vabbè mi limiterò a credere in fede e a rileggere 21342352 di volte gli appunti per capire.
Bye bye e grazie!
Logged
Pages: [1] 2   Go Up
Print
Jump to: