Salve a tutti
ho sviluppato un semplice programma che utilizza una hashmap popolandola di oggetti che hanno due attributi come chiave e due attributi (gli stessi per facilitarmi lo sviluppo) come attributo...
il problema è che quando faccio una ricerca, settando prima la coppia da cercare, non mi trova l'oggetto e per di più mi stampa a video quello che scrivo (quando non dovrebbe scrivere nulla)...
ecco la classe classmappa.java che definisce il tipo di oggetti che inserisco nella mappa
codice:
public class classmappa {
private int state;
private String message;
public void setState ( int state ){
this.state = state;
}
public int getState() {
return this.state;
}
public void setMessage (String message) {
this.message = message;
}
public String getMessage() {
return this.message;
}
}
ed ecco la classe provamappa.java che utilizza classmappa come tipo per gli oggetti della mappa
codice:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class provamappa {
static Map mappa = new HashMap();
private static String[] alfa = { "zero", "uno", "due" };
private static int i;
static classmappa i1 = new classmappa();
static classmappa i2 = new classmappa();
public static void main(String[] args) {
String input = null;
// popolo la mappa
for (i=0; i<3; i++) {
i1.setState(i);
i1.setMessage(alfa[i]);
mappa.put(i1, i1); // inserisco nella mappa la chiave e il valore
// appena settati
i2 = (classmappa) mappa.get(i1);
System.out.println(i2.getState()+ " "+i2.getMessage());
// qui stampa a schermo quanto appena inserito, output corretto!!
}
// visualizzazione con input da tastiera: mi stampa quello che scrivo
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
for (i=0; i<3; i++) {
try {
i1.setMessage((String) stdIn.readLine());
} catch (IOException e) {
e.printStackTrace();
}
i1.setState(i);
if (mappa.containsKey(i1)) // controllo se esiste una chiave
{
i2 = (classmappa) mappa.get(i1);
System.out.println(i2.getMessage());
}
}
}
}
il "gioco" sarebbe inserire una stringa da tastiera e se stringa AND intero coincidono con la chiave allora mi stampa a schermo il valore, mentre se non contiene la chiave non deve stampare nulla....considerando anche che l'intero è sempre fornito dal ciclo for...
invece, come già detto, il containsKey restituisce sempre true, anche se da tastiera scrivo "sette", e mi restituisce quello che scrivo (e non l'oggetto della mappa)....
un grazie a tutti quelli che mi daranno una mano, è un bel po che ci sto sbattendo la testa