Pages: [1] 2   Go Down
Print
Author Topic: Aiuto Laboratorio  (Read 3768 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
TheRealKira
Apprendista Forumista
**
Offline Offline

Posts: 116


« on: 21-02-2009, 11:24:09 »

Sono sempre io XD. Allora ho provato a implementare le classi della prova di laboratorio di giorno 3 (penso sia del primo turno. Ma mi dà du problemi principali. Ecco come ho fatto:

Quote
abstract class A
{
   private int x;
   public A (int x)
   {
      this.x=x;
   }
   abstract public int f();
}

class E
{
   private float coeff;
   public E(double c)
   {
      coeff=(float)c;
   }
   public double getCoeff()
   {
      return (double)coeff;
   }
}
abstract class B extends A
{
   protected int totaleC;
   private int w;
   private E e;
   public B(int x, int w, double d)
   {
      totaleC=x;
      this.w=w;
      E e=new E(d);
   }
   public int getW()
   {
      return w;
   }
   public float getCoeff()
   {
      return (float)e.getCoeff();
   }
   public int getTotaleC()
   {
      return totaleC;
   }
}

class C extends B
{
   private int z;
   public C(int x, int w, double d, int z)
   {
      super(x,w,d);
      this.z=z;
   }
   
   public int f()
   {
      return w+z;
   }
}

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

Mi da un errore riguardo il costruttore di A. Inoltre (giustamente) mi dice che la w è private e non la posso utilizzare in C e D. Come ovviiare tale problema? Per favore chi ha fatto questo esercizio mi aiuta a capire gli errori? Thx!
Poi un'altra cosa, potete spiegarmi per favore come funziona Random (sia che fa che come si usa) e nextInt? E infine vorrei sapere se # nell'UML significa protected. Grazie ancora vi prego non mi odiate  ok
Logged
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #1 on: 21-02-2009, 11:26:59 »

La variabile w è private quindi devi utilizzare il metodo getW() che te la restituisce. E poi si, il # significa protected.   
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
TheRealKira
Apprendista Forumista
**
Offline Offline

Posts: 116


« Reply #2 on: 22-02-2009, 13:09:19 »

Grazie Zeloto, problema della w risolto. Ecco:
Quote
abstract class A
{
   private int x;
   public A (int x)
   {
      this.x=x;
   }
   abstract public int f();
}

class E
{
   private float coeff;
   public E(double c)
   {
      coeff=(float)c;
   }
   public double getCoeff()
   {
      return (double)coeff;
   }
}
abstract class B extends A
{
   protected int totaleC;
   private int w;
   private E e;
   public B(int x, int w, double d)
   {
      totaleC=x;
      this.w=w;
      E e=new E(d);
   }
   public int getW()
   {
      return w;
   }
   public float getCoeff()
   {
      return (float)e.getCoeff();
   }
   public int getTotaleC()
   {
      return totaleC;
   }
}

class C extends B
{
   private int z;
   public C(int x, int w, double d, int z)
   {
      super(x,w,d);
      this.z=z;
   }
   
   public int f()
   {
      int a;
      a=this.getW();
      return a+z;
   }
}

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

Ora l'unico errore che mi da è:

Quote
lab.java:30: cannot find symbol
symbol  : constructor A()
location: class A
   {
   ^
1 error

Mi spiegate perchè? E per Random e nextInt nessuno sa aiutarmi? T_T vi prego!
Logged
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #3 on: 22-02-2009, 13:20:15 »

Per il Random, nextInt ci sono moltissime guide, cerca in google.
Per il resto gettando un primo sguardo al codice, ho notato questi errori:

1) Nel costruttore della classe B manca il super, ecco come dovrebbe essere:
Code:
public B(int x, int w, double d) {
      super(x);
      this.w=w;
      E e=new E(d);
 }
2) Nella classe C e D setti il valore di getW() a una variabile, vorrei farti notare che non ce n'è di bisogno  nono
3) Nel costruttore della classe C devi incrementare il totaleC ogniqualvolta si crei un oggetto di classe C:
Code:
public C(int x, int w, double d, int z) {
  super(x,w,d);
  this.z=z;
  totaleC++;
}

Per il resto va bene fin'ora! 
« Last Edit: 22-02-2009, 13:24:05 by zElOtO » 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
TheRealKira
Apprendista Forumista
**
Offline Offline

Posts: 116


« Reply #4 on: 22-02-2009, 13:49:22 »

grazie mille!
Logged
•Black Angel•
Matricola
*
Offline Offline

Posts: 56



« Reply #5 on: 22-02-2009, 13:54:30 »

