|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jan 2010
Messaggi: 64
|
[JAVA] Vector
guardate questo pezzo di codice fatto da me
Codice:
public double distanza(Point p1,Point p2){ return Math.sqrt(Math.pow((p1.x-p2.x),2)+Math.pow((p1.y-p2.y),2)); } public double [] daiDistanze(Vector punti){ int dimArraydist=fatt(punti.size())/(2*fatt(punti.size()-2)); double [] distanze=new double [dimArraydist]; int pos=0; for(int i=0;i<punti.size()-1;i++){ for(int j=i+1;j<punti.size();j++){ distanze[pos]=distanza(punti.elementAt(i),punti.elementAt(j)); // l'errore è qui pos++; } } return distanze; } mi dice questo... The method distanza(Point, Point) in the type CalcoloDistanze is not applicable for the arguments (Object, Object) |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Poichè Point è figlio di Object ovunque tu veda "Object" puoi usare "Point".
Non vale il contrario: dove c'è Point non puoi usare Object. Il metodo elementAt di un Vector "raw" (cioè non parametrico) restituisce un Object, da cui l'errore. Risolvi con una conversione esplicita: distanza((Point) punti.elementAt(i), (Point)punti.elementAt(j)); che in tanto vale in quanto il tipo in esecuzione dei valori restituiti da elementAt(i) ed elementAt(j) siano Point o derivati di Point.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jan 2010
Messaggi: 64
|
grazie mille ma poi sotto ho un altro errore cioè quando vado a creare un array per metterci all'interno i miei risultati
double [] risultati=daiDistanze(punti); anche qui nn gli va bene |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Considera che per quanto avanzati siano i linguaggi di programmazione restano comunque piuttosto stupidi, quantomeno se comparati all'idea di intelligenza umana cioè la capacità di prendere pessime decisioni sulla base di informazioni errate con argomentazioni che non stanno nè in cielo nè in terra.
Qui di errato non ci può essere molto: double [] risultati=daiDistanze(punti); "punti" è un java.util.Vector? Se punti è un java.util.Vector allora è un problema di accesso al metodo daiDistanze. Bisognerebbe vedere il codice nel suo complesso per sapere con certezza quale sia il problema.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jan 2010
Messaggi: 64
|
si punti è un java.util.Vector non capisco proprio cos'è che nn va...cmq l'errore che mi da è questo...
The method daiDistanze(Vector) in the type CalcoloDistanze is not applicable for the arguments (Point[]) |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Stando al messaggio "punti" non è un java.util.Vector ma un array di oggetti Point.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Jan 2010
Messaggi: 64
|
punti è un Vector di oggetti point...creato in un'altra classe...quindi li invece di scriverci "punti" cosa devo scriverci?
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Se punti è un Vector allora è giustissimo dire:
double[] p = daiDistance(punti). Il problema è che il compilatore dice che quel nome "punti" lì dove lo usi è un Point[] ed è difficile che si sbagli. Bisogna vedere il codice completo. Forse hai più cose che si chiamano "punti"?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Jan 2010
Messaggi: 64
|
allora forse il problema sta li nel mio primo post quando inizia il metodo
public double [] daiDistanze(Vector punti){ qui la parola Vector me la segna di giallo e mi dice che... Vector is a raw type. References to generic type Vector<E> should be parameterized secondo te? che significa? |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Non è quello il problema.
L'ide ti segnala che stai usando una class generica (Vector) senza una dichiarazione di parametro. Se vai a guardare la classe Vector vedi che è dichiarata con una lettera tra i segni <>: Vector<E> Significa che quando usi la classe Vector puoi specificare tra i segni <> il nome di un tipo. Tu usi: Vector punti ma potresti anche dire: Vector<Point> punti Quando dichiari il tipo di parametro il Vector che usi diventa un operatore sul tipo di oggetti stabilito dalla dichiarazione di parametro (in questo caso Point). Nel caso di Vector<X> l'operazione principale è il contimento (Vector<X> è qualcosa che contiene oggetti di tipo X). Quando incontri una classe generica (cioè una classe che, come vector, è dichiarata nella forma NomeClass<Qualcosa>) è consigliabile usarla con una dichiarazione di parametro (cioè Vector<Point> anzichè Vector e basta) perchè il compilatore è in grado di verificare la compatibilità degli oggetti-operandi (quello che passi al vettore con i metodi add, setElementAt eccetera) con il tipo applicabile all'operatore (cioè il tipo dichiarato tra i segni < >), il che ti può risparmiare qualche raro ClassCastException e un po' di conversioni esplicite. Tuttavia non è un errore usare un tipo generico senza dichiarazione di parametro e il programma compila e funziona ugualmente. il problema è da qualche altra parte.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Jan 2010
Messaggi: 64
|
cosi mi creao il mio vettore Vector di punti
Codice:
public class Case { public int N; public int M; private Vector punti; public Case (int N, int M) { if (0 < N | N<=9 | 0 < M | M <= 200){ this.M = M; this.N = N; this.punti = new Vector();} else System.out.println("I dati inseriti per N o M hanno un range errato"); } public void aggiungiPunto(Point p){ punti.add(p); } public Point leggiPunto(int i){ return (Point)punti.get(i); } } |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Mmhhh, la trama si infittisce.
La classe è ok. La cosa strana è che in quella classe "punti" è un membro privato delle istenza di Case. Significa che non hai modo di usare quel "punti" al di fuori del corpo della classe Case. Quandi scrivi: Case case = new Case(); quel "case" ha dentro di sè un Vector "punti" ma quel "punti" è una cosa "privata", inaccessibile: solo case lo può usare. Da che deduciamo che quando da qualche altra parte scrivi: double p = daiDistance(punti) il nome "punti" non fa riferimento a ciò che potrebbe sembrare. Tieni conto che, in generale, non è sufficiente che due cose abbiano lo stesso nome perchè sia anche la stessa cosa. Per la soluzione bisogna ancora avere il programma completo sottomano altrimenti si rischia di far confusione. A mo' di chiacchiera potrei dire che la classe Case potrebbe avere un metodo getPunti così fatto: Codice:
public Vector getPunti() { return punti; } dovresti anche avere un riferimento di tipo Case (cioè una riga che dice: Case case = new Case(qualcosa, qualcosa)). Il "punti" che passi a daiDistance diventerebbe quindi case.getPunti(), cioè: double[] p = daiDistance(case.getPunti()); Ma è solo un'indicazione di massima che, ripeto, potrebbe più confondere le idee che schiarirle.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Jan 2010
Messaggi: 64
|
praticamente io leggo un filke txt e ho una classe che mi legge appositamente questa lettura che non c'entra niente con il mio problema cmq creo con un ciclo sempre un nuovo oggetto Case
Case c = new Case(N,M); dove N ed M variano in base a quello che devo leggere..e memorizzo il Case c dentro un array cosi definito Case[] casi = new Case[100]; per quanto riguarda invece gli oggetti punto (leggo anche quelli) faccio Point p= new Point(x,y); e di volta in volta faccio c.aggiungiPunto(p); non capisco proprio cos'è che nn va...questo è tutto il mio programma non c'è altro ![]() |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
E' un problema di ambito dei nomi. Quando scrivi:
double p = daiDistance(punti) la dichiarazione del nome "punti" dov'è?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Jan 2010
Messaggi: 64
|
li nella classe Case che ti ho postato prima quando faccio...
public Vector punti; no??? oddio guarda mi sta facendo impazzire... ![]() |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Non può essere quella.
Codice:
public class Case { public int N; public int M; private Vector punti; public Case (int N, int M) { if (0 < N | N<=9 | 0 < M | M <= 200){ this.M = M; this.N = N; this.punti = new Vector();} else System.out.println("I dati inseriti per N o M hanno un range errato"); } public void aggiungiPunto(Point p){ punti.add(p); } public Point leggiPunto(int i){ return (Point)punti.get(i); } } Se il compilatore non ti da un "Cannot resolve symbol" ma dice che là dove lo usi "punti" è un Point[] significa che hai almeno un'altra variabile che hai chiamato "punti". Puoi incollare il codice completo della classe che contiene il metodo daiDistance?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#18 |
Member
Iscritto dal: Jan 2010
Messaggi: 64
|
Codice:
public class CalcoloDistanze { public double distanza(Point p1,Point p2){ return Math.sqrt(Math.pow((p1.x-p2.x),2)+Math.pow((p1.y-p2.y),2)); //calcolo matematico della distanza fra due punti } public double [] daiDistanze(Vector punti){ int dimArraydist=fatt(punti.size())/(2*fatt(punti.size()-2)); //calcolo delle disposizioni semplici senza ripetizioni double [] distanze=new double [dimArraydist]; // nuovo vettore per memorizzare le distanze calcolate e la grandezza è data dalle disposizioni int pos=0; for(int i=0;i<punti.size()-1;i++){ // questi due cicli fanno in modo che un elemento si confronti con il successivo for(int j=i+1;j<punti.size();j++){ //cioè slittati di una posizione distanze[pos]=distanza((Point)punti.elementAt(i),(Point)punti.elementAt(j)); // richiamo il metodo che mi calcola la distanza fra due punti e me la mette pos++; // dentro l'array distanze } } return distanze; } private int fatt(int n){ //metodo per il calcolo del fattoriale int i=1; int fatt=1; if(n>=0){ while(i<=n){ fatt=i*fatt; i++; } }else{ fatt=-1; } return fatt; } public void daiRisultati(){ // questo metodo invece lo vado a mettere nel main o resta qui nn lo so devo decidere double [] risultati=daiDistanze(punti); for(int i=0;i<risultati.length;i++){ System.out.println(risultati[i]);} Ultima modifica di blackguardian : 24-01-2010 alle 16:22. |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Bene, adesso ci manca solo la classe che contiene l'invocazione del metodo daiDistance. Puoi incollare anche quella?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#20 |
Member
Iscritto dal: Jan 2010
Messaggi: 64
|
no ancora nn c'è cmq non diachiaro da nessun altra parte "punti"...non capisco proprio
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:03.