[java] 2 problemi
[java] 2 problemi
Ciao a tutti,
ho due problemi che devo riuscire assolutamente a risolvere, ma siccome sono molto newbbo con java.........
Problema 1) Ho bisogno di richiamare un metodo all'interno di una classe, però il metodo in questione si trova nel main, e da li non posso certo spostarlo! Esiste qualche soluzione???
Problema 2) devo costruire una griglia equispaziata di punti (ogni punto caratterizzato da due valori es. X,Y), a partire da una determinata posizione (es.X0,Y0). Ma con i cicli for annidati ho qualche problemino, non ci riesco proprio!!
Grazie a tutti per l'aiuto
Ciauzzzzzzzzz
ho due problemi che devo riuscire assolutamente a risolvere, ma siccome sono molto newbbo con java.........
Problema 1) Ho bisogno di richiamare un metodo all'interno di una classe, però il metodo in questione si trova nel main, e da li non posso certo spostarlo! Esiste qualche soluzione???
Problema 2) devo costruire una griglia equispaziata di punti (ogni punto caratterizzato da due valori es. X,Y), a partire da una determinata posizione (es.X0,Y0). Ma con i cicli for annidati ho qualche problemino, non ci riesco proprio!!
Grazie a tutti per l'aiuto
Ciauzzzzzzzzz
"Not everything that counts can be counted, and not everything that can be counted counts."
Re: [java] 2 problemi
Per la seconda domanda magari posta il codice in questione!
per la prima in che senso è nel main??
è nella classe in cui c'è il main?
per la prima in che senso è nel main??
è nella classe in cui c'è il main?
[url=http://"spidblog.altervista.org"]Il mio blog[/url]
Re: [java] 2 problemi
il codice che ho scritto è una cosa del tipo:
Scusami ma non'ho a portata di mano il pc con il codice, quindi sono andato a memoria!
Per il primo problema, si intendo che il metodo è dichiarato nel main del programma come:
e a me serve di richiamare la processapunto da una classe esterna.
Codice: Seleziona tutto
for (righe=1;riga<riga.lenght; riga++){
double rx=origineX+step;
double ry=origineY+step;
for (colonna=1;colonna<colonna.lenght; colonna++){
double cx=origineX+step;
double cy=origineY+step
}
}
Per il primo problema, si intendo che il metodo è dichiarato nel main del programma come:
Codice: Seleziona tutto
private static Punto[] processapunto(double e, double n) {
"Not everything that counts can be counted, and not everything that can be counted counts."
- Massimo S.
- Entusiasta Emergente

- Messaggi: 1931
- Iscrizione: giovedì 28 settembre 2006, 14:34
Re: [java] 2 problemi
Se lo dichiari private non riuscirai mai e poi mai a chiamarlo da una classe esterna.sverdrup ha scritto:e a me serve di richiamare la processapunto da una classe esterna.Codice: Seleziona tutto
private static Punto[] processapunto(double e, double n) {
Dichiaralo public se vuoi sia chiamabile da qualsiasi classe oppure non mettere niente se vuoi che sia chiamabile solo dalle classi dello stesso package di quella che lo possiede
Re: [java] 2 problemi
Ho provato a chiamarla public, ma dall'altra classe non mi permette ugualmente di richiamarla..
Mi dice che il metodo processapunto non'è definito per questa classe, e con eclipse mi permette solo di generare un nuovo metodo, oppure di rinominare in file???Come posso risolvere???
Help me please!!!!!! ::) ::) ::)
Mi dice che il metodo processapunto non'è definito per questa classe, e con eclipse mi permette solo di generare un nuovo metodo, oppure di rinominare in file???Come posso risolvere???
Help me please!!!!!! ::) ::) ::)
"Not everything that counts can be counted, and not everything that can be counted counts."
- Massimo S.
- Entusiasta Emergente

