人を追加しようとすると、まだ問題があります。このコードは、無効な名前と誕生日を検出し、この人物を personList に追加しないことを想定しています。ただし、コードが読み取るまで誕生日を取得できないため、ループが終了したときにのみ person オブジェクトを追加できます。この問題は、無効な人の名前や誕生日を追加することをテストしようとすると発生します。それが示している:
人を追加できませんでした: 無効な名前です!!
新記録:
名前:ヌル」
生年月日:生年不明
追加されました!
Exception in thread "main" java.lang.NullPointerException
at Instruction.readInstruction(Instruction.java:272)
at EPB.main(EPB.java:12)
else if(words[0].equalsIgnoreCase("add"))
{
Person p = new Person();
String s1 = line.substring(words[0].length()).trim();
String[] s2 = s1.split(";");
if(s2.length>=2)// s2[0] = " name Testing Three" s2[1] = " birthday 13-05-1981" and s2[2]=" address.."
{
for(int i=0; i<s2.length;i++)
{
String s3 = s2[i].trim(); // "delete the leading space" s2[0] = "name Testing Three" s2[1] = "birthday 13-05-1981"
String[] s4 = s3.split("\\s+"); //s4[0] = name; s4[1] = Testing; s4[2]=Three
if(s4.length>=2) // s2[1]=birthday 13-05-1986 only has length of 2
{
if(s4[0].equalsIgnoreCase("name"))
{
//System.out.println(s4[1]);
String name="";
if(Functions.nameValidation(s4[1]))
{
for(int j=2;j<s4.length;j++)
{
name = s4[1] + " " + s4[j];
}
if(Functions.nameValidation(name))
{
p.setName(name);
}
else
{
System.out.println("Failed to add person: Invalid name!");
break;
}
}
else
{
System.out.println("Failed to add person: Invalid name!!");
break;
}
}//end of word equals to name
//-----------------------------------------------------------------
else if(s4[0].equalsIgnoreCase("birthday") && s4.length ==2)
{
if(Functions.dateValidation(s4[1]))
{
try
{
p.setBirthdayString(s4[1]);
}
catch (ParseException e)
{
//e.printStackTrace();
}
}
else
{
System.out.println("Failed to add person: Invalid Birthday Format");
break;
}
}
//end of word equals to birthday
//-----------------------------------------------------------------
boolean notFound = false;
for(Person p1: personList)
{
if(p1.getName().equals(p.getName()))
{
if(p1.getBirthdayString().equals(p.getBirthdayString()))
{
System.out.println("Information in record" +"\n" + "name: "+ p.getName() + "\n" + "Birthday: " + p.getBirthdayString() + "\n" +"has been updated");
p1.setEmail(p.getEmail());
p1.setPhone(p.getPhone());
p1.setAddress(p.getAddress());
notFound = true;
}
}
}
if (!notFound)
{
if(Functions.nameValidation(p.getName()) && Functions.dateValidation(p.getBirthdayString()))
{
System.out.println("New record: " +"\n"+"Name: " + p.getName() + "\""+ "\n"+ "Birthday: " + p.getBirthdayString() + "\nhas been added!");
personList.add(p);
}
FileIO.outData(personList, outputFileName);
}
System.out.println();
}