|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 75
|
[JAVA] Sto impazzendo con i packages...
Ciao a tutti,
raga ho bisogno del vostro aiuto, sto impazzendo dietro i package. Allora, devo creare una rubrica telefonica in java. Ho creato una cartella su c:\ chiamata esercizio e sto lavorando li dentro. Ho creato un file chiamato rubrica.java: Codice:
import java.io.*;
public class rubrica{
public static void main(String args[]) throws IOException{
BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
int Scelta = 0;
System.out.println("Rubrica elettronica in Java");
System.out.println();
System.out.println("1) Visualizzare contatti");
System.out.println("0) Chiudere rubrica");
System.out.println();
ciclo: for(;;){
System.out.print("Inserire il numero della tua scelta: ");
Scelta = Integer.parseInt(in.readLine());
switch(Scelta){
case 1:
//VISUALIZZARE CONTATTI
System.out.println("VISUALIZZANDO I CONTATTI");
break ciclo;
case 0:
//CHIUDERE RUBRICA
System.out.println("Chiusura agenda...");
break ciclo;
default:
//SCELTA NON VALIDA
System.out.println("Scelta non valida");
break;
}
}}
}
Il problema viene ora che devo creare un'altra classe nella quale creare il mio costruttore in modo che poi dalla classe main possa fare ad esempio: Codice:
RubricaTelefonica [] lamiarubrica = new RubricaTelefonica[5]; Ho pensato di creare un'altro file appunto e poi di unire il tutto con i package, ma non sono stato capace di farlo. Mi aiutate? Ne ho bisogno :/ |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Oct 2004
Messaggi: 159
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Puoi tranquillamente creare un secondo file, chiamiamolo Pippo.java, nel quale è dichiarata la tua classe Pippo il cui costruttore... può fare quello che gli pare. A questo puoi aggiungere un terzo file, Main.java, in cui dichiari una classe Main che contiene un metodo "main" che...fa quel che deve.
Se tutti i file sorgente sono nella stessa cartella, compilerai con un bel: javac -d . *.java e il compilatore farà il resto.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
i packages devono esser dichiarati sopra la dichiarazione delle classi
Codice:
packages miopackage; Codice:
%MIA_CARTELLA%\miopackage file: %MIA_CARTELLA%\rubrica\Rubrica.java Codice:
package rubrica;
public class Rubrica{
//blah blah blah
}
Codice:
package rubrica;
public class Altro{
//blah blah blah
}
Codice:
javac rubrica\*.java Codice:
java rubrica.Rubrica
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 75
|
Ecco, lo sapevo che c'era qualcosa di troppo strano =)
Comunque, vorrei approfittarne per chiedervi un'altra cosa. Per organizzare meglio il lavoro vorrei utilizzare quelle che in altri linguaggi sono le classiche funzioni/procedure, qui sono tutti metodi no? Vi incollo un pezzetto di codice: Codice:
import java.io.*;
public class rubrica{
public static void main(String args[]) throws IOException{
SOGGETTO [] miosoggetto = new SOGGETTO[1];
rubrica.Riempi();
rubrica.Visualizza();
}
public static void Riempi(){
miosoggetto[0] = new SOGGETTO("PAPERINO","PLUTO");
}
public static void Visualizza(){
miosoggetto[0].getCognome();
miosoggetto[0].getNome();
}
} //FINE CLASSE RUBRICA
//COSTRUTTORE
class SOGGETTO{
private String cognome;
private String nome;
public SOGGETTO(String cogn,String nom) {
cognome = cogn;
nome = nom;
}
public String getCognome(){
return cognome;
}
public String getNome(){
return nome;
}
} //FINE CLASSE SOGGETTO
Come faccio per indicargli che è stato dichiarato nel main? Devo renderlo tipo globale? Come? Grazie mille per il vostro aiuto!! |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
che io sappia la disposizione dei file sorgente in caso di uso dei packages è obbligata, mo provo, magari mi sbaglio
EDIT: hai ragione tu, è solo in fase di esecuzione che sei obbligato, comunque penso sia buona pratica pure coi files sorgenti rispettare le cartelle che avrai in fase di esecuzione
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB Ultima modifica di morskott : 12-06-2009 alle 15:56. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Puoi spostare la dichiarazione della variabile soggetto dal corpo del metodo main al corpo della classe rubrica. Poichè accedi alla variabile da contesti statici la variabile stessa deve essere statica.
Codice:
import java.io.*;
public class rubrica{
private static SOGGETTO [] miosoggetto = new SOGGETTO[1];
public static void main(String args[]) throws IOException{
rubrica.Riempi();
...eccetera
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#9 | |
|
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
Quote:
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Quote:
Per l'esecuzione in verità la questione della collocazione dei file class in cartelle appartenenti a rami aventi la stessa struttura del nome del package è un dettaglio della specifica versione di Java proposta da Sun. La piattaforma intesa come "standard" è indipendente da questa particolarità - e in effetti è possibile e a volte utile caricare le classi da un database attraverso le librerie standard.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
|
#11 | |
|
Member
Iscritto dal: Jan 2007
Messaggi: 75
|
Quote:
|
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 75
|
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Quote:
Hai tutta la mia solidarietà: io parto da Java e sto cercando di addentrarmi in Scala. Ogni tre righe tiro due parolacce e un lamento. E con tutta probabilità se uno "scaliano" vedesse i miei sorgenti perderebbe due o tre diottrie. L'importante è perseverare.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
|
#14 | ||
|
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
Quote:
In java puoi accedere a qualsiasi variabile che sia nello scope corrente, dentro ad un metodo puoi accedere a: variabili locali al metodo, variabili argomenti del metodo, variabili di classe (se il metodo è statico a variabili statiche, se il metodo non è statico a variabili sia statiche che non), puoi anche accedere a variabili non della tua classe se e solo se rientri nel modificatore applicato alla variabile che vuoi vedere: se la variabile ha modificatore "public" puoi accederci da dovunque, modificatore di default (se non ci scrivi nulla) solo dall'interno del suo package, "protected" dall'interno del suo package a da tutte le classi che ereditano e "private" solo dalla classe di dichiarazione. Quote:
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB Ultima modifica di morskott : 12-06-2009 alle 16:18. |
||
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 75
|
nessun problema morskott
Allora, aggiornamenti. Funziona tutto quello che deve funzionare, ripetizione menu, inserimento informationi (cognome, nome, età) previa richiesta di quanti inserirne, visualizzazione del tutto etc.. Mi chiedevo ora una cosa. Ogni volta che aggiungo nominativi, questi vengono salvati dopo quelli già presenti. Esiste un modo per ordinare automaticamente la classe creata ad hoc? Esiste un modo sbrigativo, avendo una classe già ordinata, per inserire il nuovo record nella posizione esatta in base all'ordinamento basato sul cognome? Ho provato con Arrays.sort e Collections.sort ma non credo facciano al caso mio. Oppure sbaglio ad usarle Grazie come sempre!!
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Hai tante opzioni per l'ordinamento. Collections.sort ordina liste (java.util.List). Arrays.sort ordina array (pippo[]). In entrambi i casi hai la possibilità di ordinare per criteri interni o esterni al tipo di oggetti contenuti nella lista o nell'array.
Per ordinare rispetto ad un criterio interno devi prendere la classe che dichiara il tipo di dato contenuto nella lista (diciamo la classe Pippo) e renderla implementazione dell'interfaccia Comparable<Pippo>. Per ordinare rispetto ad un criterio esterno devi creare un'istanza di Comparator<Pippo>. Ad esempio: Codice:
Comparator<Pippo> ordinamentoPerCognome = new Comparator<Pippo>() {
public int compare(Pippo a, Pippo b) {
return Collator.getInstance().compare(a.getCognome(), b.getCognome());
}
};
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 75
|
Ciao, grazie per la risposta.
Ho provato a fare come dici tu, ma probabilmente sbaglio qualche cosa e ritorno un errore quando provo a visualizzare la lista ordinata: La classe SOGGETTO è questa: Codice:
class SOGGETTO{
private String cognome;
private String nome;
Comparator<SOGGETTO> ordinamentoPerCognome = new Comparator<SOGGETTO>(){
public int compare(SOGGETTO A,SOGGETTO B) {
return Collator.getInstance().compare(A.cognome, B.cognome);
}
};
public SOGGETTO(String cogn,String nom) {
cognome = cogn;
nome = nom;
}
public String getCognome(){
return cognome;
}
public String getNome(){
return nome;
}
} //FINE CLASSE SOGGETTO
Codice:
private static SOGGETTO [] nominativo = new SOGGETTO[50]; Codice:
Arrays.sort(nominativo); Codice:
Exception in thread "main" java.lang.ClassCastException: SOGGETTO cannot be cast to java.lang.Comparable at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.sort(Unknown Source) at rubrica.Visualizza(rubrica.java:73) at rubrica.main(rubrica.java:30) |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Togli il comparator da soggetto:
Codice:
class SOGGETTO{
private String cognome;
private String nome;
public SOGGETTO(String cogn,String nom) {
cognome = cogn;
nome = nom;
}
public String getCognome(){
return cognome;
}
public String getNome(){
return nome;
}
} //FINE CLASSE SOGGETTO
Codice:
Comparator<SOGGETTO> ordinamentoPerCognome = new Comparator<SOGGETTO>(){
public int compare(SOGGETTO A,SOGGETTO B) {
return Collator.getInstance().compare(A.cognome, B.cognome);
}
};
Arrays.sort(nominativo, ordinamentoPerCognome);
Codice:
public class SOGGETTO implements Comparable<SOGGETTO> {
...eccetera
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 75
|
Ok funziona alla grande nel caso in cui imposti un numero di oggetti da creare e li riempia tutti, proprio come avevi detto tu.
Non esiste un modo per ordinare anche avendo oggetti null? Altrimenti mi tocca riallocare il numero di oggetti ad ogni operazione che ne modifica il numero, come ad esempio aggiunta/rimozione. |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Usa una lista al posto dell'array.
private static ArrayList<SOGGETTO> nominativi = new ArrayList<SOGGETTO>(); per aggiungere elementi scrivi: nominativo.add(un soggetto) anzichè: nominativo[x] = qualcosa per togliergli nominativo.remove(un indice); L'ordinamento lo fai con Collections: Collections.sort(nominativi, comparatore);
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:29.




















