Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: atrix0ne on 23-02-2009, 11:57:27



Title: AIUTO LABORATORIO
Post by: atrix0ne 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


Title: Re:AIUTO LABORATORIO
Post by: zElOtO on 23-02-2009, 12:02:57
 .penso 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);


Title: Re:AIUTO LABORATORIO
Post by: atrix0ne 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);
}
}


Title: Re:AIUTO LABORATORIO
Post by: Vivynz 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


Title: Re:AIUTO LABORATORIO
Post by: atrix0ne on 23-02-2009, 12:25:50
quando metto vett instance of B mi risulta 100  >:)


Title: Re:AIUTO LABORATORIO
Post by: Vivynz on 23-02-2009, 12:37:43
ma infatti non hai capito ciò che ho detto prima  .smile
devi mettere:
Code:
if((vett[i] instanceof B)&&!(vett[i] instance of C))


Title: Re:AIUTO LABORATORIO
Post by: atrix0ne on 23-02-2009, 12:42:59
Risultato,grazie .applausi


Title: Re:AIUTO LABORATORIO
Post by: Vivynz on 23-02-2009, 12:45:21
 :-OK


Title: Re:AIUTO LABORATORIO
Post by: zElOtO on 23-02-2009, 13:39:51
Comunque in questo caso basta mettere solamente
Code:
if (!(vett[i] instanceof C))
.whistling


Title: Re:AIUTO LABORATORIO
Post by: Vivynz 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..


Title: Re:AIUTO LABORATORIO
Post by: zElOtO on 23-02-2009, 14:59:57
Vabbè si era per "eleganza" LOL  :-K