2017-11-29 19 views
0

私は、氏名、姓名、住所、市区町村、preferredContact、連絡先ID、およびspecialismの医師の詳細を含むcsvファイルを持っています。オブジェクト指向プログラミング - 子クラスの作成

私は医者オブジェクトを保存したい医者リストを作成しました。私はscanner.nextLine()を分割し、各値をDoctorインスタンスに解析することに決めました。

私にとってはすべての値が正確に読み込まれ、医師に関連付けられた正しい変数、名前、姓などに割り当てられましたが、唯一の問題は医師の専門が手術の場合は、認証日である追加の値。

これを行うには、拡張Surgeonクラスを作成し、継承を使用しようとしましたが、この段階では迷子になり、この問題の解決方法に関するアイデアがなくなります。

私はこの仕事をするために私が何を変えることができるか教えていただけますか?

public class Doctor 
{ 

    protected String name; 
    protected String surname; 
    protected String address; 
    protected String city; 
    protected String preferredContact; 
    protected String contactID; 
    protected String specialism; 

    public Doctor() 
    { 
     this.name=""; 
     this.surname=""; 
     this.address=""; 
     this.city=""; 
     this.preferredContact=""; 
     this.contactID=""; 
     this.specialism=""; 
    } 

    public Doctor(String name,String surname, String address, String city, String preferredContact, String contactID, String specialism) 
    { 
     this.name=name; 
     this.surname=surname; 
     this.address=address; 
     this.city=city; 
     this.preferredContact=preferredContact; 
     this.contactID=contactID; 
     this.specialism=specialism; 
    } 

    public void setName(String name) 
    { 
     this.name=name; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public void setSurname(String surname) 
    { 
     this.surname=surname; 
    } 

    public String getSurname() 
    { 
     return surname; 
    } 

    public void setAddress(String address) 
    { 
     this.address=address; 
    } 

    public String getAddress() 
    { 
     return address; 
    } 

    public void setCity(String city) 
    { 
     this.city=city; 
    } 

    public String getCity() 
    { 
     return city; 
    } 

    public void setPreferredContact(String preferredContact) 
    { 
     this.preferredContact=preferredContact; 
    } 

    public String getPreferredContact() 
    { 
     return preferredContact; 
    } 

    public void setContactID(String contactID) 
    { 
     this.contactID=contactID; 
    } 

    public String getContactID() 
    { 
     return contactID; 
    } 

    public void setSpecialism(String specialism) 
    { 
     this.specialism=specialism; 
    } 

    public String getSpecialism() 
    { 
     return specialism; 
    } 

    @Override 
    public String toString() 
    { 
     return "\nName:"+getName() 
      +"\nSurname: "+getSurname() 
      +"\nAddress: "+getAddress() 
      +"\nCity: "+getCity() 
      +"\nPreferred Means of Contact: "+getPreferredContact() 
      +"\nContact ID: "+getContactID() 
      +"\nSpecialism: "+getSpecialism() 
      +"\n"; 

    } 

} 

public class Surgeon extends Doctor 
{ 

    protected String certificationDate; 

    public Surgeon() 
    { 
     super(); 
     certificationDate=""; 
    } 

    public Surgeon(String name,String surname, String address, String city, String preferredContact, String contactID, String specialism, String certificationDate) 
    { 
     super(name,surname,address,city,preferredContact,contactID,specialism); 
     this.certificationDate=certificationDate; 
    } 

    public String getCertificationDate() 
    { 
     return certificationDate; 
    } 

    @Override 
    public String toString() 
    { 
     return "\nCertificationDate: "+certificationDate +"\n"; 
    } 
} 

public class DoctorImport 
{ 

