【问题标题】:Check for duplicate values for ip address (user input) using hashmap in java [closed]在java中使用hashmap检查ip地址(用户输入)的重复值[关闭]
【发布时间】:2020-11-29 21:07:47
【问题描述】:

主类,用于输入所有域详细信息,例如域名和 IP 地址。我需要检查为 ip 地址输入的重复值。我需要一个 hashmap 代码来检查重复值。 输入为www.gmail.net 195.116.254.154 输出就像 - 如果 ipAddress 是 195.116.254.154 输出应该是www.gmail.net

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        DomainBO dBO = new DomainBO();
        Map<String, String> domainMap = new HashMap<>();
        dBO.setDomainMap(domainMap);
        String ip, Dname;
        int flag = 0;
        int input;
        int count = 0;
        String DomainName = null;
        do {
            System.out.println("1. Add DNS details");
            System.out.println("2. Find matching Domain Name");
            System.out.println("3. Exit");
            System.out.println("Enter your choice");
            input = sc.nextInt();
            sc.nextLine();
            if (input == 1) {
                count++;
                System.out.println("Enter the domain name");
                Dname = sc.nextLine();
                 
                System.out.println("Enter the IP address");
                ip = sc.nextLine();
                if (isValid(Dname) || IPAddressValidator(ip))// check for valid ipaddress and name
                {
                dBO.addDNSDetails(Dname, ip);
                flag = 0;
                }
                else
                    flag = 0 ;
                
            }
            if (input == 2) {
                if (count > 0) {
                    System.out.println("Enter the IP address to find the domain name");
                    ip = sc.nextLine();
                    DomainName = dBO.findDomainName(ip);
                    if (DomainName == null) {
                        System.out.println("No matching domain name found");
                        flag = 0;

                    } else {
                        System.out.println(DomainName);
                        flag = 0;
                    }
                }

            }

            if (input == 3) {
                System.out.println("Thank you for using the Application");
                flag = 1;
                break;
            }
        } while (flag == 0);

    }
    

DomainBO.java 类用于输入域详细信息并通过输入 Ipaddress 检索域名。

public class DomainBO {
private Map<String,String> domainMap;
    
    
    public Map<String,String> getDomainMap() {
        return domainMap;
    }


    public void setDomainMap(Map<String,String> domainMap) {
        this.domainMap = domainMap;
    }


    //This method should add the domainName as key and their ipAddress as value into a Map
    public void addDNSDetails  (String domainName,String ipAddress)
    {   
        
            if(domainMap.containsKey(ipAddress)) 
            {
                return;
                        }
            else
            {
                domainMap.put(domainName, ipAddress); 
            }
       
    }
    

    public String findDomainName(String ipAddress) {
        
      String domain=null;
        
        if(domainMap.isEmpty()){
        return domain;
        }
        else
        for (Map.Entry<String, String> entry : domainMap.entrySet()) {
            String k = entry.getKey();
            String v = entry.getValue(); 
            
            if (ipAddress.equals(v)) {
                domain = k;                 
            }
            else
            {
                domain = "No matching domain name found";
                
            }
     }     
 

    
    return domain;
}

}

【问题讨论】:

  • 你有什么问题?您已经检查是否已经有 .containsKey(ipAddress) 的列表
  • 你需要问一个问题。
  • 我没有检查重复值的代码。我的代码接受重复的 IP 地址值
  • 而且,如果我添加了多个域值,它只会显示最近添加的域值。添加的第一个没有显示

标签: java string collections hashmap java.util.scanner


【解决方案1】:

你说你想将 domainName 映射到 ip addr。但是您检查 domainMap.containsKey(ipAddress)。这是不对的,因为您的密钥是域名,而不是 IP 地址。

如果你需要的话,你可以使用这样的代码来检查值(ip 地址)中的重复项

for (Map.Entry<String, String> set : domainMap.entrySet()) {
      if (set.getValue().equals(currentIp)) 
         System.out.println("Duplicate ip"); // Do whatever you want in here
}

【讨论】:

  • 我应该在哪里添加这个方法?在主班??
【解决方案2】:

在你编写的 addDNSDetails 方法中

domainMap.put(domainName, ipAddress); 

第一个参数是用来查找数据的key,第二个参数是value。您将域名作为密钥,但根据您的描述,您希望使用 IP 地址来查找域,而不是相反。所以把这段代码改成:

domainMap.put(ipAddress, domainName); 

【讨论】:

  • for (Map.Entry entry : domainMap.entrySet()) { String k = entry.getKey();字符串 v = entry.getValue(); if (ipAddress.equals(v)) { domain = k; } else { domain = "没有找到匹配的域名"; } }
  • 当我第二次尝试检索数据时,此代码没有给我数据。 1. 我输入域名和 ip 地址 2. 我再次输入 DN 和 Ip 3. 我搜索第一个 ip 它给出了正确的结果。 4. 当我搜索第二个 ip 时,它说没有找到域名
  • 我不确定为什么我的循环没有给出正确的结果?
  • 您能否编辑问题并包含您当前的代码以及您遇到的问题?或者发布一个新问题,很少有人阅读两天前的问题。 cmets 中的代码不可读。
猜你喜欢
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 2011-10-20
  • 2017-05-21
  • 1970-01-01
  • 2020-04-10
相关资源
最近更新 更多