Pagina 1 di 2
[JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: giovedì 18 settembre 2008, 10:14
da misterxxitalia
ciao a tutti questo è il mio metodo:
Codice: Seleziona tutto
public String Leggi()throws JDOMException, IOException,
NullPointerException, IllegalArgumentException{
Document permessi = null;
SAXBuilder builderrubrica = new SAXBuilder();// Costruzione di un documeto SAX per rubrica
permessi = builderrubrica.build(new File("permessi.xml"));// Lettura del file XML rubrica
Element parametri = permessi.getRootElement();// Posizionamento sulla root (rubrica)
String minrimasti=((""+parametri.getChild("minrimasti").getTextTrim()));
String dataodierna=((""+parametri.getChild("data").getTextTrim()));
return minrimasti; //dataodierna ;????
}
come vedete ho 2 stringhe da fare ritornare...in un unico metodo è possibile?questo metodo serve per la lettura di un file xml (ho anche il metodo x la scrittura)e siccome sono dei metodi che devo invocare molto spesso è possibile chiamarli in modo temporalizzato?ovvero fare ogni due minuti lettura e scrittura?questo è come li invoco:
Codice: Seleziona tutto
public class Main {
public static void main(String[] args) {
parametri a = new parametri();
do{
try{
a.scrivi(a.documpermessi());
}
catch (IOException ex)
{
System.err.println(ex);
}
catch (JDOMException ex)
{
}
if (a.CoutDown().equals(a.OraCorrente()))a.Beep();
}
while (a.CoutDown().equals(a.OraCorrente()));
chiamando con un do questi metodi di continuo nn mi pare il caso...poi la cpu nn va a palla?insomma datemi dei consigli!!
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: giovedì 18 settembre 2008, 11:17
da neonum6
ti basta fargli ritornare un array di stringhe.
String [] array = new String[2];

Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: giovedì 18 settembre 2008, 11:20
da tux_errante
neonum6 ha scritto:
ti basta fargli ritornare un array di stringhe.
String [] array = new String[2];
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: giovedì 18 settembre 2008, 11:21
da misterxxitalia
ho capito utilizzerò un vector..mi sai dire come chiamare dopo 2 minuti un metodo lettura scrittura??
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: giovedì 18 settembre 2008, 11:35
da misterxxitalia
questo è per esempio un metodo da temporalizzare:
in pratica produce un beep dalla cassa del computer ma cosi lo fa all'infinito...come farlo durare 1 sec?
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: giovedì 18 settembre 2008, 18:09
da misterxxitalia
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: giovedì 18 settembre 2008, 19:53
da Zoff
Per temporizzare puoi usare le sleep dentro dei cicli (così però blocchi il programma, ma se non devi fare altro è OK):
Codice: Seleziona tutto
while(true){
System.out.print('\7');
try{Thread.sleep(1000);}catch(Exception e){}
}
Questo emette il segnale acustico ogni secondo (1000millisecondi)...
Se devi inserirlo dentro un programma complesso meglio i thread ma per questo meglio se li studi
ciauz
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: giovedì 18 settembre 2008, 20:49
da misterxxitalia
sto aggiungendo il vettore ho fatto cosi:
Codice: Seleziona tutto
private Vector dati;
public parametri ()
{
dati = new Vector();
}
public void addAppuntamento(parametri n)
{
dati.add(n);
}
nn da errore ma dice che è sconsigliato perchè poco sicuro..mi spiegate il motivo?
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: giovedì 18 settembre 2008, 22:36
da Zoff
misterxxitalia ha scritto:
sto aggiungendo il vettore ho fatto cosi:
Codice: Seleziona tutto
private Vector dati;
public parametri ()
{
dati = new Vector();
}
public void addAppuntamento(parametri n)
{
dati.add(n);
}
nn da errore ma dice che è sconsigliato perchè poco sicuro..mi spiegate il motivo?
Perché inserisci in una struttura privata dei dati provenienti dall'esterno...
In questa maniera chi utilizza il metodo ha un link che punta dentro la tua classe e puo' getire quella parte di memoria a tua insaputa creando inconsistenza nel sistema...
Dovresti crearti una copia di quei dati, se non erro si usa il metodo clone().
ciauz
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: giovedì 18 settembre 2008, 23:44
da misterxxitalia
allora ho fatto cosi:
Codice: Seleziona tutto
private Vector dati;
public parametri ()
{
dati = new Vector();
}
public Vector getParametri()
{
Vector appunt = (Vector)dati.clone();
return appunt;
}
public void addAparametro(parametri n)
{
getParametri().add(n);
}
il problema mi si presenta quando chiamo il metodo..
Codice: Seleziona tutto
a.addAparametro(0,(""+parametri.getChild("minrimasti").getTextTrim()));
a.addAparametro(1,(""+parametri.getChild("data").getTextTrim()));
il metodo richiede un elemento io invece ho una stringa...come li trasformo??
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: venerdì 19 settembre 2008, 0:01
da Zoff
misterxxitalia ha scritto:
allora ho fatto cosi:
Codice: Seleziona tutto
private Vector dati;
public parametri ()
{
dati = new Vector();
}
public Vector getParametri()
{
Vector appunt = (Vector)dati.clone();
return appunt;
}
public void addAparametro(parametri n)
{
getParametri().add(n);
}
il problema mi si presenta quando chiamo il metodo..
Codice: Seleziona tutto
a.addAparametro(0,(""+parametri.getChild("minrimasti").getTextTrim()));
a.addAparametro(1,(""+parametri.getChild("data").getTextTrim()));
il metodo richiede un elemento io invece ho una stringa...come li trasformo??
Non ho capito cosa intendi, dove sta il vero problema... Hai definito una classe parametri? A cosa serve? Perché l'hai inserita?
Inoltre, clone() lodevi chiamare sia quando restituisci il vettore (e fin qui OK) ma anche quando inserisci un oggetto nel vettore!
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: venerdì 19 settembre 2008, 10:29
da IppatsuMan
Zoff ha scritto:
misterxxitalia ha scritto:
sto aggiungendo il vettore ho fatto cosi:
Codice: Seleziona tutto
private Vector dati;
public parametri ()
{
dati = new Vector();
}
public void addAppuntamento(parametri n)
{
dati.add(n);
}
nn da errore ma dice che è sconsigliato perchè poco sicuro..mi spiegate il motivo?
Perché inserisci in una struttura privata dei dati provenienti dall'esterno...
In questa maniera chi utilizza il metodo ha un link che punta dentro la tua classe e puo' getire quella parte di memoria a tua insaputa creando inconsistenza nel sistema...
Dal codice sembrerebbe che "parametri" sia il nome della classe (male, le classi in Java devono iniziare sempre con la lettera maiuscola). Inserire un oggetto passato come parametro in un vettore va, in genere, benissimo. Dipende dalla semantica del tuo programma se l'oggetto vada clonato o meno prima di essere aggiunto - e dalla struttura dell'oggetto in questione, dato che se è un immutabile (ad esempio una stringa) non ha alcun bisogno di essere clonato. Suppongo che il warning che ricevi sia qualcosa tipo:
Codice: Seleziona tutto
Note: Sorgente.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Oppure:
Codice: Seleziona tutto
warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.Vector
a seconda del modo in cui compili il file. Il warning è dato dal fatto che utilizzi un Vector senza specificare che tipo di oggetti vi verranno inseriti. Se non sai cosa sono i
generics, per ora puoi ignorare la questione e andare avanti, ma quando ti farai un po' di più le ossa su Java, sarà il caso di studiarli: sono un metodo che ti permette di avere il controllo dei tipi a compile-time anche sulle collezioni come Vector, ArrayList, HashMap e così via.
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: venerdì 19 settembre 2008, 12:16
da misterxxitalia
si il messaggio che ricevo è proprio quello!nel vettore devo metterci solo stringhe...dici che per ora queste cose posso sorvolarle?
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: venerdì 19 settembre 2008, 12:54
da Zoff
misterxxitalia ha scritto:
si il messaggio che ricevo è proprio quello!nel vettore devo metterci solo stringhe...dici che per ora queste cose posso sorvolarle?
Se sono stringhe, e quindi
oggetti a stato modificabile come diceIppatsuMan non c'è alcun bisogno...
La domanda è: perché l'incapsulamento dentro la classe parametri?
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: venerdì 19 settembre 2008, 13:50
da misterxxitalia
ecco zoff ora ho capito la corbelleria che ho scritto!!!in pratica davo il vettore privato e la classe parametri pubblica!ecco come ho scritto adesso:
Codice: Seleziona tutto
private Vector parametri ()
{
Vector dati;
dati = new Vector();
return dati;
}
public void addAparametro(String n, int index)
{
try{
parametri().insertElementAt(n ,index);
}
catch (ArrayIndexOutOfBoundsException ex)
{
System.err.println(ex);
}
}
ed ecco come lo invoco:
Codice: Seleziona tutto
a.addAparametro((""+parametri.getChild("minrimasti").getTextTrim()),1);
a.addAparametro((""+parametri.getChild("data").getTextTrim()),2);
l'unica cosa è che nn so in quale punto del vettore devo mettere le stringhe nel punto 1,2, nn vanno bene...
Codice: Seleziona tutto
ava.lang.ArrayIndexOutOfBoundsException: 1 > 0
java.lang.ArrayIndexOutOfBoundsException: 2 > 0
come faccio a capirlo??grazie!
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: venerdì 19 settembre 2008, 19:51
da misterxxitalia
ho appena scoperto che nn aggiunge nulla al vettore..che sbaglio??
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: venerdì 19 settembre 2008, 19:58
da Zoff
misterxxitalia ha scritto:
ho appena scoperto che nn aggiunge nulla al vettore..che sbaglio??
Se lo usi come nel tuo penultimo post mi sembra piu' che ovvio...
Il tuo codice, cioè questo:
Codice: Seleziona tutto
private Vector parametri (){
Vector dati;
dati = new Vector();
return dati;
}
public void addAparametro(String n, int index){
try{
parametri().insertElementAt(n ,index);
}
catch (ArrayIndexOutOfBoundsException ex{
System.err.println(ex);
}
}
Ogni volta che chiami addAparametro() crea un nuovo vector con la funzione parametri(); e aggiunge l'elemnte al nuovo vector.
Nel momento in cui il metodo addAparametro() visto che Vectore era dichiarato dentro parametri() il GarbageCollector lo distrugge e ciao ciao inserimento...
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: venerdì 19 settembre 2008, 20:11
da misterxxitalia
ecco perche nn riuscivo ad aggiungere nulla!!scusa come potrei aggirare il problema?grazie!
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: venerdì 19 settembre 2008, 20:14
da Zoff
misterxxitalia ha scritto:
ecco perche nn riuscivo ad aggiungere nulla!!scusa come potrei aggirare il problema?grazie!
Io non ho capito cosa devi fare in quella funzione...
L'unico modo per rendere persistenti i dati è creare un vector globale cioè dentro la classe ma fuori dalle funzioni...
Re: [JAVA]un metodo puo fare ritornare piu di una stringa?
Inviato: venerdì 19 settembre 2008, 21:37
da misterxxitalia
ora ti spiego questo è il metodo che carica delle stringhe (prese da un documento xml) su un vector:
Codice: Seleziona tutto
a.addAparametro((""+parametri.getChild("minrimasti").getTextTrim());
il metodo addAparemetro è fatto cosi:
Codice: Seleziona tutto
public void addAparametro(String n, int index){
try{
parametri().insertElementAt(n ,index);
}
catch (ArrayIndexOutOfBoundsException ex{
System.err.println(ex);
}
}
e questo è il vettore (è privato per scopo di studio perchè è un dato delicato e non deve uscire dalla classe parametri):
Codice: Seleziona tutto
private Vector parametri ()
{
Vector dati;
dati = new Vector();
return dati;
}
e qui arriva il problema:ho bisogno di leggere il contenuto del vettore e ho fatto questo metodo:
Codice: Seleziona tutto
public Vector getParametri()
{
Vector appunt= (Vector)parametri().clone();
return appunt;
}
prendo il mio vettore faccio una copia e lo faccio uscire:mi hai detto che creando un nuovo vettore tutto si azzera,infatti se chiamo il metodo:
Codice: Seleziona tutto
if(a.getParametri().isEmpty())
System.out.println("vettore vuoto");
esce sempre vettore vuoto!come risolvo?grazie in anticipo!