错误在哪里?我想添加从哈希表中删除项目的功能

问题描述

我创建了一个哈希表并添加添加新行的功能,但我也想添加删除我创建的行的功能,但遇到了错误

package com.company;
import java.util.Hashtable;
import java.util.Scanner;
import java.util.*;

public class Main {

    public static void main(String[] args) {

        Hashtable<Integer,String> TennisClub = new Hashtable<Integer,String>();

        TennisClub.put(1,"Bob");
        TennisClub.put(2,"Aaron");
        TennisClub.put(3,"John");
        TennisClub.put(4,"Alex");
        TennisClub.put(5,"Kevin");

        for(Integer itm: TennisClub.keySet()){
            System.out.println(itm + " " + TennisClub.get(itm));
        }

        String name = "";
        String way;
        int id = 0;

        Scanner in = new Scanner(system.in);

        System.out.println("What do you want to do?");

        way = in.next();
        if (way.equals("add")){
            Scanner input = new Scanner(system.in);
            while (true) {
                System.out.println("Enter name:");
                name = in.next();
                if (name.equals("end")) {
                    break;
                }
                System.out.println("Enter id:");
                id = Integer.valueOf(in.next());
                TennisClub.put(id,name);
            }
            System.out.println("\nHashtable:");
            for(Integer n : TennisClub.keySet()) {
                System.out.println("id:" + n + "\nName:" + TennisClub.get(n));
            }
        }

        if (way.equals("remove")) {
            Scanner input = new Scanner(system.in);
            while (true) {
                System.out.println("Enter name:");
                name = in.next();
                if (name.equals("end")) {
                    break;
                }
                TennisClub.remove(id,name);
            }
            System.out.println("\nHashtable:");
            for (Integer n : TennisClub.keySet()) {
                System.out.println("id:" + n + "\nName:" + TennisClub.get(n));
            }
        }
        else{
            return;
        }
    }
}

我创建了一个哈希表并添加添加新行的功能,但我也想添加删除我创建的行的功能,但遇到了错误

解决方法

在删除值的代码中,您没有获得输入名称的键。 id 变量的值是您的代码生成的最后一个值,而不是与名称关联的键。您需要先找到密钥,然后再删除。

public class Test {

    public static void main(String[] args) {

        Hashtable<Integer,String> TennisClub = new Hashtable<Integer,String>();

        TennisClub.put(1,"Bob");
        TennisClub.put(2,"Aaron");
        TennisClub.put(3,"John");
        TennisClub.put(4,"Alex");
        TennisClub.put(5,"Kevin");

        for(Integer itm: TennisClub.keySet()){
            System.out.println(itm + " " + TennisClub.get(itm));
        }

        String name = "";
        String way;
        int id = 0;

        Scanner in = new Scanner(System.in);

        System.out.println("What do you want to do?");

        way = in.next();
        if (way.equals("add")){
            while (true) {
                System.out.println("Enter name:");
                name = in.next();
                if (name.equals("end")) {
                    break;
                }
                System.out.println("Enter id:");
                id = Integer.valueOf(in.next());
                TennisClub.put(id,name);
            }
            System.out.println("\nHashtable:");
            for(Integer n : TennisClub.keySet()) {
                System.out.println("id:" + n + "\nName:" + TennisClub.get(n));
            }
        }

        if (way.equals("remove")) {
            while (true) {
                System.out.println("Enter name:");
                name = in.next();
                if (name.equals("end")) {
                    break;
                }
                // search for the id corresponding to input name.
                for (Map.Entry<Integer,String> entry : TennisClub.entrySet()) {
                    if (entry.getValue().equals(name)) {
                        id = entry.getKey();
                    }
                }
                TennisClub.remove(id,name);
            }
            System.out.println("\nHashtable:");
            for (Integer n : TennisClub.keySet()) {
                System.out.println("id:" + n + "\nName:" + TennisClub.get(n));
            }
        }
        else{
            return;
        }
    }
}