java - 在java中如何使用类的字符串属性来引用该类?

标签 java oop object

我有以下 3 个类,它们代表一个程序,该程序允许用户创建一种数据库,该数据库可以添加人员及其电话号码和地址,然后在创建后搜索它们。

以下是类(class):

import java.util.*;


public class Person implements Comparable<Person> {

 private final String name;
 private String street;
 private String city;
 private String address;

    public Person(String name) {
        this.name = name;
        this.address = "address unknown";
    }

    public String getName() {
        return name;
    }

    public void setAddress(String street, String city){
        this.city = city;
        this.street = street;
        this.address = this.street + " " + this.city;
    }

    public String getAddress() {
        return address;
    }

    @Override
    public int compareTo(Person o) {
        return this.name.compareToIgnoreCase(o.getName());
    }











}

电话号码(用于存储人员及其电话号码)

import java.util.*;
import java.util.Collections;



public class PhoneNumbers {

    private Map<Person, Set<String>> numbers;

    public PhoneNumbers() {
        this.numbers = new HashMap<Person, Set<String>>();

    }

    public void addPhoneNumber(Person person, String phoneNumber){
        if(!this.numbers.keySet().contains(person)){
            this.numbers.put(person, new HashSet<String>());
        }

        this.numbers.get(person).add(phoneNumber);
    }

    public Set<String> searchByPerson(Person person){
        if(!this.numbers.keySet().contains(person)){
            return this.numbers.get(person);
        }

        return null;
    }

    public String searchByNumber(String number){
        for(Person person : this.numbers.keySet()){
            Set<String> x = this.numbers.get(person);
            for(String y : x){
                if(y.equals(number)){
                    return person.getName();
                }                
            }
        }
        return "  not found";
    }

    public void personalSearch(Person person){
        System.out.println("  " + person.getAddress());
        if(this.numbers.get(person).size() == 0){
            System.out.println("  phone number not found");
        }
        for(String x : this.numbers.get(person)){
            System.out.println("  phone numbers");
            System.out.println("   " + x);
        }
    }

    public void remove(Person person){
        this.numbers.remove(person);
    }

    public List<Person> masterSearch(String search){
        ArrayList<Person> names = new ArrayList<Person>();

        for(Person person : this.numbers.keySet()){
            if(person.getName().contains(search) || person.getAddress().contains(search)){
                names.add(person);
            }
        }

        Collections.sort(names);

        return names;
    }

    public Map<Person, Set<String>> getNumbers() {
        return numbers;
    }







}

UI(提供用户与程序交互的方式)

import java.util.Scanner;

public class UI {

    private Scanner reader;
    private PhoneNumbers phoneNumbers;

    public UI() {
        this.reader = new Scanner(System.in);
        this.phoneNumbers = new PhoneNumbers();
    }





    public void start(){

        System.out.println("phone search\n" +
        "available operations:\n" +
        " 1 add a number\n" +
        " 2 search for a number\n" +
        " 3 search for a person by phone number\n" +
        " 4 add an address\n" +
        " 5 search for personal information\n" +
        " 6 delete personal information\n" +
        " 7 filtered listing\n" +
        " x quit\n");

        while(true){

            System.out.print("command: ");
            int command = Integer.parseInt(reader.nextLine());
            System.out.println("");

            if(command == 1){


                System.out.print("whose number: ");
                String name = reader.nextLine();
                System.out.print("number: ");
                String number = reader.nextLine();

                Person person = new Person(name);
                this.phoneNumbers.addPhoneNumber(person, number);


            }

            else if(command == 2){
                System.out.print("whose number: ");
                String person = reader.nextLine();
                //something here
                    }
                }
                else{
                    System.out.println("  not found");
                }


            }










        }









    }

}

我对 UI 中的代码有疑问

else if(command == 2){
                System.out.print("whose number: ");
                String person = reader.nextLine();

当命令给出为 2 时,我要求用户提供一个名称,并且该名称以字符串形式给出,那么我如何使用该字符串来查找 HashMap 下具有该名称的 person 对象的值,即集合与此人相关的号码。

显然我不能用 map 上的 get 方法来做到这一点,因为键是人对象而不是字符串,而且我不知道该怎么做(我是否需要在字符串名称和人名之间存储映射),我相信在这种情况下,名称是唯一的?

还有一个额外的问题:当我执行命令 1 并给出一个不全是数字的数字(例如“045-4558”)时,为什么会出现错误。

谢谢

最佳答案

也许是这样的:

for (Map.Entry<Person, Set<String>> entry : numbers.entrySet()) {
    Person key = entry.getKey();

    if (key.getName().equals(nameWhichYouAreLookingFor)) {
       //Do whatever you want
    }
}

关于java - 在java中如何使用类的字符串属性来引用该类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59208916/

相关文章:

java - dataModelUpdate 后自动排序 JTable

java - 如何更改程序图标

java - 将方法从抽象类转移到接口(interface)以改进代码设计

c# - 面向对象的接口(interface)、抽象类、具体类问题

python - 如何允许用户在 turtle 屏幕窗口内输入数据

javascript - 合并两个数组中的相关对象

java - .to()方法的目的

java - 在 XML 文件中使用 View 组件 (Android)

java - 如何在 Java 中使用 JavaScript?

javascript - eval() 的替代品