尝试在HashMap中存储值时遇到一些问题

时间:2016-11-05 17:49:11

标签: java

我正在尝试创建一个程序,用户可以在其中创建一个将存储在HashMap中的新人。此外,您还可以向我希望存储的人员提供DVD。当我尝试使用NyPerson方法时,问题就出现了,当程序只是拒绝将新名称存储在HashMap中时。

这是我的代码(很多代码跟我一起):

使用nyPerson方法的类:

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 i 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 at 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("*")) {
        for (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() {
    for (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);
}
}

我的人类:

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() {
    for (DVD dvd : arkiv.values()) {
        System.out.println(dvd);
    }
}

public void printDVDer() {
    System.out.println("\n" + navn + ":");
    System.out.println("Eier:");
    for (String key : arkiv.keySet()) {
        System.out.println("+ " + key);
    }
    System.out.println("Laaner:");
    for (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课程:

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

}

这是我的主要(到目前为止):

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 FOR 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);
}
}
}
}

1 个答案:

答案 0 :(得分:0)

据我了解,您启动应用程序并输入1以添加新人。如果再次执行此操作,则在地图中找不到此人。问题是,您在循环的每次运行中实例化一个新的DVDAdministrasjon,因此每次添加一个人或一个新名称时,地图以及整个对象dvdadmin都会被覆盖。

要解决此问题,只需在循环外创建dvdadmin实例即可。作为进一步的评论,始终关闭I / O资源以避免资源泄漏,在您的情况下为Scanner