Quote
Sono sempre io XD. Allora ho provato a implementare le classi della prova di laboratorio di giorno 3 (penso sia del primo turno. Ma mi dà du problemi principali. Ecco come ho fatto:

sei sicuro che la prova di laboratorio è giorno 3?
Logged

Link Immagine

GlI aNgElI vEnGoNo, LaScIaNo Un'ImPrOnTa InDeLeBiLe NeLlA tUa ViTa E nEl TuO .. e VaNnO vIa PeR sEmPrE.. RoSaRiO sEmPrE qUi

♥ NoN e' MaI tR tArDi PeR eSsErE qUeLlO cHe AvReStI vOlUtO ♥
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #6 on: 22-02-2009, 14:01:23 »

Giorno 3 è il mio compleannooooo!! Comunque credo che ancora deve deciderlo il prof..Ma un'email no eh? Sempre io?  boh
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
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #7 on: 22-02-2009, 14:50:02 »

Quote
Sono sempre io XD. Allora ho provato a implementare le classi della prova di laboratorio di giorno 3 (penso sia del primo turno. Ma mi dà du problemi principali. Ecco come ho fatto:

sei sicuro che la prova di laboratorio è giorno 3?

Penso intenda la prova che c'è stata il 3 Febbraio!
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
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #8 on: 22-02-2009, 14:52:16 »

Comunque ho mandato una mail al prof per sapere quando sarà la prossima prova di laboratorio 
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
•Black Angel•
Matricola
*
Offline Offline

Posts: 56



« Reply #9 on: 22-02-2009, 14:54:31 »

Quote
Sono sempre io XD. Allora ho provato a implementare le classi della prova di laboratorio di giorno 3 (penso sia del primo turno. Ma mi dà du problemi principali. Ecco come ho fatto:

sei sicuro che la prova di laboratorio è giorno 3?

Penso intenda la prova che c'è stata il 3 Febbraio!

la prova è stata il 2 febbraio^^ x questo ho chiesto..  yoh
Logged

Link Immagine

GlI aNgElI vEnGoNo, LaScIaNo Un'ImPrOnTa InDeLeBiLe NeLlA tUa ViTa E nEl TuO .. e VaNnO vIa PeR sEmPrE.. RoSaRiO sEmPrE qUi

♥ NoN e' MaI tR tArDi PeR eSsErE qUeLlO cHe AvReStI vOlUtO ♥
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



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

Ah ecco  yoh Comunque credo ancora non si sappia la data..Speriamo il prof mi risponda..
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
TheRealKira
Apprendista Forumista
**
Offline Offline

Posts: 116


« Reply #11 on: 22-02-2009, 15:43:15 »

Quote
sei sicuro che la prova di laboratorio è giorno 3?

Si scusate intendevo il 2 febbraio. Errore mio XP.

Quote
Sempre io?

si ultimamente rompo abbastanza nel forum XD. cmq l'ultimo chiarimento e poi penso di aver eseguito l'esercizio. Questo è il main:

Quote
import java.util.*;
class lab2
{
   public static void main(String[] args)
   {
      B[] vett=new B[100];
      Random r=new Random(1772882);
      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=new C(x,w,d,z);
         else vett=new D(x,w,d);}
         int sommaF=0;
         float maxCoeff=0;
         int numC=0;
         int numD=0;
         for(int a=0;a<vett.length;a++){
            int f=vett[a].f();
            sommaF+=f;
            if(vett[a].getCoeff()>maxCoeff)
               maxCoeff=vett[a].getCoeff();
            if(vett[a] instanceof C) numC++;
            else if(vett[a] instanceof D) numD++;
         }
         System.out.println(sommaF);
         System.out.println(maxCoeff);
         System.out.println(numC);
         System.out.println(numD);
         
      }
   }
l'unico errore che mi da è il frammento:

Quote
if(vett[a].getCoeff()>maxCoeff)
               maxCoeff=vett[a].getCoeff();
compila ma all'esecuzione mi dice:

Quote
Exception in thread "main" java.lang.NullPointerException
   at B.getCoeff(lab.java:41)
   at lab2.main(lab2.java:22)
Sapete aiutarmi? Il resto del codice è apposto (sembra) perchè anche i risultati combaciano. Invece quel frammento mi genera l'errore
Logged
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #12 on: 22-02-2009, 21:26:27 »

Si devi fare il casting a B di vett[a]
Code:

if (vett[a] instanceof B) {
if (((B)vett[a]).getCoeff() > maxCoeff) { maxCoeff = ((B)vett[a]).getCoeff(); }
}

Essendo getCoeff() un metodo della classe B inanzitutto devi assicurarti che sia un'istanza di B; Dopodichè fai gli eventuali controlli!
 
« Last Edit: 22-02-2009, 21:28:28 by zElOtO » 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
TheRealKira
Apprendista Forumista
**
Offline Offline

Posts: 116


« Reply #13 on: 22-02-2009, 21:37:10 »

ma:
Quote
B[] vett=new B[100];

ho fatto il casting e rimesso A:
Quote
import java.util.*;
class lab2
{
   public static void main(String[] args)
   {
      A[] vett=new A[100];
      Random r=new Random(2245544);
      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=new C(x,w,d,z);
         else vett=new D(x,w,d);}
         int sommaF=0;
         float maxCoeff=0;
         int numC=0;
         int numD=0;
         for(int a=0;a<vett.length;a++){
            int f=vett[a].f();
            sommaF+=f;
            if(vett[a] instanceof B){
               if(((B)vett[a]).getCoeff()>maxCoeff){
                  maxCoeff=((B)vett[a]).getCoeff();}}
            if(vett[a] instanceof C) numC++;
            else if(vett[a] instanceof D) numD++;
         }
         System.out.println(sommaF);
         System.out.println(maxCoeff);
         System.out.println(numC);
         System.out.println(numD);
         
      }
   }
ma l'errore me lo da ancora... uffa....Zeloto ti prego illuminami *_*
Logged
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #14 on: 22-02-2009, 21:44:44 »

A prima vista il main sembra giusto, che errori ti da??
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] 2   Go Up
Print
Jump to: