これに関する投稿が他にもある場合は、事前にお詫び申し上げます。関連があると思われる投稿を調べましたが、解決策が見つかりませんでした。私はパーソンテスターと呼ばれるプロジェクトに取り組んでいます。
- ユーザーは、顧客 (c) を作成するか、従業員 (e) を作成するかを選択するよう求められます。
次に、ユーザーは姓名、電子メール アドレス、および顧客番号 (顧客が選択されている場合) または社会保障番号 (従業員が選択されている場合) のいずれかを入力するように求められます。
正しいデータが収集されると、情報は次の形式でコンソールに出力されます。
name: first last email: jondoe@fakemail.com social security number: XXXXXXXXXXX (if employee) customer number: XXXXXX (if customer)
このプログラムは、従業員クラスと顧客クラスによって拡張される継承と抽象人物クラスを扱います。別の規定では、person クラスには、文字列を返す getDisplayText という名前の抽象メソッドを含める必要があります。
これが私の問題があるところです。抽象クラスを扱うのはこれが初めてです。
私の質問は、入力されたすべてのユーザーデータを表示するために perosn クラスの toString メソッドを単純に出力して、次の問題に持ち込むことができない理由です。プログラムには追加のコンポーネントが必要です (そして、割り当てから引用します)。 :オブジェクトのデータをコンソールに出力するには、このアプリケーションで Person オブジェクトを受け入れる print という名前の静的メソッドを使用する必要があります。
クラスで議論されたことがないので、これを実装する方法がわかりません。System.out.print(aPerson.toString) を単純にコーディングしようとしましたが、 Name: と Social Security number: の空白の値しか得られません。私はこれに数時間取り組んでおり、関連するテキストを少なくとも4回読み直しています。これが私の最後の手段であります。私を正しい方向に導いてください。これを正しく行うために長時間働いてもかまいません。
私はアプリケーションの大部分を書き終えましたが、今はデータをコンソールに出力する方法に固執しています。すべての提案を歓迎します。これが私のコードです:
public class CH08PR82App {
public static void main(String[] args) {
System.out.print("Welcome to the Person Tester Application");
System.out.println();
Scanner sc = new Scanner(System.in);
Person aPerson;
aPerson = new Person();
if (aPerson != null) {
System.out.println(aPerson.toString());
}
String choice = "y";
while (choice.equalsIgnoreCase("y")) {
//prompt user to enter customer or employee
System.out.print("Create customer or employee (c/e): ");
String userType = sc.nextLine();
if (userType.equalsIgnoreCase("c")) {
String firstName = Validator.getStringInput(sc, "Enter first name: ");
String lastName = Validator.getStringInput(sc, "Enter last name: ");
String email = Validator.getStringInput(sc, "Enter email address: ");
String custNumber = Validator.getStringInput(sc, "Customer number: ");
//System.out.println(custNumber);
} else if (userType.equalsIgnoreCase("e")) {
String firstName = Validator.getStringInput(sc, "Enter first name: ");
String lastName = Validator.getStringInput(sc, "Enter last name: ");
String email = Validator.getStringInput(sc, "Enter email address: ");
int empSoc = Validator.getInt(sc, "Social security number: ");
}
choice = Validator.getStringContinue(sc, "Continue? (y/n): ");
}
}
}
abstract class Person {
private String firstName;
private String lastName;
private String eMail;
public Person() {
firstName = "";
lastName = "";
eMail = "";
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String geteMail() {
return eMail;
}
public void seteMail(String eMail) {
this.eMail = eMail;
}
@Override
public String toString() {
return "Name: " + this.firstName + this.lastName + "\n" + "E-mail: "
+ this.eMail;
}
abstract String getDisplayText();
}
abstract class Customer extends Person {
private String customerNumber;
public Customer() {
super.toString();
customerNumber = "";
}
public void setcustomerNumber(String customerNumber) {
this.customerNumber = customerNumber;
}
public String getcustomerNumber() {
return customerNumber;
}
@Override
public String toString() {
return super.toString() + "Social Security number: " + customerNumber
+ "\n";
}
}
abstract class Employee extends Person {
private String socNumber;
public Employee() {
super.toString();
socNumber = "";
}
public void setsocNumber(String socNumber) {
this.socNumber = socNumber;
}
public String getsocNumber() {
return socNumber;
}
@Override
public String toString() {
return super.toString() + "Social Security number: " + socNumber
+ "\n";
}
}
class Validator {
public static String getStringContinue(Scanner sc, String prompt) {
boolean isValid = false;
String s = "";
while (isValid == false) {
System.out.print(prompt);
if (sc.hasNext("y")) {
s = sc.nextLine(); // read entire line
isValid = true;
} else if (sc.hasNext("n")) {
s = sc.nextLine();
isValid = true;
} else {
s = sc.nextLine();
isValid = false;
System.out.println("Error! Invalid string value. Try again.");
}
}
return s;
}
public static String getStringInput(Scanner sc, String prompt) {
boolean isValid = false;
String s = "";
while (isValid == false) {
System.out.print(prompt);
if (sc.hasNext()) {
s = sc.nextLine(); // read entire line
isValid = true;
} else {
System.out.println("Error! Invalid string value. Try again.");
}
}
return s;
}
public static int getInt(Scanner sc, String prompt) {
int i = 0;
boolean isValid = false;
while (isValid == false) {
System.out.print(prompt);
if (sc.hasNextInt()) {
i = sc.nextInt();
isValid = true;
} else {
System.out.println("Error! Invalid integer value. Try again.");
}
sc.nextLine(); // discard any other data entered on the line
}
return i;
}
public static int getInt(Scanner sc, String prompt, int min, int max) {
int i = 0;
boolean isValid = false;
while (isValid == false) {
i = getInt(sc, prompt);
if (i <= min) {
System.out.println("Error! Number must be greater than " + min
+ ".");
} else if (i >= max) {
System.out.println("Error! Number must be less than " + max
+ ".");
} else {
isValid = true;
}
}
return i;
}
public static double getDouble(Scanner sc, String prompt) {
double d = 0;
boolean isValid = false;
while (isValid == false) {
System.out.print(prompt);
if (sc.hasNextDouble()) {
d = sc.nextDouble();
isValid = true;
} else {
System.out.println("Error! Invalid decimal value. Try again.");
}
sc.nextLine(); // discard any other data entered on the line
}
return d;
}
public static double getDouble(Scanner sc, String prompt, double min,
double max) {
double d = 0;
boolean isValid = false;
while (isValid == false) {
d = getDouble(sc, prompt);
if (d <= min) {
System.out.println("Error! Number must be greater than " + min
+ ".");
} else if (d >= max) {
System.out.println("Error! Number must be less than " + max
+ ".");
} else {
isValid = true;
}
}
return d;
}
}