Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Jimmy93 on 01-02-2013, 11:18:07



Title: Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 01-02-2013, 11:18:07
Non ho capito una cosa in questo esercizio http://www.dmi.unict.it/~cincotti/prog1/file/prova2.pdf (http://www.dmi.unict.it/~cincotti/prog1/file/prova2.pdf), praticamente nella classe B mi si chiede di restituire x^2, ma il costruttore(se non sbaglio) non restituisce mai niente :/ Quindi o l'istruzione si riferisce a f(), o devo sostituire x con x^2.
Help me  :-)|


Title: Re:Aiuto Esercizio Seconda Prova
Post by: andr3a22 on 01-02-2013, 13:23:52
si riferisce al metodo f(), sicuramente.


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 02-02-2013, 11:17:42
E si per forza, grazie.
Ma cosa significa il secondo quesito : ) la somma dei valori restituiti da f(obj), dove obj è un oggetto di volta in volta generato con il parametro casuale  r.nextInt(47)??? Non l'ho capito o.O


Title: Re:Aiuto Esercizio Seconda Prova
Post by: andr3a22 on 02-02-2013, 13:24:56
vuol dire che devi crearti degli obj (D in questo caso) con il parametro casuale (z in questo caso) r.nextInt(47) e fare la somma dei valori restituiti di volta in volta dal metodo (che restituisce un int). Spero d'esserti stato d'aiuto.


Title: Re:Aiuto Esercizio Seconda Prova
Post by: burgio on 02-02-2013, 13:37:43
Scusate se mi intrometto, sto facendo lo stesso esercizio, ma non riesco a capire cosa fare quando nella classe B devo andare a fare l'ultimo metodo.
qualcuno di voi lo ha già risolto?


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 02-02-2013, 13:44:45
Scusate se mi intrometto, sto facendo lo stesso esercizio, ma non riesco a capire cosa fare quando nella classe B devo andare a fare l'ultimo metodo.
qualcuno di voi lo ha già risolto?
Esatto proprio li non riesco a capire cosa fare, poi il resto ho fatto tutto giusto :/


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Acicatena86 on 02-02-2013, 14:17:03
Credo che dovreste fare la somma normale tra gli z dei due oggetti e poi fare il cast ad int


Code:
public int f(D d)
  {
    return (int)(this.d.getZ()+d.getZ());
  }


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 02-02-2013, 15:52:50
Credo che dovreste fare la somma normale tra gli z dei due oggetti e poi fare il cast ad int


Code:
public int f(D d)
  {
    return (int)(this.d.getZ()+d.getZ());
  }
Allora 1 il tuo avatar è spettacolare XD
2 Dopo provo la tua soluzione, sinceramente non avevo pensato al this -.-"


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 02-02-2013, 17:06:08
Quando invoco il metodo vett.f(obj), netbeans mi dice che il metodo non ha bisogno di argomenti e che trova D.
La classe B l'ho scritta così:
Code:
public class B extends A{
    protected int y;
    private D d;
    public B(int x, int _y, double _z) {   
        super(x);
        y=_y;
        d.setZ(_z);
       
    }
    public int f(){
        return (int)(Math.pow(x, 2));
    }
   public int f(D d)
  {
    return (int)(this.d.getZ()+d.getZ());
  }
   
}

Help pls  :-)|


Title: Re:Aiuto Esercizio Seconda Prova
Post by: andr3a22 on 02-02-2013, 17:49:00
posta il main


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 02-02-2013, 17:55:47
Eccolo anche se forse è un pò incasinato  :[Emoticon] PC Asd:
Code:
import java.util.*;
public class MainInd {
    public static void main(String []args){
    Random r = new Random ( 8776933);   
    A [] vett = new A [100];
    for (int 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); }
    }
    //Es 1
    int a=0;
    int b=0;
    int istB=0;
    for(int i=0;i<vett.length;i++){
        a+=vett[i].f();
    }
    System.out.println(a);
    //Es 3
    int c=0;
    for(int i=0;i<vett.length;i++){
        if(!(vett[i]instanceof C))
            istB++;
    }
    System.out.println(istB);
    //Es 2
    for(int i=0;i<vett.length;i++){
    D obj= new D(r.nextInt(47));
    c+=vett[i].f(obj);       
    }
    System.out.println(c);
   }
}


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Acicatena86 on 02-02-2013, 18:17:04
Eccolo anche se forse è un pò incasinato  :[Emoticon] PC Asd:
Code:
import java.util.*;
public class MainInd {
    public static void main(String []args){
    Random r = new Random ( 8776933);  
    A [] vett = new A [100];
    for (int 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); }
    }
    //Es 1
    int a=0;
    int b=0;
    int istB=0;
    for(int i=0;i<vett.length;i++){
        a+=vett[i].f();
    }
    System.out.println(a);
    //Es 3
    int c=0;
    for(int i=0;i<vett.length;i++){
        if(!(vett[i]instanceof C))
            istB++;
    }
    System.out.println(istB);
    //Es 2
    for(int i=0;i<vett.length;i++){
    D obj= new D(r.nextInt(47));
    c+=vett[i].f(obj);        
    }
    System.out.println(c);
   }
}

Suggerimento:
 La funzione f(D d) è implementata SOLO in B.. Quindi ??

PS (Grazie :D )


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 02-02-2013, 18:23:16
La devo usare solo per gli oggetti di tipo B?? Se così fosse come faccio?? Visto che non so a prescindere quali saranno i tipi e nemmeno con l'istanceof funziona??  :-)|


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Acicatena86 on 02-02-2013, 18:29:39
La devo usare solo per gli oggetti di tipo B?? Se così fosse come faccio?? Visto che non so a prescindere quali saranno i tipi e nemmeno con l'istanceof funziona??  :-)|

Con instanceof controlli se è di tipo B e fai il casting :)


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 02-02-2013, 18:39:02
Tipo così:
Code:
B vettb[] = new B[100];
    for(int i=0;i<vett.length;i++){
         if(!(vett[i]instanceof C)){
              D obj= new D(r.nextInt(47));
              vettb[i]=(B)vett[i];
              c+=vettb[i].f(obj);
         }
    }
Mi sto confodendo :S mi dà errore nel metodo definito in B Q.Q


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Acicatena86 on 02-02-2013, 18:40:58
Tipo così:
Code:
B vettb[] = new B[100];
    for(int i=0;i<vett.length;i++){
         if(!(vett[i]instanceof C)){
              D obj= new D(r.nextInt(47));
              vettb[i]=(B)vett[i];
              c+=vettb[i].f(obj);
         }
    }
Mi sto confodendo :S mi dà errore nel metodo definito in B Q.Q


Che errore ti da di preciso?


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 02-02-2013, 18:45:51
Code:
Exception in thread "main" java.lang.NullPointerException
at es2prova.B.f(B.java:24)
at es2prova.MainInd.main(MainInd.java:39)
Java Result: 1
Questa è la classe B
Code:
public class B extends A{
    protected int y;
    private D d;
    public B(int x, int _y, double _z) {   
        super(x);
        y=_y;
       
    }
    public int f(){
        return (int)(Math.pow(x, 2));
    }
   public int f(D d)
   {
    return (int)(this.d.getZ()+d.getZ());
   }
   
}
[/code ]
Questa la D:
[code]
public class D {
    private double z;
    public D(double _z){
        z=_z;
    }
    public double getZ(){
        return z;
    }
}
E questo il main:
Code:
import java.util.*;
public class MainInd {
    public static void main(String []args){
    Random r = new Random ( 8776933);   
    A [] vett = new A [100];
    for (int 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); }
    }
    //Es 1
    int a=0;
    int b=0;
    int istB=0;
    for(int i=0;i<vett.length;i++){
        a+=vett[i].f();
    }
    System.out.println(a);
    //Es 3
    int c=0;
    for(int i=0;i<vett.length;i++){
        if(!(vett[i]instanceof C))
            istB++;
    }
    System.out.println(istB);
    //Es 2
    B vettb[] = new B[100];
    for(int i=0;i<vett.length;i++){
         if(!(vett[i]instanceof C)){
              D obj= new D(r.nextInt(47));
              vettb[i]=(B)vett[i];
              c+=vettb[i].f(obj);
         }
    }
    System.out.println(c);
   }
}
[/code]


Title: Re:Aiuto Esercizio Seconda Prova
Post by: andr3a22 on 02-02-2013, 20:25:37
Suggerimento:
 La funzione f(D d) è implementata SOLO in B.. Quindi ??

PS (Grazie :D )
ma cosa c'entra?  :[Emoticon] Asd: C è figlio di B quindi eredita il metodo.


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 02-02-2013, 20:30:29
Suggerimento:
 La funzione f(D d) è implementata SOLO in B.. Quindi ??

PS (Grazie :D )
ma cosa c'entra?  :[Emoticon] Asd: C è figlio di B quindi eredita il metodo.
E quindi non dovrebbe fare l'overload? <.<


Title: Re:Aiuto Esercizio Seconda Prova
Post by: andr3a22 on 02-02-2013, 20:44:02
tu devi usare f(D) che è definito in B e non è definito in C - cosa ininfluente, dato che C è figlio di B.
In C stai facendo l'overriding di f() ma f(D) non lo stai proprio toccando.

se devi applicare f(D) sul tuo vettore benissimo, lo puoi fare tranquillamente, dato che sia le classi B e C contengono suddetto metodo  :[Emoticon] Asd:


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 02-02-2013, 20:47:27
tu devi usare f(D) che è definito in B e non è definito in C - cosa ininfluente, dato che C è figlio di B.
In C stai facendo l'overriding di f() ma f(D) non lo stai proprio toccando.

se devi applicare f(D) sul tuo vettore benissimo, lo puoi fare tranquillamente, dato che sia le classi B e C contengono suddetto metodo  :[Emoticon] Asd:
Infatti questo il problema prima facevo vett.f(D), ma  non me lo fa fare, netbeans mi dice che non devo mettere argomenti tra parantesi :/


Title: Re:Aiuto Esercizio Seconda Prova
Post by: andr3a22 on 02-02-2013, 21:08:58
in parte fail mio: avevo visto che f(D) era dichiarata abstract invece no.

tralasciando questo.
basta che fai un casting a questo punto no?

c+=((B)vett).f(obj);      

ovviamente devi prendere tutti gli elementi, sia B che C!

edit: ho rivisto le tue classi e ho capito dove sta il problema. Nel costruttore di B ti sei dimenticato una cosina... controlla.
             


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 02-02-2013, 21:19:10
in parte fail mio: avevo visto che f(D) era dichiarata abstract invece no.

tralasciando questo.
basta che fai un casting a questo punto no?

c+=((B)vett).f(obj);      

ovviamente devi prendere tutti gli elementi, sia B che C!

edit: ho rivisto le tue classi e ho capito dove sta il problema. Nel costruttore di B ti sei dimenticato una cosina... controlla.
             
Con il casting non funziona, cosa mi sono dimenticato nel costruttore???


Title: Re:Aiuto Esercizio Seconda Prova
Post by: andr3a22 on 02-02-2013, 21:34:28
bhè, dovresti inizializzare l'oggetto D  :[Emoticon] Asd:

