java - Having a few issues when trying to store values in a HashMap -
i'm trying create program user can create new person stored in hashmap. further can lend dvd's across these persons want stored. problem arrives when i'm trying use method nyperson, when program refuses store new name in hashmap.
here's code(lot's of code bear me):
the class nyperson method:
import java.util.*; class dvdadministrasjon { private hashmap<string, person> navneliste = new hashmap<string, person>(); public void nyperson(string navnperson) { if(navneliste.containskey(navnperson)) { system.out.println(navnperson + " er allerde listen"); } else { person nyperson = new person(navnperson); navneliste.put(navnperson, nyperson); } } public void kjop(string navnperson, string navndvd) { if (navneliste.containskey(navnperson)) { navneliste.get(navnperson).kjop(navndvd); } else { system.out.println("det er ingen personer som heter " + navnperson); } } public void laan (string navnlaaner, string navnutlaaner, string navndvd) { if (navnlaaner.equals(navnutlaaner)) { system.out.println("du kan ikke laane en dvd fra deg selv"); } else if (navneliste.containskey(navnlaaner) && navneliste.containskey(navnutlaaner)) { person utlaaner = navneliste.get(navnutlaaner); person laaner = navneliste.get(navnlaaner); if (utlaaner.ledig(navndvd)) { laaner.laan(navndvd, utlaaner); } else { system.out.println("den dvd-en er utlaant eller eies ikke av denne personen"); } } else { system.out.println("sjekk @ laaner og utlaaner eksisterer"); } } public void retur (string navnperson, string navndvd) { if (navneliste.containskey(navnperson)) { navneliste.get(navnperson).retur(navndvd); } else { system.out.println("det er ingen personer som heter " + navnperson); } } public void visperson(string navnperson) { if (navnperson.equals("*")) { (person person : navneliste.values()) { person.printdvder(); } } else if (navneliste.containskey(navnperson)){ navneliste.get(navnperson).printdvder(); } else { system.out.println("det er ingen personer som heter " + navnperson); } } public void visoversikt() { (person person : navneliste.values()) { person.oversikt(); } } public void printpersoner(){ for(person person : navneliste.values()) system.out.println(person); } public void printarkiv(string navnperson) { navneliste.get(navnperson).printarkiv(); } public void avslutt(){ system.out.println("goodbye"); system.exit(0); } }
my person class:
import java.util.*; class person { private string navn; private hashmap<string, dvd> arkiv = new hashmap<string, dvd>(); private hashmap<string, dvd> laante = new hashmap<string, dvd>(); private hashmap<string, dvd> utlaante = new hashmap<string, dvd>(); public person(string navn) { this.navn = navn; } public void kjop(string navn) { if (arkiv.containskey(navn)) { system.out.println("du eier allerede denne dvd'en"); } else { dvd nydvd = new dvd(navn, this); arkiv.put(navn, nydvd); } } public void laan(string navndvd, person utlaaner) { laante.put(navndvd, utlaaner.utlaan(navndvd)); } public dvd utlaan(string navndvd) { dvd utlaandvd = arkiv.get(navndvd); utlaante.put(navndvd, utlaandvd); return utlaandvd; } public void retur(string navndvd) { if (laante.containskey(navndvd)) { laante.remove(navndvd).retur(); } else { system.out.println(navn + " laaner ikke denne dvd-en"); } } public void faatilbake(string tilbake) { utlaante.remove(tilbake); } public boolean ledig(string navndvd) { return (arkiv.containskey(navndvd) && !utlaante.containskey(navndvd)); } public void printarkiv() { (dvd dvd : arkiv.values()) { system.out.println(dvd); } } public void printdvder() { system.out.println("\n" + navn + ":"); system.out.println("eier:"); (string key : arkiv.keyset()) { system.out.println("+ " + key); } system.out.println("laaner:"); (string key : laante.keyset()) { system.out.println("- " + key); } } public void oversikt() { system.out.println("\n" + navn + ":"); system.out.println("eier: " + arkiv.size()); system.out.println("laant: " + laante.size()); system.out.println("utlaant: " + utlaante.size()); } public string tostring() { return this.navn; } }
dvd class:
import java.util.*; class dvd { private person eier; private person laaner; private string navn; public dvd(string navn, person eier) { this.navn = navn; this.eier = eier; this.laaner = null; } public person geteier() { return this.eier; } public string tostring() { return this.navn; } public void retur() { eier.faatilbake(navn); } }
and here's main(so far):
import java.util.*; public class dvdmain{ public static void main(string [] args){ scanner tastatur = new scanner(system.in); string alternativ = ""; while(!alternativ.equals("7")){ system.out.println("meny dvd-administrasjon"); system.out.println("1. ny person"); system.out.println("2. kjop"); system.out.println("3. laan"); system.out.println("4. vis"); system.out.println("5. oversikt"); system.out.println("6. retur"); system.out.println("7. avslutt"); alternativ = tastatur.nextline(); dvdadministrasjon dvdadmin = new dvdadministrasjon(); if (alternativ.equals("1")){ system.out.println("hva heter den nye personen?"); string nyperson = tastatur.nextline(); dvdadmin.nyperson(nyperson); system.out.println(nyperson + " er registrert!"); } else if (alternativ.equals("2")){ system.out.println("hvem har kjopt dvd-en?"); string navnperson = tastatur.nextline(); system.out.println("hva er tittelen paa dvd-en?"); string navndvd = tastatur.nextline(); dvdadmin.kjop(navnperson, navndvd); } else if(alternativ.equals("3")){ system.out.println("hvem vil laane dvd-en?"); string navnlaaner = tastatur.nextline(); system.out.println("hvem skal dvd-en laanes fra?"); string navnutlaaner = tastatur.nextline(); system.out.println("hva er tittelen paa dvd-en?"); string navndvd = tastatur.nextline(); dvdadmin.laan(navnlaaner, navnutlaaner, navndvd); } } } }
as far understand, start application , type in 1
add new person. if again, person not found in map. problem is, instantiate new dvdadministrasjon
in every run of loop, everytime person or new name added, map along whole object dvdadmin
overwritten.
to fix this, create dvdadmin
instance outside of loop. further remark, close i/o resources avoid resource leaks, in case scanner
.
Comments
Post a Comment