View Full Version : scambio dati tra classi java
ciao,
sto cercando 2 classi (in 2 file differenti) che si scambiano dei dati (interi).
c'è qualche script?
grazie
ciao
roby
sto cercando 2 classi (in 2 file differenti) che si scambiano dei dati (interi).
c'è qualche script?Puoi descrivere meglio la questione? Non è che si capisca molto....
ciao,
sto cercando 2 classi (in 2 file differenti) che si scambiano dei dati (interi). gliegli passi così come sono? :huh:
faccio un esempio :asd:
classe 1:
class Class1 {
private int i;
private Class2 class2;
private void pass() {
class2.pass(i);
}
}
classe 2 (in un altro file):
class Class2 {
public void pass(int passedValue) {
System.out.println("I\'m happy cause I got my value: " + passedValue);
}
}
c'è qualche script? script...? :wtf:
Puoi descrivere meglio la questione? Non è che si capisca molto....
ho 2 file (pseudocodice):
nel primo c'è la classe
public class primoprogramma
(
a=10;
stampa b;
)
nel secondo
public class secondoprogramma
(
stampa a
b=b+1;
)
voglio che il secondo programma stampi a e il primo b.. passandosi le variabili.
è possibile una cosa del genere..
o devo per forza avere tutte e 2 le classi nello stesso file e fare il passaggio di parametri tutto all'interno di uno stesso programma?
grazie
r.
71104 ha capito, intanto provo a fare come mi ha suggerito.. raga abbiate pazienza sto iniziando a programmare con java..
voglio che il secondo programma stampi a e il primo b.. passandosi le variabili.
è possibile una cosa del genere..
o devo per forza avere tutte e 2 le classi nello stesso file e fare il passaggio di parametri tutto all'interno di uno stesso programma? nessuno ti obbliga a considerare ciascuna classe un programma separato: se i due files .java stanno nello stesso package e i due files .class stanno nella stessa cartella possono interagire tra di loro chiamandosi a vicenda nel contesto dello stesso processo. se invece i due files .java stanno in packages separati basta che usi import, l'importante è che la configurazione delle cartelle e dei files .class a runtime rispecchi quella dei files .java nei packages.
nessuno ti obbliga a considerare ciascuna classe un programma separato: se i due files .java stanno nello stesso package e i due files .class stanno nella stessa cartella possono interagire tra di loro chiamandosi a vicenda nel contesto dello stesso processo. se invece i due files .java stanno in packages separati basta che usi import, l'importante è che la configurazione delle cartelle e dei files .class a runtime rispecchi quella dei files .java nei packages.
aldilà dei package che non conosco..
sono io che volutamente volevo provare le classi in 2 file separati:
class2.java compilato ok!
ma x class1 mi da un errore in compilazione:
class1.java:3:cannot resolve symbol
symbol: class Class2
location: class Class1
private Class2 class2;
^
1 error
che è???
puoi riportare i due sorgenti?
puoi riportare i due sorgenti?
sono esattamente quelli che hai scritto tu
I nomi delle classi (e dei .class) devono essere maiuscoli.
Il file .class generato dalla prima compilazione andata a buon fine è nella stessa cartella?
I nomi delle classi (e dei .class) devono essere maiuscoli.
Il file .class generato dalla prima compilazione andata a buon fine è nella stessa cartella?
sia che sono maiuscoli che minuscoli alla fine ho sempre lo stesso problema..
cmq per sicurezza i sorgenti e i .class che avevo prima li ho cancellati e ho riprovato con sorgenti con la prima lettera maiuscola, ma di fatto lui genera solo il Class2.class.
x il Class1.java non viene generato il .class (sto lavorando nella dir \bin)
Quindi c'è qualche problema nel codice del primo ( a meno che bisogna settare qualche variabile d'ambiente .. io quelle non le ho mai toccate.. perchè ho preferito sempre lavorare sotto /bin).
sia che sono maiuscoli che minuscoli alla fine ho sempre lo stesso problema..
cmq per sicurezza i sorgenti e i .class che avevo prima li ho cancellati e ho riprovato con sorgenti con la prima lettera maiuscola, ma di fatto lui genera solo il Class2.class.
x il Class1.java non viene generato il .class (sto lavorando nella dir \bin)
Quindi c'è qualche problema nel codice del primo ( a meno che bisogna settare qualche variabile d'ambiente .. io quelle non le ho mai toccate.. perchè ho preferito sempre lavorare sotto /bin).
I nomi delle classi devono essere maiuscoli, in teoria una classe con un nome minuscolo dovrebbe costituire un errore di sintassi a tutti gli effetti.
Sei sotto bin, quindi hai visibile tutto quello che ti serve. Anche con il CLASSPATH non dovresti avere nessun problema... visto che stai lavorando nella stessa cartella.
Intanto piazza questa riga in cima al file Class1.java
import Class2;
E poi: in che ordini le compili? Dovresti compilare prima Class2.java e dopo Class1.java... anche se ad essere sincero non mi ricordo se il compilatore se li sbrighi da solo questi problemi.
@atmp90: usi il compilatore da linea di comando o usi un IDE? penso sia la prima. comunque prova a compilare i due files contemporaneamente:
javac Class1.java Class2.java
I nomi delle classi devono essere maiuscoli, in teoria una classe con un nome minuscolo dovrebbe costituire un errore di sintassi a tutti gli effetti.
Sei sotto bin, quindi hai visibile tutto quello che ti serve. Anche con il CLASSPATH non dovresti avere nessun problema... visto che stai lavorando nella stessa cartella.
Intanto piazza questa riga in cima al file Class1.java
import Class2;
E poi: in che ordini le compili? Dovresti compilare prima Class2.java e dopo Class1.java... anche se ad essere sincero non mi ricordo se il compilatore se li sbrighi da solo questi problemi.
(per il discorso delle maiuscole e minuscole la penso come te.. ma prima non mi dava errore.. non so perchè)
ho fatto poi come mi hai detto: aggiunto import e compilato Class2.java e poi Class1.java
su Class1 non c'è l'errore di prima ma un altro:
Class1.java:1: '.' expected
import Class2;
^
1 error
(la ^ cade sotto il ; )
per forza, mica puoi importare una classe così, direttamente. le classi si importano solo quando fanno parte di un altro package, quindi il compilatore ha creduto che "Class2" fosse il nome di un package e dopo di esso si aspettava di trovarci un punto e poi il nome di un altro package oppure della classe da importare.
hai provato a compilare i due files contemporaneamente?
Come non detto, ricordavo male. L'import si usa solo per importare da packages, era una mia forzatura :D . Toglilo pure.
Se l'errore di prima non c'è più (e la compilazione non si è interrotta a causa di questo errore sull'import) allora era una questione di ordine di compilazione. Se invece non funziona nemmeno ora non mi viene in mente nient'altro. Sono abituato a lavorare con ambienti di sviluppo e devo dire che hanno contribuito a farmi dimenticare un po' di cose.
...quindi il compilatore ha creduto che "Class2" fosse il nome di un package e dopo di esso si aspettava di trovarci un punto e poi il nome di un altro package oppure della classe da importare.
Esatto... me ne sono reso conto dall'errore. Chiedo perdono. :D
per forza, mica puoi importare una classe così, direttamente. le classi si importano solo quando fanno parte di un altro package, quindi il compilatore ha creduto che "Class2" fosse il nome di un package e dopo di esso si aspettava di trovarci un punto e poi il nome di un altro package oppure della classe da importare.
hai provato a compilare i due files contemporaneamente?
avevi ragione! da compilare contemporaneamente! bene!.. mi ha creato i 2 file .class
sto usando ..linea di comando.
ora per eseguirli..?..
ho provato prima Class1 e poi Class2 .. e viceversa ma mi da, per entrambi, questo errore (quindi siamo in esecuzione):
Exception in thread "main" java.lang.NoSuchMethodError: main
nota: sto usando il comando
java -classpath . Class1 (o Class2)
.. perchè ho avuto nei miei primi programmi dei problemi e ho letto in internet che potevo risolverli così
mo'.. come faccio a risolvere quella eccezione?.. non è che devo eseguirli contemporaneamente?.. se sì con quale comando?
x naoto84: tranquillo, no problem.. capita.. sopratutto se facessero le cose + semplici e + immediate sarebbe + facile.
mo'.. come faccio a risolvere quella eccezione?.. non è che devo eseguirli contemporaneamente?.. se sì con quale comando? il codice che avevo scritto prima non era un vero programma Java che potesse essere eseguito, era solo un esempio. ci manca il metodo main, ed inoltre non ho inizializzato ne' la variabile i ne' l'oggetto class2 all'interno di Class1. per farlo diventare un programma accettabile (oltre che sintatticamente corretto) cambia Class1.java nel seguente modo:
class Class1 {
private int i;
private Class2 class2;
public static void main(String[] args) {
i = 12345;
class2 = new Class2();
pass();
}
private void pass() {
class2.pass(i);
}
}
poi ricompila e fallo andare, dovrebbe stamparti il messaggio scritto in Class2.java.
I nomi delle classi devono essere maiuscoli, in teoria una classe con un nome minuscolo dovrebbe costituire un errore di sintassi a tutti gli effetti.
I nomi delle classi sguono le normali regole degli identificatori definiti dalla grammatica di Java, quindi possono essere tranquillamente tutti minuscoli o composti da caratteri come _
Le due classi seguenti compilano e vengono eseguite correttamente:
public class a {
public static void main(String[] args) {
System.out.println("Ciao");
}
}
public class _ {
public static void main(String[] args) {
System.out.println("Ciao");
}
}
Sono le code conventions di Java, indicate dalla Sun stessa, che prescrivono l'uso della prima lettera maiuscola e le iniziali delle parole seguenti (Pascal case) per i nomi delle classi e delle interfacce
nota: sto usando il comando
java -classpath . Class1 (o Class2)
Questo comando che riporti serve a dichiarare un CLASSPATH (che è una variabile d'ambiente) temporaneo per la singola esecuzione. Scritto così non ne vedo l'utilità...
Vedo che stai partendo completamente da zero. Mi sento di consigliarti di usare un manuale di base, dove le cose da sapere sono esposte in modo ordinato. Impiegherai molto meno tempo e imparerai di più...
Questo comando che riporti serve a dichiarare un CLASSPATH (che è una variabile d'ambiente) temporaneo per la singola esecuzione. Scritto così non fa assolutamente niente perché dovrebbe essere seguito da un percorso.
Vedo che stai partendo completamente da zero. Mi sento di consigliarti di usare un manuale di base, dove le cose da sapere sono esposte in modo ordinato. Impiegherai molto meno tempo e imparerai di più...
il comando
java -classpath . nomeprogramma
funziona con i programmi che avevo scritto prima.
ma allora che comando devo usare ora per Class1 e Class2?
in parte hai ragione per il manuale.. ne ho sfogliati 2 o 3 .. poi come dite voi.. mi sso' scuccià!! :)).. accidenti.. è possibile che non ci sia un esempio così semplice? uffffffffffff.. cmq poi riprendo gli esempi del testo che ho e con cui seguo il corso.. ho voluto fare un esperimento.. + avanti rispetto le mie poche conoscenze.. e cmq non ho trovato sul testo un esempio che mi potesse essere utile per il problema che mi ero posto
il comando
java -classpath . nomeprogramma
funziona con i programmi che avevo scritto prima.
ma allora che comando devo usare ora per Class1 e Class2?
Funziona con quelli di prima e funzionerà con quelli appena scritti. Solamente specifica un'opzione inutile: puoi scrivere benissimo java nomeclasse...
E comunque la classe eseguibile, con le modifiche che ti ha scritto 71104, è solamente Class1. Quindi ora basta usare il comando java Class1
mi da 3 errori di sintassi su Class1..
ma prima di passarmi il codice voi non riuscite a provarlo?..
errore1:
:6:non-static variable i cannot be referenced from a static context..
mi da 3 errori di sintassi su Class1..
ma prima di passarmi il codice voi non riuscite a provarlo?..
errore1:
:6:non-static variable i cannot be referenced from a static context..
Da dove sono ora purtroppo non posso.
Gli errori sono causati da queste due dichiarazioni... sono errori a runtime dovuti al fatto che i membri della Class1 che puoi referenziare da dentro il main sono esclusivamente quelli statici, che esistono indipendentemente dal fatto che di Class1 ci siano istanze oppure no.
In Class1 sostituisci:
private int i;
private Class2 class2;
con
private static int i;
private static Class2 class2;
EDIT
Dimenticavo, anche qui devi aggiungere...
private static void pass()
:6:non-static variable i cannot be referenced from a static context.. ops ^^
lo faccio sempre quell'errore. come ti è stato detto basta che dichiari come static le due variabili membro e il metodo.
ma prima di passarmi il codice voi non riuscite a provarlo?.. sorry ma Eclipse mi vizia, e al momento ce l'avevo chiuso :D
hai avuto altri errori?
no, non ho avuto altri errori tanto è vero che mi hanno passato questa soluzione:
1° - file testp.java:
public class testp {
public static void main(String[] args) {
int c;
System.out.println ("Stampo a: " +primop.a);
System.out.println ("Stampo b: " +secondop.b);
System.out.println ("Scambio");
c=primop.a;
primop.a=secondop.b;
secondop.b=c;
System.out.println ("Stampo a: " +primop.a);
System.out.println ("Stampo b: " +secondop.b);
}
}
2° - file primop.java:
class primop {
static int a=10;
}
3° - file secondop.java:
class secondop {
static int b;
}
compilazione: javac primop.java secondop.java testp.java
esecuzione: java -classpath . testp
no, non ho avuto altri errori tanto è vero che mi hanno passato questa soluzione:
Ma insomma, oltre ad accedere direttamente a variabili di istanza di altre classi e ad avere creato due classi uguali (a parte una inizializzazione) e ad usare due volte un dato non inizializzato... è giusto :p . Chi te l'ha passata?
(ma siamo sicuri che nel terzo file quel int b non è inizializzato?)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.