2012-03-15 12 views
2

私は、ユーザーが入力したデータからオブジェクトを作成する必要がある宿題プロジェクトに取り組んでいます。 Personクラスを拡張するCustomerというクラスと、Personクラスを拡張して社会保障番号を返すEmployeeというクラスが含まれています。ユーザーが入力したデータからオブジェクトを作成する

以下のメインプログラムのコードを貼り付けました。私はいくつかのことについて少し混乱しています。まず、私が情報(名、姓など)を集めているときに、何とかそこでPersonクラスにアクセスするはずですか?

第2に私はより明白に推測しますが、オブジェクトを作成するにはどうすればいいですか?私が持っていた場合ので、私は見ていない私は、ユーザーからの情報を収集しておりますが、それは

Person firstName = new Person(Jack); 

を言うように、これまで私は、私が見つけるオンライン読んだのすべての例では、彼らはすでに情報を入力するように見えますどのようにそれを伝えるか

Person firstName = new Person (enter info from user here); 

これは本当にばかな質問ですが、私はPersonオブジェクトを受け入れる静的メソッドを作成する必要があります。私はそれが

Public Static print() 

であると仮定していますが、どのように私は人のクラスから何かを印刷するためにそれを教えていますか?静的メソッドを作成するには どのようにそれを知っていますか?

ほとんどの私の例では、ユーザーが入力するのではなく、すべての情報を含むクラスが含まれています。これは混乱しています。その情報を収集する。

import java.util.Scanner; 
    public class PersonApp 
    { 


public static void main(String[] args) 
{ 
    //welcome user to person tester 
    System.out.println("Welcome to the Person Tester Application"); 
    System.out.println(); 

    Scanner in = new Scanner(System.in); 


    //set choice to y 
    String choice = "y"; 
    while (choice.equalsIgnoreCase("y")) 
    { 

     //prompt user to enter customer or employee 
     System.out.println("Create customer or employee (c/e): "); 
     String input = in.nextLine(); 

     if (input.equalsIgnoreCase("c")) 
     { 
      String firstName = Validator.getString(in, "Enter first name: "); 
      String lastName = Validator.getString(in, "Enter last name: "); 
      String email = Validator.getEmail(in, "Enter email address: "); 
      String custNumber = Validator.getString(in, "Customer number: "); 
     } 

     else if(input.equalsIgnoreCase("e")) 
     { 
      String firstName = Validator.getString(in, "Enter first name: "); 
      String lastName = Validator.getString(in, "Enter last name: "); 
      String email = Validator.getEmail(in, "Enter email address: "); 
      int empSoc = Validator.getInt(in, "Social security number: "); 
     } 


    } 




    System.out.println("Continue? y/n: "); 
    choice = in.next(); 


} 

}

答えて

0

まず、私はPersonオブジェクトが存在しないことを確認します。私はあなたがそれを作ることに慣れていくと思うので、私は自分自身にそれほど心配するつもりはありません。

実際にデータを取得している限り、途中にあります。 Personオブジェクトのフレーム方法に応じて、ユーザーから受け取った値を渡して、新しいCustomerまたはEmployeeオブジェクトを作成できます。

Customer customer = new Customer(firstName, lastName, email, custNumber); 

または

Employee employee = new Employee(firstName, lastName, email, empSoc); 

ここでは、両方の抜粋です:

public class Person { 

    public Person (String first, String last, String email) { 
     // You'd fill in code here for handling the variables 
    } 

    // ... 
} 

public class Customer extends Person { 

    public Customer (String first, String last, String email, String custNo) { 
     super(first, last, email); 
     // You'd fill in code here for handling the variables 
    } 

    // ... 
} 

public class Employee extends Person { 

    public Employee (int social) { 
     super(first, last, email); 
     // You'd fill in code here for handling the variables 
    } 

    // ... 
} 

その静的メソッドを使用して、Personクラスから何かを印刷するには(あなたがtoString()をオーバーライドすることができますなぜですか?代わりに、Personオブジェクトにaccessoがあるようにフレームを設定しますrsをPersonに関連する各フィールドに入力します。これは、従業員または顧客の場合、オブジェクトに関連するgetFirstName(),getLastName()などを意味します。 (私はそれをあなたに練習として残しておきます)。

その意味では、値を印刷するためにこれらのアクセサへの呼び出しが必要になります。

public static void print(Person p) { 

    System.out.println(p.getFirstName()) + " " + p.getLastName()); // You can get the trend from here. 
} 
+0

ありがとうございました。私はもう数回それを読む必要がありますが、私は助けに感謝します。私は、cusNumberとempSocを含むEmployeeクラスとCustomerクラスのoverriden toString()を持っています。あなたが投稿したものとは違う何かをしなくてはなりませんか? –

+0

'toString()'メソッドは、アクセサフィールドを使わなくても、ステートメントを簡単に印刷できるようにします。これは、 'Object'に関する情報を出力するためのより好ましい方法です。静的voidメソッドを使用するという代入に必要な場合を除いて、私は 'toString()'を選択します。 – Makoto

+0

私はあなたが今言っていることを理解していると思います。割り当てを引用するには、「オブジェクトのデータをコンソールに出力するには、このアプリケーションは、Personオブジェクトを受け入れるprintという静的メソッドを使用する必要があります。 –

0

あなただけのコマンドラインにそれを印刷したい場合は、あなただけSystem.out.println()を使用することができますが、あなたには、いくつか読めないナンセンスを得るでしょうPersonオブジェクトを印刷します。
println()メソッドの動作は、オブジェクトがString呼び出しでない場合は、toString()メソッドです。すべてのオブジェクトに1つがあるため、java.lang.Objectで定義されています。しかし、その方法は、私たちに、上記の読めないものを提供しますので、あなたは、あなたがコマンドラインから文字列を読み、誠が示唆するようにコンストラクタに渡すことができ、オブジェクトを作成するには

public class Person 
{ 
    String firstName; 
    String Lastname; 

    public Person(String firstName, String lastName) 
    { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String toString() 
    { 
     // Create a String that represents this object 
     return "This person is called " + firstName + " " + lastName; 
    } 
} 

ような何かをするためにそれをオーバーライドする必要があります。

関連する問題