2

私はアドレス帳を設計しており、私の AddressBookApp クラス (メイン メソッドを含む) を機能させるために、クラスの各メソッドが私の名前、電子メールにアクセスできるようにするために、インスタンス変数を作成してそれらを静的にする必要がありました。 、および Phone オブジェクト。もっと良い方法があると思いますが、それが何であるかを知るのに苦労しています。メイン メソッドでオブジェクトを作成する必要がありますか? インスタンス変数は正しい方法ですか? どうすればデザインを改善できるかについて何かアイデアはありますか? (私の質問に関係のない他のデザインの提案があれば教えてください)

私の AddressBookApp クラスのコードは次のとおりです。

import java.util.Scanner;

public class AddressBookApp {

//Instance Variables
private static Name name;
private static Email email;
private static Phone phone;

//Constructor
public AddressBookApp() {
    name = new Name();
    email = new Email();
    phone = new Phone();
}

//Main method
public static void main(String[] args) {
    new AddressBookApp();

    System.out.println("Welcome to the Address Book Application\n");
    Scanner sc = new Scanner(System.in);

    int menuNumber;
    do {
        menu();

        menuNumber = sc.nextInt();
        System.out.println();

        if (menuNumber < 1 || menuNumber > 4){
            System.out.println("Please enter a valid menu number\n");
        } else if (menuNumber == 1) {
            printEntries();
        } else if (menuNumber == 2) {
            addEntry();
        } else if (menuNumber == 3) {
            removeEntry();
        } else {
            System.out.println("Thanks!  Goodbye.");
            sc.close();
            return;
        }

        continue;

    } while (menuNumber != 4);
    sc.close();
} 

/**
 * Prints out Main Menu
 */
public static void menu() {
    System.out.println("1 - List entries\n" + 
                       "2 - Add entry\n" +
                       "3 - Remove entry\n" +
                       "4 - Exit\n");

    System.out.print("Enter menu Number: ");
}

/**
 * Prints all entries in the Address Book
 */
public static void printEntries() {
    name.printNames();
    System.out.println();

    email.printEmails();
    System.out.println();

    phone.printPhoneNumbers();
    System.out.println();
}


/**
 * Adds an entry to the Address Book
 */
public static void addEntry() {
    Scanner sc = new Scanner(System.in);

    System.out.print("Enter Name: ");
    name.addName(sc.nextLine());

    System.out.print("Enter Email Address: ");
    email.addEmail(sc.nextLine());

    System.out.print("Enter Phone Number: ");
    phone.addPhone(sc.nextLine());

    System.out.println("\nRecord Saved.\n");
}

/**
 * Removes and entry from the Address Book
 */
public static void removeEntry() {
    Scanner sc = new Scanner(System.in);

    System.out.print("Please Enter the record number that you would like to remove: ");

    int records = sc.nextInt();
    name.removeNames(records - 1);
    email.removeEmail(records - 1);
    phone.removePhone(records - 1);
}
}
4

2 に答える 2

4

AddressBookAddressBookApp2つの異なるクラスである必要があります。AddressBook次のようになります。

public class AddressBook {

//Instance Variables
private Name name;
private Email email;
private Phone phone;

//Constructor
public AddressBook() {
    name = new Name();
    email = new Email();
    phone = new Phone();
}

// more Constructors

public void setName(Name name) {
    this.name = name
}

public Name getName() {
    return name;
}
// more getters and setters

その後、アプリはmain()メソッドでこのインスタンスを作成できます。

AddressBook book = new AddressBook();
book.setName(new Name("Jeff"));
//more operations on book

オブジェクトbookを必要な任意のメソッドに渡すか、新しいインスタンスを作成し続けることができます。アプリクラスの静的参照として使用することもできます。

private static AddressBook book = new AddressBook();

// in your app class methods
book.burnBeforeReading();
于 2013-01-04T21:19:56.907 に答える
0

Main簡単に、との 2 つのクラスを作成しますAddressBook

メインのみあり

public static void main(String[] args) {

new AddressBook().execute();
...

AddressBookインスタンスメソッドしかありません。

于 2013-01-04T21:23:20.897 に答える