|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
[Java] Aiuto su metodi
Salve ragazzi...io non ho mai programmato ad oggetti...ho solo visto qualcosina quindi chiedo pietà
Devo dare un esame dove è richiesto di conoscere un pò di java e leggendo degli esempi ci sono degli statement un pò complessi per me che non riesco a capire. Questo codice che sto leggendo riguarda un sistema di gestione bibliotecario di prestito libri e annessi... leggendo a giro per il codice incontro spesso questi metodi un pò complessi: premetto che qui siamo all'interno della classe Biblioteca: Codice:
public Testo getTesto(String titolo, String autore){
for(Iterator<Testo> i = testi.iterator();i.hasNext();){
Testo testo = (Testo)i.next();
if(testo.getAutore().equalsIgnoreCase(autore) && testo.getTitolo().equalsIgnoreCase(titolo))
return testo;
}
throw new RuntimeException("Testo non presente.");
}
Cioè io non capisco per esempio la condizione in quell'if! Se ci fosse stato solo : testo.getAutore() allora voleva dire che usavo il metodo getAutore della classe testo ma in questo caso? Come li leggo tutti quei metodi divisi dai punti? Grazie mille
__________________
Ho concluso felicemente molte trattative su questo forum! |
|
|
|
|
|
#2 | |
|
Member
Iscritto dal: May 2004
Messaggi: 278
|
Quote:
Una versione "allungata" dello stesso codice è: Codice:
...
for(Iterator<Testo> i = testi.iterator();i.hasNext();){
Testo testo = (Testo)i.next();
String autoreTesto = testo.getAutore();
String titoloTesto = testo.getTitolo();
if(autoreTesto.equalsIgnoreCase(autore) && titoloTesto.equalsIgnoreCase(titolo))
return testo;
}
...
__________________
PROCESSORE: AMD Athlon64 2800+ Boxed - MOTHERBOARD: Gigabyte K8NS nForce3 250 - SCHEDA VIDEO: 3D Prophet 9800 Pro 128MB - RAM: 512MB Corsair Value + 512 V-Data - CASE: Chieftech Dragon - ALIMENTATORE: Q-TEC 550W - HARD DISK: Seagate SATA 80 GB - LETTORE DVD: LG 16x52x - MASTERIZZATORE: Nec ND-3520 |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
Ciao, innanzi tutto grazie x adesso, Solo che non ho capito troppo bene il concetto! Io nella classe testo non ho alcun metodo che si chiama EqualsIgnoreCase().... Nella classe trovo i seguenti metodi:
GetAutore, getEsemplari, getPrenotazioni, getTitolo, addPrenotazione, addEsemplAre! Edit: ho letto che è un metodo Java. Ma in quale libreria si trova? Io qui vedo solo un import ovvero: Java.util.* Cmq saresti così gentile da spiegarmi come funziona questa concatenazione di metodi e a cosa serve fare così ? Grazie veramente!!!
__________________
Ho concluso felicemente molte trattative su questo forum! Ultima modifica di Solido : 29-08-2012 alle 22:59. |
|
|
|
|
|
#4 | ||
|
Member
Iscritto dal: May 2004
Messaggi: 278
|
Quote:
La classe String appartiene al package java.lang, che contiene tutte le classi "base" per la programmazione Java. I package sono dei contenitori utilizzati per raggruppare classi, che solitamente appartengono alla stessa categoria (es: java.io contiene tutte le classi relative all'input/output). Importando i package puoi utilizzare le classi da esso contenute e i metodi di queste classi. Il package java.lang però è un caso particolare, poiché viene automaticamente incluso anche senza scrivere il relativo import. Se così non fosse, il codice da te postato non compilerebbe, poiché il compilatore non sarebbe in grado di riconoscere nemmeno i tipi "base" come String. Tornando al metodo equalsIgnoreCase(), ti spiego più nel dettaglio come è viene effettuata la chiamata: 1) si parte da un oggetto di tipo Testo, sul quale viene chiamato il suo metodo getAutore(), che restituisce un oggetto di tipo String. 2) siccome hai un oggetto di tipo String, puoi chiamare su di esso i metodi della relativa classe (tabella "Method Summary"). Tra questi metodi troverai anche equalsIgnoreCase(...). 3) il metodo equalsIgnoreCase restituisce un booleano, che verrà usato per determinare il risultato della successiva clausola "AND". Quote:
Prendiamo ad esempio il codice esteso che ti avevo scritto prima e quello postato da te in origine. Le chiamate "intermedie" getAutore() e getTitolo() vengono eseguite solo quella volta all'interno del metodo, quindi la mia versione estesa non porta nessun beneficio poiché autoreTesto e autoreTitolo vengono utilizzate una volta sola. Poniamo invece che il metodo, ogni volta che viene trovato un libro diverso da quello che si sta cercando, stampi a video il nome e il titolo di questo libro: Codice:
for(Iterator<Testo> i = testi.iterator();i.hasNext();){
Testo testo = (Testo)i.next();
if(testo.getAutore().equalsIgnoreCase(autore) && testo.getTitolo().equalsIgnoreCase(titolo))
return testo;
else
System.out.println("Il libro " + testo.getTitolo() + " di " + testo.getAutore() + " non è quello che stiamo cercando.");
}
In questo caso utilizzare due variabili piuttosto che chiamare due volte getTitolo() e getAutore() non ha un impatto visibile sulle performance perché sono metodi molto semplici, ma se al loro posto dovessimo chiamare dei metodi che effettuano delle operazioni "pesanti" (es: reperimento/inserimento di una grande mole di dati da/in un database) allora la differenza sarebbe notevole.
__________________
PROCESSORE: AMD Athlon64 2800+ Boxed - MOTHERBOARD: Gigabyte K8NS nForce3 250 - SCHEDA VIDEO: 3D Prophet 9800 Pro 128MB - RAM: 512MB Corsair Value + 512 V-Data - CASE: Chieftech Dragon - ALIMENTATORE: Q-TEC 550W - HARD DISK: Seagate SATA 80 GB - LETTORE DVD: LG 16x52x - MASTERIZZATORE: Nec ND-3520 Ultima modifica di Ballantine : 30-08-2012 alle 00:59. |
||
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
Ok, quindi se ho capito bene il compilatore prima esegue (testo.getAutore)-> questo come risultato mi da una stringa e dopo a questa stringa risultante viene applicato il metodo equalIgnoreCase giusto?
Quindi per esempio se avessi avuto ad esempio: testo.getId che è un metodo che mi restituisce un intero non avrei potuto concatenare il metodo precedente? ps: che vuol dire una cosa del tipo: Punteggio tmp = punteggi.get(0); ?? non capisco quel get(0) Grazie mille! Mi sei stato di aiuto! Ho comprato un libro di java ma dopo aver buttato diverse decine di euro ho visto che non è scritto per niente bene, infatti questi concetti non riesco a reperirle
__________________
Ho concluso felicemente molte trattative su questo forum! Ultima modifica di Solido : 30-08-2012 alle 10:15. |
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Quote:
Supponendo che 'punteggi' sia un oggetto di tipo List<Punteggio>, cioè un oggetto che incapsula una lista di oggetti dello stesso tipo (in questo caso Punteggio), il metodo get restituisce l'oggetto che si trova nella lista alla posizione specificata dal parametro passato in ingresso. Quindi in questo caso vai a prendere il primo oggetto (perchè passi 0) che è presente nella lista. Ogni volta che vuoi sapere cosa fa un metodo basta consultare la documentazione online: http://docs.oracle.com/javase/6/docs....html#get(int)
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield Ultima modifica di Mettiu_ : 30-08-2012 alle 12:25. |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
Quote:
__________________
Ho concluso felicemente molte trattative su questo forum! |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
perdonatemi se vi rompo ancora...adesso sto leggendo un esempio di un sistema di gestione di una squadra di calcio! Il sistema deve tenere conto dei giocatori che stanno nella rosa e delle partite che vengono affrontate dalla squadra, sostituizioni ecc..
Adesso sono nella classe Partita e c'è questo pezzo di codice: Codice:
public void addPartecipazione(Partecipazione partecipazione){
partecipazioni.add(partecipazione);
}
public Partecipazione getPartecipazione(Giocatore g){
Iterator<Partecipazione> it = partecipazioni.iterator();
while (it.hasNext()){
Partecipazione partecipazione = it.next();
if (partecipazione.getGiocatore() == g) return partecipazione;
}
System.out.println("***Attenzione da Partita: non c'è la partecipazione del giocatore "+ g.getNome());
return null;
}
}
public void addPartecipazione(Partecipazione partecipazione) il primo Partecipazione è il tipo e il secondo partecipazione è il dato passato? e poi volevo chiedere una cosa su iterator... non mi torna come faccia a esaminare il primo elemento dato che inizia sempre dal prox elemento: while (it.hasNext()){ Partecipazione partecipazione = it.next();
__________________
Ho concluso felicemente molte trattative su questo forum! |
|
|
|
|
|
#9 | ||
|
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Quote:
Quote:
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
||
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
Quote:
__________________
Ho concluso felicemente molte trattative su questo forum! |
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Il concetto di indice, secondo me, è fuoriviante nel caso degli iterator. Un iterator serve a scorrere anche strutture dati non ordinate e non indicizzate da 0 a N-1, come siamo abituati a pensare con gli array. Quindi la prima volta che invochi next() lui prenderà semplicemente il primo elemento in base ad un criterio che dipende dalla struttura dati che stai visitando...
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
Quote:
__________________
Ho concluso felicemente molte trattative su questo forum! |
|
|
|
|
|
|
#13 | |
|
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Quote:
Ciao e buon studio!
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
Quote:
grazie mille intanto ^^
__________________
Ho concluso felicemente molte trattative su questo forum! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:16.




















