我想做一个程序,在一个名字,性别,年龄和/或国家的一个 Person
并输出正确的 Name
从 Registry
,当被问及上述特征时。如果是这样的话 Person
不存在,则输出为“未知”。
例如,
测试用例1:
输入:
姓名=rob性别=男性年龄=42国家=美国
姓名=罗宾性别=男性年龄=62国家=美国
姓名=玛格达性别=女性年龄=29国家=pl
姓名=彼得性别=男性年龄=66国家=俄罗斯
姓名=皮特性别=男性年龄=6个国家=美国
姓名=晓玲性别=女性年龄=26国家=ch
输出:
所需产出标准:年龄=6国家=美国
因此,程序应该返回 Person
的 Age=6
以及 Country=US
,也就是“皮特”。但是,我的代码返回“未知”。
测试用例2:
输入:
姓名=约翰性别=男性年龄=46国家=英国
姓名=安妮塔性别=女性年龄=22国家=荷兰
姓名=惠子性别=女性年龄=37国家=日本
姓名=丹尼性别=男年龄=13国家=荷兰
姓名=mirjam性别=女性年龄=28国家=be
姓名=约翰尼性别=男年龄=8国家=英国
姓名=安娜性别=女性年龄=71国家/地区=西南
姓名=弗雷德性别=男年龄=51国家=荷兰
姓名=弗雷德里克性别=女性年龄=51国家=法国
姓名=rob性别=男性年龄=42国家=美国
姓名=罗宾性别=男性年龄=46国家=美国
姓名=玛格达性别=女性年龄=29国家=pl
姓名=彼得性别=男性年龄=66国家=俄罗斯
姓名=皮特性别=男性年龄=66国家=美国
姓名=弗雷德里克性别=女性年龄=51国家=法国
姓名=晓玲性别=女性年龄=26国家=ch
输出:
所需输出条件:name=xiaoling
因此,程序应该返回 Person
的 Name=Xiaoling
,即“下龙”。但是,我的代码返回“未知”。
我的代码:
class Solution {
private static class Person {
private String Name = "Unknown";
private Map<String, String> Traits = new TreeMap<>();
}
// constructs person from given input
private static Person ConvertRawInputToPerson(String rawInput) {
Person person = new Person();
String[] traits = rawInput.split(" ");
for (String trait : traits) {
String[] keyValuePair = trait.split("=");
String key = keyValuePair[0];
String value = keyValuePair[1];
if (key.equals("Name")) {
person.Name = value;
} else {
person.Traits.put(key, value);
}
}
return person;
}
private static boolean StringEquals(String left, String right) {
return left.equals(right);
}
private static boolean HasTrait(Map<String, String> traits, Map.Entry<String, String> soughtTrait) {
for (Map.Entry<String, String> trait : traits.entrySet()) {
if (StringEquals(trait.getKey(), soughtTrait.getKey())
&& StringEquals(trait.getValue(), soughtTrait.getValue())) {
return true;
}
}
return false;
}
static class Registry {
List<Person> mPersons = new ArrayList<>();
void add(Person person) {
mPersons.add(person);
}
Person findMatchingPersonByRawTraits(String rawTraits) {
Person soughtPerson = new Person();
String[] traits = rawTraits.split(" ");
for (String trait : traits) {
String[] keyValuePair = trait.split("=");
String key = keyValuePair[0];
String value = keyValuePair[0];
soughtPerson.Traits.put(key, value);
}
for (Person person : mPersons) {
for (Map.Entry<String, String> soughtTrait : soughtPerson.Traits.entrySet()) {
if (HasTrait(person.Traits, soughtTrait)) {
return person;
}
}
}
return new Person();
}
}
// Entry point
private static String GetNameFromRegistryByTraits(String[] rawRegistry, String soughtTraits) {
Registry registry = new Registry();
for (String rawInput : rawRegistry) {
registry.add(ConvertRawInputToPerson(rawInput));
}
Person person = registry.findMatchingPersonByRawTraits(soughtTraits);
return person.Name;
}
谢谢您。
1条答案
按热度按时间ujv3wf0j1#
你有问题吗
这将使你的第一个案例变成第二个案例:你在traits中搜索name,但在从原始数据转换时,你并没有把它放入traits中
Traits
,您正在添加到Name
示例变量注意这个
所以,在检查数据时,检查键是否
Name
,然后在名称中搜索,而不是Traits