Question: Hi, I am trying to make a program in JAVA that takes in the Name, Sex, Age and/or Country of a `Person` and outputs the
Hi, I am trying to make a program in JAVA that takes in the Name, Sex, Age and/or Country of a `Person` and outputs the correct `Name` from the `Registry`, when queried with any of the mentioned traits. If such a `Person` does not exist, then the output is "Unknown".
For example,
------------------------------------------
Testcase # 1:
-
Input cases: 6
-
Name=Rob Sex=Man Age=42 Country=US
-
Name=Robin Sex=Man Age=62 Country=US
-
Name=Magda Sex=Woman Age=29 Country=PL
-
Name=Peter Sex=Man Age=66 Country=RU
-
Name=Pete Sex=Man Age=6 Country=US
-
Name=Xiaoling Sex=Woman Age=26 Country=CH
-
-
Required output criteria: Age=6 Country=US
Therefore, the program should return a `Person` of `Age=6` and `Country=US`, which is `Pete`. However, my code is returning "Unknown".
------------------------------------------
Testcase # 2:
-
Input cases: 15
-
Name=John Sex=Man Age=46 Country=UK
-
Name=Anita Sex=Woman Age=22 Country=NL
-
Name=Keiko Sex=Woman Age=37 Country=JP
-
Name=Denny Sex=Man Age=13 Country=NL
-
Name=Mirjam Sex=Woman Age=28 Country=BE
-
Name=Johnny Sex=Man Age=8 Country=UK
-
Name=Anna Sex=Woman Age=71 Country=SW
-
Name=Fred Sex=Man Age=51 Country=NL
-
Name=Frederique Sex=Woman Age=51 Country=FR
-
Name=Rob Sex=Man Age=42 Country=US
-
Name=Robin Sex=Man Age=46 Country=US
-
Name=Magda Sex=Woman Age=29 Country=PL
-
Name=Peter Sex=Man Age=66 Country=RU
-
Name=Pete Sex=Man Age=66 Country=US
-
Name=Xiaoling Sex=Woman Age=26 Country=CH
-
-
Required output criteria: Name=Xiaoling
Therefore, the program should return a `Person` of `Name=Xiaoling`. However, my code is returning "Unknown".
------------------------------------------
My code:
class Solution { private static class Person { private String Name = "Unknown"; private Map 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 traits, Map.Entry soughtTrait) { for (Map.Entry trait : traits.entrySet()) { if (StringEquals(trait.getKey(), soughtTrait.getKey()) && StringEquals(trait.getValue(), soughtTrait.getValue())) { return true; } } return false; } static class Registry { List 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 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; } Can you help me find the bug? Thank you.
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
