Homepage  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


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Fondamenti di architettura e programmazione
Pages: [1] 2 
[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!!!!

0m4r
http://en.wikipedia.org/wiki/Hashtable
qui mi sembra spiegato bene!

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......

Reaper
[edit]

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; :?

sandrino83
certo

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? :)

sandrino83
si perchè?

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!!

Vikyg13
Risolto

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>();

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate