Pages: 1 [2]   Go Down
Print
Author Topic: Dubbi esistenziali  (Read 2161 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #15 on: 07-03-2011, 21:52:44 »

allora...è e.getCoeff() nel metodo, non E.getCoeff() sennò pare che è un metodo statico della classe, mentre in realtà non lo è. poi nel costruttore della classe E, devi scrivere coeff=(float)c xkè ovviamente devi assegnare un double a un float e devi castarlo xkè sennò ti indica la perdita di precisione. nel costruttore della classe C, il comando super() deve essere fatto come prima cosa, la teoria insegna che il richiamo del costruttore di una superclasse deve essere fatta come prima cosa. sia nella classe C che nella classe D, la w non è visibile perchè è privata alla loro classe madre, quindi devi utilizzare il metodo getW() appositamente messo li x poter essere usato proprio x questo. quindi ad esempio in f() della classe C dovresti scrivere return getW()+z; mentre nell'altro getW()*getW();
Logged

"Che la Forza sia con Te"
Jack&Daxter
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 398



« Reply #16 on: 08-03-2011, 01:42:00 »

Potreste dirmi dov'è che sbaglio?

Code:

import java.util.*;

public class main
{
public static void main(String [] args)
{
Random r = new Random(1772882);

A [] vett=new A[100];

for(int i=0;i<vett.length;i++)
{
int x=r.nextInt(10);
int w=r.nextInt(100);
double d=r.nextDouble()*40;
int z=r.nextInt(30);

if(r.nextInt(2)==1)
vett[i]=new C(x,w,d,z);
else
vett[i]=new D(x,w,d);
}

//somma

int somma=0;

for(int i=0;i<vett.length;i++)
{
somma+=vett[i].f();
}

System.out.println("La somma è:"+somma);

//numero di istanze C e D

int cont=0,cont1=0;

for(int i=0;i<vett.length;i++)
if(vett[i] instanceof C)
cont++;
else
cont1=0;


System.out.println("Le istanze C sono "+cont);
System.out.println("Le istanze D sono "+cont1);

//max di coeff

double max=0;

for(int i=0;i<vett.length;i++)
if(vett[i].getCoeff()>max)
max=vett[i].getCoeff();

System.out.println("Il max è: "+max);



}

}



abstract class A
{
private int x;

public A (int x)
{
this.x=x;
}

abstract public int f();

}

abstract class B extends A
{
static protected int totaleC;
private int w;
private E e;

public B(int x,int w,double d)
{
super(x);
this.w=w;
E e = new E(d);
}

public int getW()
{
return w;
}
public float getCoeff()
{
return (float)e.getCoeff();

}

static public int getTotaleC()
{
return totaleC;
}

abstract public int f();
}

class C extends B
{
private int z;

public C(int x,int w,double d,int z)
{
super(x,w,d);
totaleC++;
this.z=z;
}

public int f()
{
return getW()+z;
}
}

class D extends B
{
public D(int x,int w,double d)
{
super(x,w,d);
}
public int f()
{
return getW()*getW();
}
}

class E
{
private float coeff;

public E (double c)
{
coeff=(float)c;
}

public double getCoeff()
{
return coeff;
}

}

« Last Edit: 08-03-2011, 01:45:22 by salvopuglisi » Logged
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #17 on: 08-03-2011, 12:24:08 »

lo immaginavo che ci cascavi XD la variabile totaleC static serve proprio a contare il numero di istanze di C, quindi nn devi fare il contatore per quello. l'unico contatore che devi usare è x contare le istanze di D. il resto delle correzioni te le metto come commenti nel codice

Code:
public class main
{
public static void main(String [] args)
{
Random r = new Random(1772882);

A [] vett=new A[100];

for(int i=0;i<vett.length;i++)
{
int x=r.nextInt(10);
int w=r.nextInt(100);
double d=r.nextDouble()*40;
int z=r.nextInt(30);

if(r.nextInt(2)==1)
vett[i]=new C(x,w,d,z);
else
vett[i]=new D(x,w,d);
}

//somma

int somma=0;

for(int i=0;i<vett.length;i++)
{
somma+=vett[i].f();
}

System.out.println("La somma è:"+somma);

//numero di istanze C e D

int cont=0,cont1=0;

for(int i=0;i<vett.length;i++)
if(vett[i] instanceof C)  //qua metti instanceof D e togli quel cont1 a questo punto che nn serve a nulla
cont++;
else
cont1=0;


System.out.println("Le istanze C sono "+cont);
System.out.println("Le istanze D sono "+cont1);

//max di coeff

double max=0;

for(int i=0;i<vett.length;i++)
if(vett[i].getCoeff()>max)  //qui è ((B)vett[i]).getCoeff()   la classe A non vede il metodo dato che è implementato nella figlia B, quindi devi fare un cast forzato, ricordati che il vett parte come collezioni di oggetti A anche se poi in realtà puntano a oggetti di tipo C e D
max=vett[i].getCoeff();

System.out.println("Il max è: "+max);



}
Logged

"Che la Forza sia con Te"
Jack&Daxter
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 398



« Reply #18 on: 08-03-2011, 14:55:49 »

quindi l'if viene
Code:

if((B)vett[i].getCoeff()>max) ?


se è cosi mi da errore...

Poi scusa non capisco che senso ha castare vett, cioè proprio non mi entra in testa  perchè non l'ho castato anche quando ho fatto la somma?Insomma,Quando si casta ad un oggetto  ?
« Last Edit: 08-03-2011, 20:42:00 by salvopuglisi » Logged
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #19 on: 08-03-2011, 16:11:02 »

if((B)vett[ i].getCoeff()>max) non così ma:
if(((B)vett[i ]).getCoeff()>max)
sennò sintatticamente nn lo casta.
xkè la f() esiste come metodo astratto in A, mentre getCoeff() come vedi nn c'è.
Logged

"Che la Forza sia con Te"
Jack&Daxter
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 398



« Reply #20 on: 08-03-2011, 21:35:02 »

ragazzi ho fatto un altro esercizio ma non riesco a costruire un metodo....

Code:

abstract class A
{
protected int x;

public A(int x)
{
this.x=x;
}

abstract public int f();
}

class B extends A
{
protected int y;
private D d;

public  B(int x,int y,double z)
{
super(x);
this.y=y;
d=new D(z);
}

public int f()
{
return x*x;
}


public int f(D)
{
//Restituire la somma intera delle z dell'oggetto 'd' e del parametro

int somma=0;

// ???

return somma;

}

}

class C extends B
{
public C(int x,int y,double z)
{
super(x,y,z);
}
public int f()
{
return 7*y;
}
}

class D
{
private double z;

public D(double z)
{
this.z=z;
}

public double getZ()
{
return z;
}
}

Logged
Pages: 1 [2]   Go Up
Print
Jump to: