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

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!