Pages: [1]   Go Down
Print
Author Topic: Esercizio programma Laboratorio  (Read 1201 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« on: 23-01-2009, 23:19:00 »

Ragazzi ho fatto l'esercizio di Laboratorio , ma mi da alcuni errori nel istanceof e nella classe Random, qualcuno potrebbe darmi una mano per risolverli?

qui di seguito l'intero esercizio di laboratorio

Code:
import java.io.*;
import java.math.*;
import java.lang.*;


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

int i;
        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);
        }
        }
       
       
       
        //Somma valori restituiti da f()
       
        int sommaF=0;
       
        for(i=0;i<vett.length;i++)
        {
        sommaF +=vett[i].f();
        }
       
        System.out.println("somma valori restituiti da f()"+sommaF);
       
       
       
        //somma valori di f(obj)
       
        int sommaB =0;
       
        for(i=0;i<vett.length;i++)
        {
        D altro = new D(r.nextInt(47));
        sommaB += ((B)vett[i].f(altro));
        }
       
        System.out.println("somma valori restituiti da f(obj)"+sommaB);
       
       
       
        //numero di istanze di classe B
       
        int contatore =0;
       
        for(i=0;i<vett.length;i++)
        {
        if(vett[i] istanceof B)
        {
        contatore++;
        }
        }
       
        System.out.println("Il numero di istance di classe B e':"+contatore);

}


}


abstract class A
{
protected int x;

public A(int _x)
{
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);
y=_y;
d=new D(_z);
}


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


public int f(D _d)
{
return (int)(d.getZ() + _d.getZ());
}
}



class D
{
private double z;

public D(double _z)
{
z=_z;
}

public double getZ()
{
return z;
}
}


class C extends B
{
public C(int _x,int _y,double _z)
{
super(_x,_y,_z);

}

public int f()
{
return (7*y);

}
}


Logged
fabliux
Guest
« Reply #1 on: 24-01-2009, 10:37:10 »

Ragazzi ho fatto l'esercizio di Laboratorio , ma mi da alcuni errori nel istanceof e nella classe Random, qualcuno potrebbe darmi una mano per risolverli?

qui di seguito l'intero esercizio di laboratorio

Code:
import java.io.*;
import java.math.*;
import java.lang.*;


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

int i;
        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);
        }
        }
       
       
       
        //Somma valori restituiti da f()
       
        int sommaF=0;
       
        for(i=0;i<vett.length;i++)
        {
        sommaF +=vett[i].f();
        }
       
        System.out.println("somma valori restituiti da f()"+sommaF);
       
       
       
        //somma valori di f(obj)
       
        int sommaB =0;
       
        for(i=0;i<vett.length;i++)
        {
        D altro = new D(r.nextInt(47));
        sommaB += ((B)vett[i].f(altro));
        }
       
        System.out.println("somma valori restituiti da f(obj)"+sommaB);
       
       
       
        //numero di istanze di classe B
       
        int contatore =0;
       
        for(i=0;i<vett.length;i++)
        {
        if(vett[i] istanceof B)
        {
        contatore++;
        }
        }
       
        System.out.println("Il numero di istance di classe B e':"+contatore);

}


}


abstract class A
{
protected int x;

public A(int _x)
{
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);
y=_y;
d=new D(_z);
}


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


public int f(D _d)
{
return (int)(d.getZ() + _d.getZ());
}
}



class D
{
private double z;

public D(double _z)
{
z=_z;
}

public double getZ()
{
return z;
}
}


class C extends B
{
public C(int _x,int _y,double _z)
{
super(_x,_y,_z);

}

public int f()
{
return (7*y);

}
}



Modifica il tuo "istanceof"   CON  "instaceof" e vedrai ke andrà..........
Logged
Stardust
Apprendista Forumista
**
Offline Offline

Posts: 450


L'amore è attesa di una gioia che qnd arrva annoia


« Reply #2 on: 06-03-2011, 16:43:51 »

perchè su somma valori di f(obj) si fa il cast cn B???
Logged

L'acqua ni vagna...u ventu n'asciuca e... u RUM e PERA n'aiutaaaa...
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #3 on: 06-03-2011, 21:46:04 »

se ci fai caso B ha sia il metodo f() che f(D) mentre C ha solo f() quindi vuol dire che se il vett[i ] nel main punta a C, nn lo può vedere quel metodo col parametro D in entrata, xkè nella classe madre A il metodo astratto esiste solo come f() cioè senza parametro, quindi è possibile operare cn quel metodo solo quando vett[i ] punta a B,e bisogna forzare il cast perchè non esiste quel metodo in A, nemmeno astratto
Logged

"Che la Forza sia con Te"
Pages: [1]   Go Up
Print
Jump to: