Pages: 1 [2]   Go Down
Print
Author Topic: Aiuto Esercizio Seconda Prova  (Read 4861 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Acicatena86
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 404


See full me now who neon


« Reply #15 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?
Logged
Jimmy93
Matricola
*
Offline Offline

Posts: 74



« Reply #16 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]
Logged
andr3a22
Matricola
*
Offline Offline

Gender: Male
Posts: 54



« Reply #17 on: 02-02-2013, 20:25:37 »

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

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

Oh Don Piano
Jimmy93
Matricola
*
Offline Offline

Posts: 74



« Reply #18 on: 02-02-2013, 20:30:29 »

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

PS (Grazie Cheesy )
ma cosa c'entra?  [Emoticon] Asd C è figlio di B quindi eredita il metodo.
E quindi non dovrebbe fare l'overload? <.<
Logged
andr3a22
Matricola
*
Offline Offline

Gender: Male
Posts: 54



« Reply #19 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
Logged

Oh Don Piano
Jimmy93
Matricola
*
Offline Offline

Posts: 74



« Reply #20 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 :/
Logged
andr3a22
Matricola
*
Offline Offline

Gender: Male
Posts: 54



« Reply #21 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.
             
« Last Edit: 02-02-2013, 21:17:02 by andr3a22 » Logged

Oh Don Piano
Jimmy93
Matricola
*
Offline Offline

Posts: 74



« Reply #22 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???
Logged
andr3a22
Matricola
*
Offline Offline

Gender: Male
Posts: 54



« Reply #23 on: 02-02-2013, 21:34:28 »

bhè, dovresti inizializzare l'oggetto D  [Emoticon] Asd

quindi d=new D(_z);
Logged

Oh Don Piano
Jimmy93
Matricola
*
Offline Offline

Posts: 74



« Reply #24 on: 04-02-2013, 10:45:25 »

Niente non funziona  testate 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
Logged
Jim
Matricola
*
Offline Offline

Posts: 11


« Reply #25 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
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #26 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 ?

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

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Jim
Matricola
*
Offline Offline

Posts: 11


« Reply #27 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
Logged
Ciadamidaro Davide
Matricola
*
Offline Offline

Posts: 34


« Reply #28 on: 05-02-2013, 10:25:15 »

mi sapete dire quali sono le date della 2° e 3° prova?
Logged
Jimmy93
Matricola
*
Offline Offline

Posts: 74



« Reply #29 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 :/
Logged
Pages: 1 [2]   Go Up
Print
Jump to: