Pages: [1]   Go Down
Print
Author Topic: AIUTO LABORATORIO  (Read 2564 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« on: 23-02-2009, 11:57:27 »

A:
Code:
public abstract class A
  {
  protected int x;
    public A(int x)
      {
      this.x=x;
      }
    public abstract int f();
  }
B:
Code:
public 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 d)
      {
      return (int)(d.getZ()+this.d.getZ());
      }
  }
C:
Code:
public class C extends B
     {
     public C(int x,int y,double z)
     { 
     super(x,y,z);
     }
   public int f()
     {
     return 7*this.y;
     }
   }
D:
Code:
public class D
   {
   private double z;
     public D(double z)
       {
       this.z=z;
       }
     public double getZ()
       {
       return z;
       }
     }
Main:
Code:
import java.util.Random;
public class principale
  {
public static void main(String [] args)
   {
 Random r = new Random (6353433);
A [] vett = new A [100];
   int i=0;
   A [] f = new A [100];
   int a=0;
   int somma=0;
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=0;
for(i=0;i<vett.length;i++)
{
somma+=vett[i].f();
}
System.out.println(somma);
somma=0;
for(i=0;i<vett.length;i++)
{
A[i]=new A(r.nextInt(47));
somma+=vett[i].f(A[i]);
}
System.out.println(somma);
}
}
Mi dà questi errori:principale.java:28: cannot find symbol
symbol  : variable A
location: class principale
A=new A(r.nextInt(47));
^
principale.java:28: A is abstract; cannot be instantiated
A=new A(r.nextInt(47));
     ^
principale.java:29: cannot find symbol
symbol  : variable A
location: class principale
somma+=vett.f(A);
                 ^
principale.java:29: inconvertible types
found   : <nulltype>
required: int
somma+=vett.f(A);
                ^
4 errors
>Exit code: 1
Logged

zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #1 on: 23-02-2009, 12:02:57 »

  allora..Guardando il main:
1) Non devi dichiarare di nuovo la stessa matrice, quindi elimina:
Code:
A [] f = new A [100];
2) f(obj) è un metodo definito in D non in A, quindi:
NON COSI'
Code:
A[i]=new A(r.nextInt(47));
somma+=vett[i].f(A[i]);
MA
Code:
D obj = new D(r.nextInt(47));
somma += ((B)vett[i]).f(obj);
Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #2 on: 23-02-2009, 12:14:58 »

grazie zeloto ma alla fine quando devo contare le istanze di classe B mi dice 100 invece sono 44!io ho messo così
Code:
import java.util.Random;
public class principale
  {
public static void main(String [] args)
   {
 Random r = new Random (6353433);
A [] vett = new A [100];
   int i=0;
   int cont=0;
   //A [] f = new A [100];
   int a=0;
   int somma=0;
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=0;
for(i=0;i<vett.length;i++)
{
somma+=vett[i].f();
}
System.out.println(somma);
somma=0;
for(i=0;i<vett.length;i++)
{
D obj = new D(r.nextInt(47));
somma += ((B)vett[i]).f(obj);
}
System.out.println(somma);
for(i=0;i<vett.length;i++)
  {
  if(vett[i] instanceof D)
    cont++;
  }
System.out.println(cont);
}
}
Logged

Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #3 on: 23-02-2009, 12:19:00 »

dov'è che conti le istanze di B?io vedo D scritto..cmq in ogni caso se tu scrivi
Code:
if(vett[i] instanceof B)
non ti risulta 44 perchè gli oggetti di classe C sono anche di classe B visto che C eredita da B..quindi devi controllare sia che l'istanza sia di classe B ma anche che NON SIA di classe 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.
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #4 on: 23-02-2009, 12:25:50 »

quando metto vett instance of B mi risulta 100  evil
Logged

Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #5 on: 23-02-2009, 12:37:43 »

ma infatti non hai capito ciò che ho detto prima 
devi mettere:
Code:
if((vett[i] instanceof B)&&!(vett[i] instance of 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.
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #6 on: 23-02-2009, 12:42:59 »

Risultato,grazie
Logged

Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #7 on: 23-02-2009, 12:45:21 »

 ok
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.
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #8 on: 23-02-2009, 13:39:51 »

Comunque in questo caso basta mettere solamente
Code:
if (!(vett[i] instanceof C))
Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #9 on: 23-02-2009, 14:43:23 »

bè si perchè A è abstract e non ha oggetti propri...però in generale meglio seguire la normale pratica per evitare di sbagliare..
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.
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #10 on: 23-02-2009, 14:59:57 »

Vabbè si era per "eleganza" LOL  I
Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
Pages: [1]   Go Up
Print
Jump to: