Naming
Naming is fundamental to make your code easier to read.
ArrayList<Citizens> list = new ArrayList<Citizens>();
Name this to citizens.
Citizens p1 = new Portuguese();
p1 is not an adequate name. Rather name it as person1. Replace also p2 to person2.
Rename Citizens to Citizen: person1 is Citizen not Citizens. Same thing for person2.
Also use correct englishEnglish spelling and follow Java capitalization conventions when you name a variable:
boolean afirmativeanswer = true;
boolean afirmativeanswer = true;
wouldshould be affirmativeAnswer.
Java is a language where CamelCase is mostly respected. Why didn't you use it?
Method
A constructor is mostly used to access that classes methods and attributes parallel to other objects created.
For an infinite-loop, you can do
while(true)(preferred) orfor(;;). Usebreakto exit from thewhileloop. So you don't even need to useafirmativeanswer.Use
toLowerCase()method to not differentiate from inputtingUPPERCASEorlowercasecharacters.There is no need to make
answerandanswernrinstance variables. Just put them into the methods when you need them.