 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
[HASHTABLE] Help Clicca QUI per vedere il messaggio nel forum |
Skioda86 |
??????????????
HASHTABLE
??????????????
Cosa è?
Dove posso trovare come utilizzarla?
Sò che è una specie di array che al posto di avere un contatore int....ha un codice identificativo (hash) per ogni oggetto inserito (put). E che per ritrovarlo bisogne prelevare il valore (get)!!!
Come lo si utilizza nel corpo del programma??
DOMANDA INERENTI ALL'APPELLO DI FEBBRAIO E MARZO DI MEREGHETTI E MALCHIODI!!!!!
HELP ME!!!!
|
Skioda86 |
GRAZIE MILLE 0m4r....e sapresti anche rixp a questo post che ho messo anche in "progetto!"????!!!!???
ESATTO!!! Mi accodo alla domanda di Brk!!!
E' tutto il pomeriggio che siamo quì in 3 a scervellarci su questo C..O di programma che...alla fine non abbiamo ancora capito cosa fa e SOPRATUTTO non abbiamo ancora capito la gerarchia in cui si svolge l'esecuzione del programma!!!!
Chi è la classe madre? Istruzione? E come mai mi dice di dice di far tornare dei valori tipo:
- public Object clone() o
- public String toString
se poi alla fine non posso passare nessun valore alla classe? E' come se la classe fosse nulla e non mi sembra logico definirla 'astratta' x' poi altrimenti dovrei ridefinire TUTTI i suoi metodi e non sarebbe istanziabile!!!!
HELP PLEASE!!!! |
sandrino83 |
ragazzi....è un casino....sta hashtable viene creata ma per riempirla?
seguendo la documentazione java mi da un'errore <<identifier expected>>...........possibile? |
Joda |
Originally posted by sandrino83
ragazzi....è un casino....sta hashtable viene creata ma per riempirla?
seguendo la documentazione java mi da un'errore <<identifier expected>>...........possibile?
Fondamenta
In Java tutte le classi sono classi figlie della super classe Object.
Esempio :
public class ClasseProva {}
è come se si scrivesse
public class ClasseProva extends Object {}
Ogni metodo dichiarato sia esso private o public deve ritornare un valore, per convenzione i metodi che non devono ritornare alcun valore vengono dichiarati usando la parola chiave void, i metodi che devono ritornare Stringhe, vengono dichiarati con la parola chiave String, etc... in pratica la tipo che viene definito per il valore da ritornare deve essere una Classe, quindi da ciò si deduche che String si riferisce alla classe String, nella definizione dei tipi si posso usare anche le abbrevazioni, ad esempio.
Esempio
Per ritornare un valore intero, si può usare la parola chiave int che fa riferomento alla classe Integer, boolean che fa riferimento alla classe Boolean, etc...
Identificatori per la classe
Dalla versione 5.0 di Java (J2SE5) sono stati introdotti, il Generics, che devono essere usati per definire il tipo di una Classe, e stabilire il tipo che i metodi di tale classe devono ritornare,altrimenti per default si riferisce alla super classe Object.
Se si dovessero omettere i generics, verrebbe dato un segnale di Warning, quindi il messaggio
<identifier expected> è dovuto al fatto che la Hastable deve essere definita come segue :
Hashtable<Tipo1,Tipo2> variabile.
Esempio :
- Hashtable<String,Integer> variabile
- Hashtable<Integer,Integer> variabile
- Hashtable<String,String> variabile
- ecc...
Hashtable
Per inserire i valori in una Hashtable bisogna usare il metodo put.
per svuotarla il metodo clear.
Esempio:
Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();
hashtable.put(chiave,valore);
documentazione Java (J2SE 5.0)
Buon lavoro. |
sandrino83 |
grazie mille della delucidazione.... |
sandrino83 |
Esempio:
Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();
hashtable.put(chiave,valore);
scusa ancora.....ho provato e riprovato ma l'errore in fase di compilazione (<identifier> expected) non ha intenzione di andare via....per sicurezza ho incollato la tua porzione di codice sostituendo chiave con una stringa contenuta da due ".." e valore con un numero ma niente....sempre lo stesso errore.....cosa sarà mai??????................ |
Joda |
Originally posted by sandrino83
Esempio:
Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();
hashtable.put(chiave,valore);
scusa ancora.....ho provato e riprovato ma l'errore in fase di compilazione (<identifier> expected) non ha intenzione di andare via....per sicurezza ho incollato la tua porzione di codice sostituendo chiave con una stringa contenuta da due ".." e valore con un numero ma niente....sempre lo stesso errore.....cosa sarà mai??????................
Se anche così non va le cose che mi vengono in mete sono :
1) Non usi la versione 5.0 (e quindi devi effetturare il casting diretto)
2) prova a mettere il casting ad esempio
Hashtable<String,Integer> e variabile in cui metti il valore che recuperi di tipo int, allora metti
variabile = (Integer)hastable.get(chiave); |
sandrino83 |
sto usando la 5.0 l'ultima disponibile scaricata qualche giorno fa......... |
Joda |
Originally posted by sandrino83
sto usando la 5.0 l'ultima disponibile scaricata qualche giorno fa.........
ma l'errore te lo da sulla riga in cui esegui il metodo put ? o quando tenti di recuperare i dati ? |
sandrino83 |
me lo da sulla riga del put....a recuperare i dati non ci arrivo nemmeno...... |
Joda |
Originally posted by sandrino83
me lo da sulla riga del put....a recuperare i dati non ci arrivo nemmeno......
ma hai fatto l'import del package ? |
sandrino83 |
porzione di codice:
Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();
hashtable.put("three", 3);
errore segnalato dal compilatore:
--------------------Configuration: <Default>--------------------
G:\Java\Istruzione.java:15: <identifier> expected
hashtable.put("three", 3);
^
1 error
Process completed. |
Joda |
Originally posted by sandrino83
porzione di codice:
Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();
hashtable.put("three", 3);
errore segnalato dal compilatore:
--------------------Configuration: <Default>--------------------
G:\Java\Istruzione.java:15: <identifier> expected
hashtable.put("three", 3);
^
1 error
Process completed.
ribadisco hai fatto prima di tutto :
import java.util.Hashtable; :? |
Joda |
Originally posted by sandrino83
certo
:pensa: potresti postare l'intero codice della classe ? |
sandrino83 |
public abstract class Istruzione{
Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();
hashtable.put("three", 3);
public abstract void esegui();
...
}
Logicamente ho usato l metodo put in questa classe solo a livello di test, ma anche mettendolo nelle classi estese il risultato non cambia
Intervento del moderatore: Post "ritoccato", codice eccessivo |
Reaper |
.........mannaggia la p......a............... :)
cosa usi per stendere il testo del programma? jcreator anke tu? :) |
Joda |
Originally posted by sandrino83
public abstract class Istruzione{
Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();
hashtable.put("three", 3);
....
}
Logicamente ho usato l metodo put in questa classe solo a livello di test, ma anche mettendolo nelle classi estese il risultato non cambia
Ho capito dove sbagli ...
Definizione di classe
Una classe può essere pubblica, privata, astratta e può estendere e/o implementare altre classi.
Ho visto che definisci una classe astratta, dunque...
Classi Astratte
le classi astratte si definiscono nel seguente modo :
public abstract NOMECLASSE {
dichiarare i metodi
}
Una classe astratta può contenere sia metodi astratti che statici.
metodi statici
I metodi statici sono quelli di cui viene definito il codice.
Esempio
code:
public void metodo() {
codice metodo
}
metodi astratti
I metodi astratti sono i metodi, la cui implementazione è lasciata allo sviluppatore, un pò come succede per le Interfacce.
Esempio di dichiarazione
code:
public void metodo() {} ;
Hashtable
la riga
code:
hashtable.put(chiave,valore);
la devi scrivere o nel metodo costruttore o in un metodo statico.
Metodo Costruttore
public class ClasseProva {
public ClasseProva() {
hashtable.put(chiave,valore);
}
}
Metodo statico
public class ClasseProva {
public ClasseProva() {
}
public void metodo_statico() {
hashtable.put(chiave,valore);
}
}
IDE Java
Di IDE Java ce ne sono differenti, comunque personalmente io consiglierei o netbeans oppure eclipse |
sandrino83 |
grazie mille per i consigli....proverò...... |
zyx |
Io volevo chiedere una cosa. In istruzione dichiaro una Hashtable, che non costruisco, ma che non posso costruire neanche nelle varie classi estese, perchè ogni qualvolta costruisco una di queste classi mi si costruisce anche una nuova Hashtable. Invece il mio scopo è quello di costruire una Hashtable condivisa da tutte le classi. Come posso fare? |
Joda |
Originally posted by zyx
Io volevo chiedere una cosa. In istruzione dichiaro una Hashtable, che non costruisco, ma che non posso costruire neanche nelle varie classi estese, perchè ogni qualvolta costruisco una di queste classi mi si costruisce anche una nuova Hashtable. Invece il mio scopo è quello di costruire una Hashtable condivisa da tutte le classi. Come posso fare?
scusa ma non ho capito potresti spiegare meglio ? |
unid |
1- Secondo me la parte più difficile è l'implementazione della classe sequenza e del suo clone();
Una volta fatta quella si è a metà dell'opera....
Qualcuno l'ha già fatta??
2- Rispondo a qui sopra: Se dichiari l'hashtable nella classe astratta Istruzione e le altre classi le estendi da questa... anche le altre classi ereditano la stessa hashtable..
abstract class Istruzione implements Cloneable{
Hashtable<String,Integer> memoria = new Hashtable<String,Integer>();
public abstract void esegui() throws ExecutionException;
public abstract Object clone();
public abstract String toString();
}
poi dalle altre classi ci accedi tranquillamente così:
Integer temp = (Integer)memoria.get(variabile);
memoria.put(variabile, new Integer(valore));
a seconda di quello che devi fare... |
zyx |
Si ma se faccio così come hai detto ora ogni volta che "programma.java" costruisce un istruzione(che può essere una qualsiasi di quelle da implementare) viene costruito anche un nuovo hashtable cosicchè io ho tanti Hashtable quante sono le "istruzioni" costruite. Invece bisogna avere un solo Hashtable che venga condiviso da tutte le "istruzioni" |
zyx |
Quello che voglio cercare di capire io è: come creare un solo "Hashtable<String,Integer> memoria" dove però tutte le istruzioni possono scriverci e leggerci |
zyx |
Per quanto riguarda la classe Sequenza io ho dichiarato un oggetto array. Ad esempio Array array. poi nel costruttore ho fatto elenco=e e poi un int arrayLength=array.length(elenco) così so quanti elementi ci sono nell'array.Poi nel metodo esegui ho fatto un for da 0 a arrayLength, e nel corpo del for ho fatto elenco[i].esegui. Credo e spero sia giusto. |
unid |
Non crea altre hashtable, usa sempre la stessa... importante è che le sottoclassi estendano tutte Istruzione.
Il metodo clone non l'hai implementato?? |
Joda |
per quanto riguarda l'hashtable, potresti creare una classe che la istanzi (una volta sola), poi passi l'oggetto alle successive classi che vengono create. |
zyx |
Scusami se magari sono un po deficiente ma anch'io ciò pensato ma non riesco a creare una classe che istanzio una sola volta, perchè come e quando la istanzio. Il metodo main sui cui devono girare queste classi è stato dato dai prof. E li non esiste nessuna classe che mi permetta di istanziare un classe che crei l'oggetto Hashtable |
Joda |
Originally posted by zyx
Scusami se magari sono un po deficiente ma anch'io ciò pensato ma non riesco a creare una classe che istanzio una sola volta, perchè come e quando la istanzio. Il metodo main sui cui devono girare queste classi è stato dato dai prof. E li non esiste nessuna classe che mi permetta di istanziare un classe che crei l'oggetto Hashtable
ma tu la classe col main quante volte la devi lanciare? |
zyx |
Una volta ma non la creo io. E' stata data nel progetto dicendo che le classi che noi dobbiamo scrivere devono compilare correttamente questa classe main. |
Joda |
Originally posted by zyx
Una volta ma non la creo io. E' stata data nel progetto dicendo che le classi che noi dobbiamo scrivere devono compilare correttamente questa classe main.
No perchè se no se il codice fosse stato modificabile (della classe del metodo main) di fare in modo che il main istanziasse l'hashtable e poi gliela passavi... |
zyx |
Ma dici che se modifico la classe main con questo mio accorgimento e modifico anche tutti i costruttori delle altre classi a prendere come argomento questa variabile di tipo hashtable, non accettano il progetto? |
Joda |
Originally posted by zyx
Ma dici che se modifico la classe main con questo mio accorgimento e modifico anche tutti i costruttori delle altre classi a prendere come argomento questa variabile di tipo hashtable, non accettano il progetto?
bisogna vedere se nel progetto è consentito modificare la classe... |
zyx |
Ma se no secondo te ce qualche altra soluzione??? |
Joda |
Leggendo qua :
Classe Istruzione :
La classe dovrà contenere:
la definizione della Hashtable memoria, deputata a contenere i
valori memorizzati nelle variabli, utilizzando come chiave di ricera i
nomi dati alle variabili; attenzione: la definizione di questa hashtable
dovrà essere compatibile con il resto delle definizioni fatte nella
classe, e, soprattutto, dovrà essere fatta in modo da essere leggibile
e scrivibile da tutte le istanze delle classi derivate da Istruzione,
nonché condivisa da queste istanze;
e qua :
Classe Dichiara:
l'implementazione del metodo esegui della superclasse dovrà
essere fatta in modo da inserire nella hashtable della superclasse
una variabile avente nome uguale a quello contenuto in variabile
e inizializzata a 0; il metodo dovrà lanciare l'eccezione
ExistingVariableException qualora l'argomento variabile
identifichi una variabile precedentemente dichiarata;
quindi definirei la Classe Istruzione come astratta ed il metodo clone ed esegui come astratti (come richiesto), definirei sempre e comunque, vedi post precedenti, il metodo costruttore (eventualmente vuoto) e definirei la variabile memoria come segue:
protected Hashtable<String,Integer> memoria = new Hashtable<String,Integer>();
poi definirei la classe Dichiara in modo tale che estenda la classe Istruzione.
public class Dichiara extends Istruzione (come richiesto)
dopo di che nel metodo costruttore (come da regola) metterei come prima istruzione la parola chiave super(); ed implementerei i metodi.
Modificatore protected
E' un modificatore che si può applicare sia ai metodi, che alle variabili. Ha lo scopo di rendere visibile il metodo e/o le variabili a tutte le classi che estendono come super-classe la classe che defisce tali metodi e/o variabili.
P.S. : E' caldamente cosigliato di usarlo solo se necessario e non abusarne.
Joda. |
Reaper |
Originally posted by zyx
Ma dici che se modifico la classe main con questo mio accorgimento e modifico anche tutti i costruttori delle altre classi a prendere come argomento questa variabile di tipo hashtable, non accettano il progetto?
penso che non lo accettimo proprio.. no? |
zyx |
Originally posted by Joda
Leggendo qua :
e qua :
quindi definirei la Classe Istruzione come astratta ed il metodo clone ed esegui come astratti (come richiesto), definirei sempre e comunque, vedi post precedenti, il metodo costruttore (eventualmente vuoto) e definirei la variabile memoria come segue:
protected Hashtable<String,Integer> memoria = new Hashtable<String,Integer>();
poi definirei la classe Dichiara in modo tale che estenda la classe Istruzione.
public class Dichiara extends Istruzione (come richiesto)
dopo di che nel metodo costruttore (come da regola) metterei come prima istruzione la parola chiave super(); ed implementerei i metodi.
Modificatore protected
E' un modificatore che si può applicare sia ai metodi, che alle variabili. Ha lo scopo di rendere visibile il metodo e/o le variabili a tutte le classi che estendono come super-classe la classe che defisce tali metodi e/o variabili.
P.S. : E' caldamente cosigliato di usarlo solo se necessario e non abusarne.
Joda.
Ma così cmq mi crea tanti hashtable per quante sono le classi no? |
Joda |
Originally posted by zyx
Ma così cmq mi crea tanti hashtable per quante sono le classi no?
no.
si creano tanti hastable solo se metti la definizione di hashtable nel metodo costruttore della super classe. |
zyx |
cioe devo fare così:
import java.util.*;
public absract class Istruzione {
protected Hashtable<String,Integer> memoria=new Hashtable<String,Integer>()
....
Intervento del moderatore: Post "ritoccato", codice eccessivo |
Joda |
Originally posted by zyx
cioe devo fare così:
import java.util.*;
public absract class Istruzione {
protected Hashtable<String,Integer> memoria=new Hashtable<String,Integer>()
...
Intervento del moderatore: Post "ritoccato", codice eccessivo
}
esatto.
Ricordati i ";" alla fine di dell'istruzione. |
zyx |
C'è lo fatta bisogna dichiarare "Istruzione" come interface e allora funziona. Grazie Joda |
Brk |
Mi spiegheresti perchè devo dichiararla come interfaccia anzichè estendere semplicemente le classi figlie?
Grazie ^^ |
Brk |
Altra cosa...
Ma è possibile creare un array di istruzione che, essendo astratta, non mi è possibile istanziarne oggetti???
Grazie |
zyx |
Nella classe che estendi puoi farlo |
sandrino83 |
mi accodo alla richiesta di spiegazione del perchè istruzione è un interfaccia......e poi.....sto metodo esegui() in una classe come sequenza come si implementa? cosa eseguo? attraverso che????? |
zyx |
ma io penso che sia un interfaccia ma non ne sono sicuro. Però funziona.Ho già provato a dare una spiegazione di come implementare il metodo esegui in sequenza. Però anche qui non sono sicuro. poi io il metodo clone lo implemento ma non lo uso mai, voi? |
sandrino83 |
il metodo clone lo uso anche se non ce n'è bisogno con tutto.....basta castare ogni variabile o istruzione che cloni......non vedo altro utilizzo....d'altronde se ci dicono ci COPIARE scritto in grassetto guarda caso nei posti dove non ce ne sarebbe bisogno.....credo sia un modo per farci capire di usarlo lo stesso.... |
sandrino83 |
zyx....tu hai scritto.....Oppure la classe sequenza che è anch'essa un istruzione il compito di esegui() è quello di far eseguire in ordine le istruzioni passate come argomento......
Ok è chiaro....in sostanza un ciclo for mi tira fuori in sequenza tutte le istruzioni contenute nell'array......ok.....ma per eseguirle nel senso stretto del termine....??? |
zyx |
Era nell'altro forum cmq va bè. Allora dichiari un oggetto array, ad esempio Array array. dichiari un int lunghezzaArray, e nel costruttore di sequenza metti lunghezzaArray=array.getLength(elenco).n questo modo sai d quante istruzioni è composto l'array. poi in esegui fai un for e fai elenco[i].esegui(); |
sandrino83 |
si fin quà c'ero......ma nel costruire il metodo esegui che senso ha mettere al suo interno il metodo stesso che sto andando a costruire???
in sostanza
esegui(){
..............bla bla bla.....
.....elenco[i].esegui();}
.....????????.... |
zyx |
allora tu immagina che in sequenza vengono inserite 3 istruzione una è l'istruzione dichiara una l'istruzione selezione, e l'altra assegna. In questa maniera l'esegui della sequenza eseguirà prima l'esegui di dichiara poi l'esegui di selezione, e infine l'esegui di assegna. |
zyx |
Quello che non riesco a capire io è io faccio il metodo clone ma quando lo uso? mai??? |
elias86 |
qualcuno sa dove trovare qualche esempio di uso della HASH-TABLE??? Mi pare che nell'esempio del progetto di qualche anno fa (che hanno presentato in orario Cazzola) veniva utilizzata.. qualcuno ha segnato il link che aveva dato il tipo???
cmq stò progetto è un macello |
sandrino83 |
Houston abbiamo un problema......anzi il problema ce l'ho solo io.......nonostante abbia dichiarato protected l'hashtable memoria mi si inizializza di nuovo tutto....mi spiego meglio.....per verificare il funzionameno di alcune classi ho creato una classe ad hoc simile a programma.java....provo a dichiarare la variabile e va tutto bene....vado ad assegnare un valore alla variabile appena dichiarata e noto che l'hashtable è vuota cioè la variabile precedentemente dichiarata è sparita.............qualcuno mi aiuta? |
nous |
Se non ho capito male la Hashtable è popolata in ogni costruttore..così facendo non è condivisa ma ne crei una per ogni istanza di classe.
Se ne vuoi una per tutte definiscila come variabile non di istanza ma di classe (static Hashtable<String,Integer> myCommonHash), e poi riferisciti ad essa come MyClass.myCommonHash.
Oppure, più elegantemente implemente un metodo statico della classe astratta mamma GetHashtable che ti ritorna l'Hashtable statica.
I membri di classe sono condivisi da tutte le istanze della classe, quelli di istanza concorrono a determinare lo stato dell'oggetto e quindi non sono condivisi.
Ma forse non ho capito io il problema..il thread è troppo lungo per essere letto tutto :)
P.s. Ma è possibile finire un corso di programmazione con tutti questi dubbi? |
zyx |
ma io ho dichiarato "istruzione" come interfaccia.... e funziona |
nous |
Ok, ma l'interfaccia ti definisce giusto i metodi che l'oggetto deve fornire all'esterno..a meno che tu abbia definito l'Hashtable nell'interfaccia, in quel caso essendo l'interfaccia un membro di classe dovrebbe funzionare. Però ribadisco che il thread l'ho abbandonato dopo la prima pagina, se mi sono perso qualcosa mi si perdoni. |
nous |
Originally posted by nous
Se non ho capito male la Hashtable è popolata in ogni costruttore..così facendo non è condivisa ma ne crei una per ogni istanza di classe.
Ok , avevo capito male :)
Mi sono riletto tutto il thread. |
trygun82 |
Ti sono vicino.....
Anche noi stiamo cercando di capirne qlc! |
nous |
Off-Topic:
Si ma io non devo dare l'esame, la mia era pura curiosità accademica :)
|
sandrino83 |
ma come faccio a condividere la hashtable? |
Joda |
Originally posted by sandrino83
ma come faccio a condividere la hashtable?
con una classe astratta puoi dichiararla protected. |
sandrino83 |
si ho già letto quello ke dicevi tu ma non funziona lo stesso......crea sempre e comunque una hashtable x ogni classe..... |
sandrino83 |
allora: io scrivo così
abstract class Istruzione
protected Hashtable<String,Integer> memoria = new
Hashtable<String,Integer>();
sbaglio qualcosa? |
Joda |
si, la definizione è giusta.
dunque le interfaccie non possono creare istanze di oggetti, quindi la devi creare in una classe essa sia astratta o statica, fai una cosa oltre a definirla protected, definiscila anche static come disse nous. |
sandrino83 |
però devo dichiarare public le classi estese giusto? ame funziona così......... |
Urborg_team |
Originally posted by zyx
ma io ho dichiarato "istruzione" come interfaccia.... e funziona
e come l'hai dichiarata interfaccia..mostra il codice please! |
Joda |
Originally posted by sandrino83
però devo dichiarare public le classi estese giusto? ame funziona così.........
ovvio, tutte le classi che devono essere usate in altre parti devono essere public. |
sandrino83 |
ok.......allora ci siamo.......grazie |
Joda |
Originally posted by sandrino83
ok.......allora ci siamo.......grazie
prego |
unid |
Dunque io l'hashtable lo uso così:
abstract class Istruzione{
Hashtable memoria=new Hashtable();
.......
}
poi nelle varie classi accedo e inserisco elementi con .get e .put.. solo che se in Dichiara uso .put e metto qualcosa nell'hashtable memoria non riesco ad accederci in Assegna... mi dice empty hashtable...
QUINDI... chiedo se qualcuno di voi ha trovato il modo per farlo funzionare....
INOLTRE... siete riusciti a impaginare le stringhe che deve stampare in modo corretto? a me stampa tutto quello che dovrebbe stampare ma lo stampa sfalsato.... |
Urborg_team |
Io l'ho scritta così
abstract class Istruzione{
public static Hashtable<String,Integer> memoria= new Hashtable<String, Integer>();
abstract public void esegui();
...
ma purtroppo non funziona!
Intervento del moderatore: troppo codice...limitiamoci nelle pubblicazioni del codice grazie! |
sandrino83 |
protected static...... |
unid |
a me parte, scrive tutto (SFALSATO) e poi quando parte l'esegui va in LOOP...
sbuff... ora trovare gli errori in 600 righe è un casino... |
Urborg_team |
Originally posted by unid
a me parte, scrive tutto (SFALSATO) e poi quando parte l'esegui va in LOOP...
sbuff... ora trovare gli errori in 600 righe è un casino...
ma allora ti va? e come l'hai dichiarata la classe o interfaccia Istruzione? |
Urborg_team |
con questa dichiarazione:
import java.util.*;
interface Istruzione{
public static Hashtable<String,Integer> memoria= new Hashtable<String, Integer>();
public void esegui();
public Object clone();
public String toString();
}
mi da questo errore
Exception in thread "main" java.lang.ArrayStoreException: Decrementa
at Programma.main(Programma.java:14)
almeno l'errore è cambiato |
Skioda86 |
Originally posted by Urborg_team
Io l'ho scritta così
abstract class Istruzione{
public static Hashtable<String,Integer> memoria= new Hashtable<String, Integer>();
abstract public void esegui();
abstract public Object clone();
...
accedere alla stessa tabella di Istruzione che viene istanziata la prima volta che viene richiesto nel codice...
ma purtroppo non funziona!
Io ho notato che se definisci la Hashtable public static, nel corpo del programma e nelle classi figle funziona da dio. E cioè Viene creato una sola Hashtable raggiungibile per esempio scrivendo solo memoria.put(...)
oppure memoria.size(....) ecc... Non serve invocare il nome della classe perchè tutte le classi vengono invocate come static dal metodo main del programma. Non sò se mi sono spiegato:?, ma...provare per credere!!!:D |
unid |
Quindi tu hai finito il progetto? Funziona? come hai fatto a fare i toSting come dice lui... Cioè come hai fatto a impaginarlo giusto |
spenk.85 |
Ma l'eccezione ExecutionException, va lanciata quando si verificano anche le altre eccezioni? |
Urborg_team |
Originally posted by Skioda86
Io ho notato che se definisci la Hashtable public static, nel corpo del programma e nelle classi figle funziona da dio. E cioè Viene creato una sola Hashtable raggiungibile per esempio scrivendo solo memoria.put(...)
oppure memoria.size(....) ecc... Non serve invocare il nome della classe perchè tutte le classi vengono invocate come static dal metodo main del programma. Non sò se mi sono spiegato:?, ma...provare per credere!!!:D
mi fai vedere come dichiari la classe Istruzione e poi il pezzo di codice dove usi la memoria per scrivere e leggere? |
nous |
Originally posted by Skioda86
Io ho notato che se definisci la Hashtable public static, nel corpo del programma e nelle classi figle funziona da dio. E cioè Viene creato una sola Hashtable raggiungibile per esempio scrivendo solo memoria.put(...)
oppure memoria.size(....) ecc...
Che poi era quello che avevo detto io ;) |
ciops |
Intervento del moderatore: Dall'alto mi sono arrivate delle lamentele di pezzi "abbondanti di codice", mi dispiace ma devo ritoccare un po, in futuro limitiamoci nel postare i codici, grazie. |
WillyWonka |
Ciao, ma sti cacchio di hashtable come si fanno ad usare?noi abbiam usato il seguente codice per un esempio, e come volevasi dimostrare non funziona..., me lo poterste correggere e dare delle delucidazioni:
class HashProva{
public static void main (String args[]){
Hashtable h = new Hashtable();
h.put("one", new Integer(1));
Intervento del moderatore: Codice limato
L'errore che ci da è:
Note: HashProva.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
che cercando in rete non ci capisce che cazzo è... :twisted: |
Urborg_team |
Originally posted by WillyWonka
Ciao, ma sti cacchio di hashtable come si fanno ad usare?noi abbiam usato il seguente codice per un esempio, e come volevasi dimostrare non funziona..., me lo poterste correggere e dare delle delucidazioni:
class HashProva{
public static void main (String args[]){
Hashtable h = new Hashtable();
h.put("one", new Integer(1));
Intervento del moderatore: Codice limato
L'errore che ci da è:
Note: HashProva.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
che cercando in rete non ci capisce che cazzo è... :twisted:
la risposta è qualche post sopra.
quando tu dichiari la tabella devi dirgli che tipi conterrà
se in questo caso deve contenere "one" e Integer(1) i tipi sono stringa e Integer quindi:
Hashtable<String, Integer> h = new Hashtable<String, Integer>();
ok? |
Joda |
Originally posted by WillyWonka
Ciao, ma sti cacchio di hashtable come si fanno ad usare?noi abbiam usato il seguente codice per un esempio, e come volevasi dimostrare non funziona..., me lo poterste correggere e dare delle delucidazioni:
class HashProva{
public static void main (String args[]){
Hashtable h = new Hashtable();
h.put("one", new Integer(1));
Intervento del moderatore: Codice limato
L'errore che ci da è:
Note: HashProva.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
che cercando in rete non ci capisce che cazzo è... :twisted:
prova a riscriverlo così :
import java.util.*;
public class HashProva {
public static void main (String args[]){
Hashtable<String,Integer> h = new Hashtable<String,Integer>();
h.put("one", 1); |
Vikyg13 |
Qualcuno ha idea perchè quando assegno un valore ad una variabile dichiarata è tutto ok, ma se dichiaro una variabile ad es. "ok" ed assegno un valore ad una variabile mai dichiarata ad es. "no", assegna il valore ad "ok"....??????
Sarà un problema dell'hashtable? |
Joda |
Originally posted by Vikyg13
Qualcuno ha idea perchè quando assegno un valore ad una variabile dichiarata è tutto ok, ma se dichiaro una variabile ad es. "ok" ed assegno un valore ad una variabile mai dichiarata ad es. "no", assegna il valore ad "ok"....??????
Sarà un problema dell'hashtable?
:? ti potresti spiegare meglio ? |
Vikyg13 |
In pratica se faccio Dichiara("ok");
e poi Assegna("ciao", 3). Mi assegna il 3 alla variabile "ciao" piuttosto che lanciare l'errore InvalidVariableException!! |
Joda |
Originally posted by Vikyg13
In pratica se faccio Dichiara("ok");
e poi Assegna("ciao", 3). Mi assegna il 3 alla variabile "ciao" piuttosto che lanciare l'errore InvalidVariableException!!
Suppongo che Assegna sia un metodo che abbia il compito di aggiungere un elemento all'hashtable, mediante il metodo put, se è così è normale che non venga lanciata alcuna eccezione, dato che il metodo put non fa alcun controllo. Se vuoi assegnare un valore ad una variabile "dichiarata" nella hashtable, devi prima di tutto verificare se esesiste la suddetta variabile tramite il metodo containsKey messo a disposizione dalla classe Hashtable, e se non è contenuto lanciare l'eccezione tramite il codice :
code:
throw new ClasseEccezione(argomento);
es:
if (!hashtable.containsKey("ciao"))
throw new InvalidVariabileException("Variabile ciao non dichiarata, impossibile effettuare l'assegnazione");
hashtable.put("ciao",3);
l'else non serve dato che il lancio di un eccezione, fa automaticamente terminare il metodo.
|
nous |
Si ma se glielo facciamo tutto noi il progetto, alla fine ci pagano da bere :)?
Scherzi a parte, direi che per passare questo esame come minimo si debba saper leggere la documentazione...il comportamento dell'hashtable è documentatissimo. |
Joda |
Originally posted by nous
Si ma se glielo facciamo tutto noi il progetto, alla fine ci pagano da bere :)?
Scherzi a parte, direi che per passare questo esame come minimo si debba saper leggere la documentazione...il comportamento dell'hashtable è documentatissimo.
certo che poi passiamo a batter cassa :asd:
beh di certo tutto è in documentazione... cmq non penso che i progetti, siano su cose non spiegate a lezione ;), o per lo meno che non abbiano detto dove reperirle le info. |
nous |
Infatti la mia opinione è che sia troppo comodo postare qui ed ottenere la soluzione bella e pronta...per quello eviterei di postare codice che risolve direttamente i problemi...non per bastardaggine ma perchè trovo che sia una cosa poco utile per chi in futuro dovrà anche lavorare in questo campo. |
yoruno |
Off-Topic: Giustissimo, infatti troppo codice è pure vietato :)
Però non andate OT, please :) |
Joda |
Originally posted by yoruno
Off-Topic: Giustissimo, infatti troppo codice è pure vietato :)
Però non andate OT, please :)
Giusto, rientriamo subito :) |
dany12185 |
Avete ragione, ma per allineare in modo corretto le stringhe non abbiamo mai fatto niente di simile a lezione. E se dovessimo usare la ricorsione (come ha suggerito qulcuno) è un casino perchè cazzola non ha spiegato praticamente niente e dalle sue slide non si capisce molto. |
nastanada |
scusate se riposto la questione ma qui forse è + appropriata....
ho scritto il progetto in java 1.5 e il sito di sottoposizione non me lo compila, a me va perfettamente e non ho usato che classi standard di java.
cosa devo fare riscriverlo in 1.4 solo perchè il sito non è aggiornato?????????
da errore proprio sulla dichiarazione della hashtable in 1.5 ossia
------> Hashtable<String,Integer> memoria= new Hashtable<String, Integer>(); |
|
|
|
|