我正在尝试创建一个程序,用户可以在其中创建一个将存储在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);
}
}
}
}
答案 0 :(得分:0)
据我了解,您启动应用程序并输入1
以添加新人。如果再次执行此操作,则在地图中找不到此人。问题是,您在循环的每次运行中实例化一个新的DVDAdministrasjon
,因此每次添加一个人或一个新名称时,地图以及整个对象dvdadmin
都会被覆盖。
要解决此问题,只需在循环外创建dvdadmin
实例即可。作为进一步的评论,始终关闭I / O资源以避免资源泄漏,在您的情况下为Scanner
。