quindi d=new D(_z);


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 04-02-2013, 10:45:25
Niente non funziona  :-)| Netbean non mi da errori mentre scrivo ma dopo l'esecuzione mi da:
Code:
18501
57
Exception in thread "main" java.lang.NullPointerException
at es2prova.B.f(B.java:27)
at es2prova.MainInd.main(MainInd.java:39)
Java Result: 1
Ecco il main :
Code:
import java.util.*;
public class MainInd {
    public static void main(String []args){
    Random r = new Random ( 8776933);   
    A [] vett = new A [100];
    for (int 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); }
    }
    //Es 1
    int a=0;
    int b=0;
    int istB=0;
    for(int i=0;i<vett.length;i++){
        a+=vett[i].f();
    }
    System.out.println(a);
    //Es 3
    int c=0;
    for(int i=0;i<vett.length;i++){
        if(!(vett[i]instanceof C))
            istB++;
    }
    System.out.println(istB);
    //Es 2
      B vettb[] = new B[100];
    for(int i=0;i<vett.length;i++){
         if(!(vett[i]instanceof C)){
              D obj= new D(r.nextInt(47));
              vettb[i]=(B)vett[i];
              c+=vettb[i].f(obj);
         }
    }
    System.out.println(c);
   }
}
Ecco la classe B:
Code:
public class B extends A{
    protected int y;
    private D d;
    private double z;
    public B(int x, int _y, double _z) {   
        super(x);
        y=_y;
        z=_z;
        D d=new D(_z);
       
    }
    public int f(){
        return (int)(Math.pow(x, 2));
    }
   public int f(D _d)
   {
    return (int)(this.d.getZ()+_d.getZ());
   }
   
}
Cosa sbaglio??? Q.Q


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jim on 04-02-2013, 11:13:04
Raga ho un problema pure io, in pratica quando implemento il pezzo di codice che è presente nel testo in questa riga
Code:
if (r.nextInt(2)==1) vett[i] = new B(x, y, z);
eclipse mi da questo errore:
"No enclosing instance of type SecProva is accessible. Must qualify the allocation with an enclosing instance of type SecProva (e.g. x.new A() where x is an instance of SecProva)."

Che c***o vuol dire  :[Emoticon] Rosik Asd: PS: SecProva è il nome del mio file


Title: Re:Aiuto Esercizio Seconda Prova
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 04-02-2013, 13:53:17
Raga ho un problema pure io, in pratica quando implemento il pezzo di codice che è presente nel testo in questa riga
Code:
if (r.nextInt(2)==1) vett[i] = new B(x, y, z);
eclipse mi da questo errore:
"No enclosing instance of type SecProva is accessible. Must qualify the allocation with an enclosing instance of type SecProva (e.g. x.new A() where x is an instance of SecProva)."

Che c***o vuol dire  :[Emoticon] Rosik Asd: PS: SecProva è il nome del mio file
Non è che per caso stai cercando di istanziare una classe interna senza che esista alcuna istanza di classe esterna a cui essa è interna .penso?

La cosa migliore è di postare TUTTO il codice. Una sola riga di codice potrà essere utile, al più, a te. :boh


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jim on 04-02-2013, 14:52:47
Code:
import java.util.Random;

public class SecProva{

public static void main(String[] args){

Random r = new Random (6353433);
A [] vett = new A [100];
for (int 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);
}
}



public abstract class A {

protected int x;


public A(int _x){
x=_x;
}
public abstract int f();
   
}
   
public 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 (int)Math.pow(x, 2);
}

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

public class C extends B{

public C(int _x, int _y, double _z){
super(_x,_y,_z);
}

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


public class D{

private double z;


public D(double _z){
z=_z;
}
public double getZ(){
return z;
}
}
}
Questo è l'intero codice, ho provato a mettere il main in un altro file ma li non mi fa nemmeno importare le classi che mi servono


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Ciadamidaro Davide on 05-02-2013, 10:25:15
mi sapete dire quali sono le date della 2° e 3° prova?


Title: Re:Aiuto Esercizio Seconda Prova
Post by: Jimmy93 on 05-02-2013, 10:47:37
Risolto il mio problema :
Code:
    B vettb[] = new B [100];
    for(int i=0;i<vett.length;i++){
              D obj= new D(r.nextInt(47));
              vettb[i]=(B)vett[i];
              c+=vettb[i].f(obj);
    }
    System.out.println(c);
   }
Anche se non ho capito ancora perchè non fa l'overridding :/