- Messaggi: 1931
- Iscrizione: giovedì 28 settembre 2006, 14:34
Re: [java] 2 problemi
In quale package si trova la classe che ha il metodo e in quale package si trova la classe che lo deve chiamare?
Come lo chiami il metodo?
Posta il codice delle due classi che facciamo prima
Come lo chiami il metodo?
Posta il codice delle due classi che facciamo prima
Re: [java] 2 problemi
La classe in cui si trova il metodo da richiamare si trova nel package defoult package, mentre la classe da dove devo richiamare il metodo si trova all'interno del package Beans, il codice della prima classe è:
mentre il codice della seconda classe è alquanto lunghetto.
ti mando solo lo spezzono del codice da dove voglio richiamare il metodo:
Codice: Seleziona tutto
public class u_vvelocity {
private static ArrayList m = null;
private static double Umed = 0;
private static double Vmed = 0;
private static Matrici delleMedie = null;
public static void main(String[] l) {
File dir = new File( // Lettura files da percorso relativo
"./totali");
String[] file = dir.list();
java.util.Arrays.sort(file);
if (file == null) {
} else {
m = new ArrayList();
for (int i = 0; i < file.length - 1; i++) {
String filename1 = file[i];
String filename2 = file[i + 1];
System.out.println("Acquisizione del file " + filename1 + "---> OK");
BufferedReader f1, f2;
try {
f1 = new BufferedReader(new FileReader(dir.getName() + "//"
+ filename1));
f2 = new BufferedReader(new FileReader(dir.getName() + "//"
+ filename2));
// Generazione matrici interpolate
Matrici nn1 = new Matrici(f1, filename1);
Matrici nn3 = new Matrici(f2, filename2);
Matrici nn2 = nn1.interpolaCon(nn3);
Matrici nn4 = nn1.interpolaCon2(nn3);
Matrici nn5 = nn1.interpolaCon3(nn3);
Matrici nn6 = nn1.interpolaCon4(nn3);
Matrici nn7 = nn1.interpolaCon5(nn3);
nn2.setNome(filename1 + ".int10");
nn4.setNome(filename1 + ".int20");
nn5.setNome(filename1 + ".int30");
nn6.setNome(filename1 + ".int40");
nn7.setNome(filename1 + ".int50");
/* System.out.println(nn1);
System.out.println(nn2);
System.out.println(nn4);
System.out.println(nn5);
System.out.println(nn6);
System.out.println(nn7);
System.out.println(nn3);*/
if (i == 0)
m.add(nn1);
m.add(nn2);
m.add(nn3);
m.add(nn4);
m.add(nn5);
m.add(nn6);
m.add(nn7);
if (i == 0)
// Decommentare per stampare a schermo
// le matrici
/* System.out.println(nn1.getNome());
System.out.println(nn2.getNome());
System.out.println(nn4.getNome());
System.out.println(nn5.getNome());
System.out.println(nn6.getNome());
System.out.println(nn7.getNome());
System.out.println(nn3.getNome());*/
f1.close();
f2.close();
} catch (FileNotFoundException e) {
System.out
.println("File non trovati! Impossibile generare dati interpolati!!");
} catch (Exception e) {
System.out.println("ERRORE " + e.getMessage());
e.printStackTrace();
}
}
// caricamento finito, in m le matrici
delleMedie = new Matrici();
int[][] conteggiovaloridiversida0u = new int[31][50];
int[][] conteggiovaloridiversida0v = new int[31][50];
// CALCOLA VALORI DIVERSI DA 0 PER TUTTE LE MATRICI
for (int n = 0; n < m.size(); n++) {
Matrici matricenn = (Matrici) m.get(n);
for (int i = 0; i < 31; i++) {
for (int j = 0; j < 50; j++) {
conteggiovaloridiversida0u[i][j] += (matricenn
.getElementiU()[i][j] == 0.0 ? 0 : 1);
conteggiovaloridiversida0v[i][j] += (matricenn
.getElementiV()[i][j] == 0.0 ? 0 : 1);
}
}
delleMedie.somma(matricenn);
}
delleMedie.mediaA(conteggiovaloridiversida0u,
conteggiovaloridiversida0v);
// a questo punto dentro a "delleMedie" ci sono i valori medi di
// velocità
// System.out.println(delleMedie);
// test
//Coordinate rilascio particelle
// processapunto(2.30, 3.51);
for (int i = 0; i < file.length - 1; i++) {
processapunto(0.1,0.1);
}
}
}
private static Punto[] processapunto(double e, double n) { <--------QUESTO È IL METODO DA RICHIAMARE
Punto[] output = new Punto[m.size()];
Punto p = new Punto(e, n);
Writer w = null;
try {
w = new FileWriter("./dat/dat_" + String.valueOf(e)
+ "_" + String.valueOf(n) + ".mrt");
} catch (IOException e1) {
e1.printStackTrace();
}
// PRIMO CICLO, CALCOLA PUNTO
for (int i = 0; i < m.size(); i++) {
Matrici matricenn = (Matrici) m.get(i);
// System.out.println(e + " " + n + " -> " + matricenn.getNome());
// System.out.println(matricenn.toString());
output[i] = p;
Vettore turbo = delleMedie.calcolaVettore(p);
// ricordati di modificare P
p = matricenn.processa(p, turbo, w);
}
try {
w.close();
} catch (IOException e1) {
e1.printStackTrace();
}
System.out.println(" ");
System.out.println("Il programma è terminato!");
System.out.println("i file sono stati salvati");
System.out.println("nella cartella dat relativa al programma");
return output;
}
}
ti mando solo lo spezzono del codice da dove voglio richiamare il metodo:
Codice: Seleziona tutto
private boolean Boundary(Punto p) {
boolean risultato = false;
double boundaryX[] = { -10.0, -7.5, -6.25, -6.25, 2.125, 3.4375, 3.75,
5.3125, 6.5625, 6.875, 7.1875, 8.125, 8.125, 10.3125, 10.3125,
11.5625, 19.375, 20.625, 23.125, 25, 26.25, 23.75, 22.5,
21.875, 20.9375, 20.3125, 19.687, 20.0, 17.5, 16.5625, 15.625,
14.375, 14.375, 13.4375, 12.8125, 12.8125, 8.125, 6.875, 3.75,
2.5, 2.5, -22.5, -20.3125, -19.0625, -17.8125, -16.875,
-16.875, -12.5, -12.5, -11.875, -11.875, -10.9375, -10.9375,
-10.0 };
double boundaryY[] = { 13.4375, 13.4375, 12.5, 13.75, 13.75, 15.0,
16.5625, 18.125, 18.125, 17.8125, 18.4325, 18.4325, 19.0575,
19.0625, 18.4375, 18.4375, 12.8125, 11.875, 12.1875, 7.5,
4.0625, 2.5, 1.25, 0.0, -0.625, -0.625, -0.9375, -2.1875,
-4.0625, -4.0625, -3.4375, -4.375, -5.9375, -6.875, -8.75,
-10.0, -11.5625, -12.1875, -11.5625, -11.5625, -14.375, 3.75,
3.4375, 4.375, 3.75, 5.0, 7.5, 7.8124, 9.0625, 9.0625, 9.6875,
10.0, 11.25, 13.4375 };
for (int i = 0; i < boundaryX.length - 1; i++) {
if ((boundaryX[i] - boundaryX[i + 1] != 0)
|| (boundaryY[i] - boundaryY[i + 1] != 0)) {
double coeff_tx = 0 - boundaryX[i];
double coeff_ty = 0 - boundaryY[i];
double x1 = boundaryX[i] + coeff_tx;
double y1 = boundaryY[i] + coeff_ty;
double x2 = boundaryX[i + 1] + coeff_tx;
double y2 = boundaryY[i + 1] + coeff_ty;
double px = p.getX() + coeff_tx;
double py = p.getY() + coeff_ty;
double tan = (y2 / x2);
double alfa = Math.atan(tan);
double gradi = Math.toDegrees(alfa);
double x2rt = (x2 * (Math.cos(alfa))
+ (y2 * (Math.sin(alfa))));
double y2rt = (-x2 * (Math.sin(alfa))
+ (y2 * (Math.cos(alfa))));
double xxp = (px * (Math.cos(alfa))
+ (py * (Math.sin(alfa))));
double yyp = (-px * (Math.sin(alfa))
+ (py * (Math.cos(alfa))));
//if((x2rt<0 && yyp<0)||(x2rt>0 && yyp>0)){
if ((xxp>x1 && xxp<x2 && yyp>0)||(xxp<x1 && xxp>x2 && yyp<0)){
System.out.println("sono uscita********************");
risultato=true;
}else{
System.out.println("x2=" + x2 + " " + "y2=" + y2 + " "
+ "x2rt=" + x2rt + " " + "y2rt=" + y2rt + " " + xxp
+ " " + yyp + " " + gradi);
}
} else if ((boundaryY[i] - boundaryY[i + 1] == 0 && p.getX() > boundaryX[i] &&
p.getX() < boundaryX[i + 1] && p.getY() > boundaryY[i])
|| (boundaryY[i] - boundaryY[i + 1] == 0 &&p.getX() < boundaryX[i]
&& p.getX() > boundaryX[i + 1] && p.getY() < boundaryY[i])) {
risultato = true;
}
else if ((boundaryX[i] - boundaryX[i + 1] == 0 && p.getY() > boundaryY[i] &&
p.getY() < boundaryY[i + 1] && p.getX() > boundaryX[i])
|| (boundaryX[i] - boundaryX[i + 1] == 0 &&p.getY() < boundaryY[i]
&& p.getY() > boundaryY[i + 1] && p.getX() < boundaryX[i])){
risultato=true;
}
}
return risultato;
}
public Punto processa(Punto p, Vettore turbo, Writer mw) {
Punto risultato = null;
puntopiningresso = p;
int indice_x = corrispondenzaGriglia_x(p.getX());
int indice_y = corrispondenzaGriglia_y(p.getY());
if (indice_x >= 0 && indice_y >= 0) {
// I'm lucky
Upint = matriceU[indice_x][indice_y];
Vpint = matriceV[indice_x][indice_y];
} else {
Upint = Lagrange.calcolaUpint(p, getElementiU());
Vpint = Lagrange.calcolaVpint(p, getElementiV());
}
double stdevU = Upint - turbo.getU(); // deviazione standard componente U
double stdevV = Vpint - turbo.getV(); // deviazione standard componente V
// calcola energia
ekeU = ((stdevU * stdevU) / 2);
ekeV = ((stdevV * stdevV) / 2);
mkeU = ((turbo.getU() * turbo.getU()) / 2);
mkeV = ((turbo.getV() * turbo.getV()) / 2);
double tkeU = ekeU + mkeU;
double tkeV = ekeV + mkeV;
// calcola spostamento (componente avvettiva+turbolenta)
double Savx, Savy, Sdix, Sdiy;
double r = Utils.random();
p=processapunto(p.getX(),p.getY()); <-----QUI LO RICHIAMO
if (Boundary(processapunto(p))){
System.out.print("Una particella è uscita dal boundary");
Savx = 0;
Savy = 0;
Sdix = 0;
Sdiy = 0;
//break;
}else{
double medU = turbo.getU();
double medV = turbo.getV();
Savx = medU * 0.006;
Savy = medV * 0.006;
Sdix = r * stdevU * 0.006;
Sdiy = r * stdevV * 0.006;
}
int select=1;
switch (select) {
case 1:
Xp = p.getX() + Savx + Sdix;
Yp = p.getY() + Savy + Sdiy;
break;
case 2:
Xp = p.getX() + Savx;
Yp = p.getY() + Savy;
break;
case 3:
Xp = p.getX() + Sdix;
Yp = p.getY() + Sdiy;
break;
}
double Utot = turbo.getU() + stdevU;
double Vtot = turbo.getV() + stdevV;
// System.out.println(Xp + " " + Yp + " " +Utot + " " + Vtot + " " + Upint + " " + Vpint);
// System.out.println(medU + " " + medV);
double LAT = 40.666667 + (Yp * 0.008994423457);
double radlat = Math.toRadians(LAT);
double coslat = Math.cos(radlat);
double loncf1 = ((coslat * 0.6) / 100) * 2.61;
double LON = 14.166667 + (Xp * loncf1);
try {
mw.write(LON + "\t" + LAT + "\t" + Xp + "\t" + Yp + "\t" + Utot
+ "\t" + Vtot + "\t" + "\r\n");
} catch (IOException e) {
e.printStackTrace();
}
risultato = new Punto(Xp, Yp);
return risultato;
}
Ultima modifica di sverdrup il sabato 22 settembre 2007, 0:04, modificato 1 volta in totale.
"Not everything that counts can be counted, and not everything that can be counted counts."
- Massimo S.
- Entusiasta Emergente