    public static void main (String[]args) 
    { 
     int index = 0; 

     List<Doctor> doctorsList = new ArrayList<>(); 

     try 
     { 
      Scanner scanner=new Scanner(new File("DoctorsFile.csv")); 
      Scanner dataScanner; 

      while (scanner.hasNextLine()) 
      { 
       dataScanner=new Scanner(scanner.nextLine()); 
       dataScanner.useDelimiter(","); 

       Doctor myDoctor=new Doctor(); 
       Surgeon mySurgeon=new Surgeon(); 

       while(dataScanner.hasNext()) 
       { 
        String data= dataScanner.next(); 

        switch (index) 
        { 
         case 0: 
          myDoctor.setName(data); 
          break; 

         case 1: 
          myDoctor.setSurname(data); 
          break; 

         case 2: 
          myDoctor.setAddress(data); 
          break; 

         case 3: 
          myDoctor.setCity(data); 
          break; 

         case 4: 
          myDoctor.setPreferredContact(data); 
          break; 

         case 5: 
          myDoctor.setContactID(data); 
          break; 

         case 6: 
          myDoctor.setSpecialism(data); 
          break; 

         case 7: 
          mySurgeon.certificationDate=data; 
          break; 

        } 
        index++; 
       } 
       doctorsList.add(myDoctor); 

       if((myDoctor.specialism).equals("Surgery")) 
       { 
        doctorsList.add(mySurgeon); 
       } 

       index=0; 
      } 
      System.out.print(doctorsList); 
     } 

     catch (FileNotFoundException ex) 
     { 
      System.out.print("Error, unable to locate the CSV File!"); 
     } 

    } 

} 
+0

いくつかのエラーが発生していますか、直面している問題は何ですか? –

+0

したがって、あなたの問題は、医師の専門が外科手術である場合、外科医のクラスにすべての正しいデータが含まれていないことです。 – Jason

答えて

0

1つの方法は、すべてのデータを最初に収集し、その後、正しいタイプのオブジェクトを後で作成することです。ファクトリパターンについては、どのタイプのオブジェクトを構築するかの決定をカプセル化しているので、これを読むことをお勧めします。

doctorsList.add(buildDoctor(name, surname, address, city, preferredContact, contactID, specialism, certificationDate)); 

...工場を呼び出す:工場出荷時のパターンは作成するために、どのオブジェクトの決定が行われる最後の部分を実装するために使用することができ

... 
    String name = ""; 
    String surname = ""; 
    String address = ""; 
    String city = ""; 
    String preferredContact = ""; 
    String contactID = ""; 
    String specialism = ""; 
    String certificationDate = ""; 
    while(dataScanner.hasNext()) 
    { 
     switch (index) 
     { 
      case 0: 
       name = dataScanner.next(); 
       break; 

      case 1: 
       surname = dataScanner.next(); 
       break; 

      case 2: 
       address = dataScanner.next(); 
       break; 

      case 3: 
       city = dataScanner.next(); 
       break; 

      case 4: 
       preferredContact = dataScanner.next(); 
       break; 

      case 5: 
       contactID = dataScanner.next(); 
       break; 

      case 6: 
       specialism = dataScanner.next(); 
       break; 

      case 7: 
       certificationDate = dataScanner.next(); 
       break; 

      default: 
       dataScanner.next(); 
       break; 
     } 
     index++; 
    } 

    if (specialism.equals("surgery")) { 
     doctorsList.add(new Surgeon(name, surname, address, city, preferredContact, contactID, specialism, certificationDate)); 
    } else { 
     doctorsList.add(new Doctor(name, surname, address, city, preferredContact, contactID, specialism)); 
    } 

:たとえば

方法:

private Doctor buildDoctor(String name, String surname, String address, String city, String preferredContact, String contactID, String specialism, String certificationDate) { 
    if (specialism.equals("surgery")) { 
     return new Surgeon(name, surname, address, city, preferredContact, contactID, specialism, certificationDate); 
    } else { 
     return new Doctor(name, surname, address, city, preferredContact, contactID, specialism); 
    } 
} 
0

あなたのコードにはいくつかの誤りがあります。あなたは、ファイルを読み込むながら

あなたは医者オブジェクトを初期化してきたが、それは専門性を持っている場合は、データを読み、あなたのリストにSurgenオブジェクトを追加します。それらの

一つがあります。外科医オブジェクトは情報を持たず、Doctorオブジェクトにリンクされていません。

コードはある時点で機能しましたか?あなたはそれをテストしましたか? その場合は、その時点から作業できます。

よろしくお願いいたします。

0

問題は、あなたが医者と外科医の両方を作成しているということですスタンス。次に、Doctorインスタンスに値を設定します。認証日がある場合は、それを(そうでなければ空の)外科医のインスタンスに入れます。

いくつかの基準に基づいて、1つのインスタンスまたは別のインスタンスを作成する必要があります。認証日が過ぎているかどうかを使用するだけでは、貧しい習慣です。おそらく専門分野が有効でしょう。

Surgeonインスタンスがある場合は、それをDoctorフィールドにも割り当てます。次に、1つのインスタンスにすべての情報が入力されます。

関連する問題