2015-12-27 14 views
8
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Scanner; 
import java.util.Set; 

public class mainClass 
{ 
    static Scanner keyboard = new Scanner(System.in); 
    static HashMap <Integer[], String> hMap; 

    public static void createAHashMap() 
    { 
     System.out.print("Express the initial capacity: "); 
     int initialCapacity = keyboard.nextInt(); 
     System.out.print("Express the load factor: "); 
     float loadFactor = keyboard.nextFloat(); 
     hMap = new HashMap <Integer[], String> (initialCapacity, loadFactor);  
    } 

    public static void insertProductInformations() 
    { 
     Integer values[] = new Integer[3]; 
     System.out.print("\nEnter product's barcode number: "); 
     values[0] = keyboard.nextInt(); 
     System.out.print("Enter product's name: "); 
     String productName = keyboard.next(); 
     System.out.print("Enter product's amount: "); 
     values[1] = keyboard.nextInt(); 
     System.out.print("Enter product's price: "); 
     values[2] = keyboard.nextInt(); 
     hMap.put(values, productName); 
    } 

    public static void displayList() 
    { 
     Set set = hMap.entrySet(); 
     Iterator iterator = set.iterator(); 
     System.out.println("\nBarcode Number\tProduct Amount\tProduct Price\tProduct Name");   
     while (iterator.hasNext()) 
     { 
      Map.Entry mEntry = (Map.Entry) iterator.next(); 
      System.out.print(mEntry.getKey() + "\t\t" + mEntry.getValue() + "\n"); 
     } 
    } 

    public static void main(String[] args) 
    { 
     createAHashMap(); 
     System.out.print("\nEnter to add product '1'\n"); 
     System.out.print("Enter to display products '2'\n"); 
     System.out.print("Enter your choice: "); 
     int entry = keyboard.nextInt();  
     while (entry != -99) 
     { 
      if (entry == 1) 
      { 
       insertProductInformations(); 
      } 
      if (entry == 2) 
      { 
       displayList(); 
      } 
      System.out.print("\nExpress your new choice (Exit: -99): "); 
      entry = keyboard.nextInt(); 
     }  
    } 
} 

Ciao!Visualizzazione problemi nella mappa di hash

Ho creato una mappa di hash che contiene informazioni sul prodotto in un supermercato. Tuttavia, non posso visualizzare correttamente i miei valori chiave (che è un array). Mi mostra cose irrilevanti tranne il nome del prodotto. Come posso correggere questo?

+0

typo in 'float loadFactor = keyboard.nextFloat(); hMap = new HashMap (initialCapacity, loadFactor); ', significa che loadFactor è' float', ma la tua hashmap memorizza 'String' ?? –

+0

@ Azat Nugusbayev Questa è la struttura della tabella hash correlata – lzxcl

risposta

5
static HashMap <Integer[], String> hMap; 

Un array non è adatto come una chiave nella HashMap, poiché due istanze di matrice differenti aventi gli stessi elementi esatti saranno considerate chiavi diverse. Questo comportamento deriva dal fatto che gli array non sovrascrivono il metodo equals, quindi due array arr1 e arr2 sono uguali solo se arr1==arr2.

La stampa dei tasti non è il tuo problema principale. Questo può essere risolto facilmente usando Arrays.toString per stampare la chiave dell'array.

Suggerisco di cambiare il HashMap in HashMap<List<Integer>, String>.

1

Sono d'accordo con la risposta di Eran che non dovresti scegliere la tua chiave come array Integer ma penso che il tuo problema di visualizzazione non sarà completamente risolto con Arrays.toString dato che fornirà l'array nel formato specificato e non in quello hai bisogno. È necessario formattare in modo esplicito i dati in base alle proprie esigenze. Un esempio di modifica dell'esposizione dall'esempio precedente potrebbe essere: -

Problemi correlati