- Messaggi: 1931
- Iscrizione: giovedì 28 settembre 2006, 14:34
Re: [java] 2 problemi
Immaginavo che era questo il problema, non lo devi chiamare così
ma invece così:
Nota: è meglio se rispetti la convenzione che le classi inizino con la lettere maiuscola, tipo Uvvelocity
Se u_vvelocity si trovava invece che nel package default nel package pippo, dovevi fare
oppure usare import, ad esempio:
Codice: Seleziona tutto
p=processapunto(p.getX(),p.getY()); <-----QUI LO RICHIAMOCodice: Seleziona tutto
p=u_vvelocity.processapunto(p.getX(),p.getY());Se u_vvelocity si trovava invece che nel package default nel package pippo, dovevi fare
Codice: Seleziona tutto
p=pippo.u_vvelocity.processapunto(p.getX(),p.getY());Codice: Seleziona tutto
import pippo.u_vvelocity;
...............................
...............................
p=u_vvelocity.processapunto(p.getX(),p.getY());
...............................
Re: [java] 2 problemi
Continua a darmi errore >:( ,
dice che u_vvelocity non può essere risolto!!
Non può essere dovuto al fatto che dentro a u_vvelocity c'è il main??
Ho provato anche importando il package, ma niente di niente!!!!
Help me
please!!
:'( :'( :'(
dice che u_vvelocity non può essere risolto!!
Non può essere dovuto al fatto che dentro a u_vvelocity c'è il main??
Ho provato anche importando il package, ma niente di niente!!!!
Help me
please!!
:'( :'( :'(
"Not everything that counts can be counted, and not everything that can be counted counts."
- Massimo S.
- Entusiasta Emergente

- Messaggi: 1931
- Iscrizione: giovedì 28 settembre 2006, 14:34
Re: [java] 2 problemi
Il fatto che ci sia il main non c'entra assolutamente nulla.
Ti dovrebbe funzionare, sarà un errore stupido.
Facciamo così: comprimi tutta la cartella del progetto in un .zip e postalo che ci do un'occhiata (quando ho tempo)
Ti dovrebbe funzionare, sarà un errore stupido.
Facciamo così: comprimi tutta la cartella del progetto in un .zip e postalo che ci do un'occhiata (quando ho tempo)
Re: [java] 2 problemi
Grazie mille per l'aiuto, ma sono riuscito a risolvere implementando un nuovo metodo all'interno del main
!!
(comunque grazie mille del consiglio, mi sarà di certo utile in futuro).
Ora però ho un'altro problemino, perchè devo aggiungere una progress bar, quindi una "microinterfaccia" , tipo una finestrella che si apre quando faccio partire il programma e che indichi la percentuale di completamento di un ciclo che si trova nel main (il for che si trova subito dopo il commento \\PRIMO CICLO CALCOLA PUNTO.
Però di interfaccie, sia awt che swing sono completamente digiuno....
Help please!!
Ciauzzzzzzzz
(comunque grazie mille del consiglio, mi sarà di certo utile in futuro).
Ora però ho un'altro problemino, perchè devo aggiungere una progress bar, quindi una "microinterfaccia" , tipo una finestrella che si apre quando faccio partire il programma e che indichi la percentuale di completamento di un ciclo che si trova nel main (il for che si trova subito dopo il commento \\PRIMO CICLO CALCOLA PUNTO.
Però di interfaccie, sia awt che swing sono completamente digiuno....
Help please!!
Ciauzzzzzzzz
"Not everything that counts can be counted, and not everything that can be counted counts."
- Massimo S.
- Entusiasta Emergente

- Messaggi: 1931
- Iscrizione: giovedì 28 settembre 2006, 14:34
Re: [java] 2 problemi
Io non sono completamente digiuno di awt e swing, però non ne mangio da annisverdrup ha scritto: Però di interfaccie, sia awt che swing sono completamente digiuno....
Forse se c'è qualcun altro che ci legge più pratico di queste cose ti potrebbe aiutare meglio di me.
Ciao
Re: [java] 2 problemi
Ok, speriamo che qualcuno si faccia vivo :-\ !!
Ciauzzzzzz
e grazie ancora!!
Ciauzzzzzz
e grazie ancora!!
"Not everything that counts can be counted, and not everything that can be counted counts."
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti
