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
ed ecco la classe provamappa.java che utilizza classmappa come tipo per gli oggetti della mappacodice: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; } }
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...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()); } } } }
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![]()


Rispondi quotando