Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

変数がうまく印刷されません。

Q&A

Closed

解決したいこと

お手本を参考に、自分でコートを買いてみました。
テストをしたところ、思うように印刷されない部分があります。

このコードは 
MobilePhone,
Contact,
Main 
三つのクラスから構成されています。。
ターミナルからインプットしてコンタクトを作ったり、足したり、編集したりする内容となっています。
スクリーンショット 2021-07-30 17.40.24.png

Main クラスを実行して、アクションを選ぶように言われるので、
2 の add contact を選び、 名前と電話番号をインプットしました。
無事、3回ほどインプットしました。

jill 123
ken 234
taro 345
の三つを入れました。
その後、再びアクションを選ぶように言われるので、1のprint contact を選びます。
そうすると、

name:123
name:234
name:345

と表示されてしまいます。
本来であれば、

name:jill 123
name:ken 234
name:taro 345

となる予定です。
名前の部分が消えてしまっています。コードをみて、理由を考えて見たのですがよくわかりません。
教えていただけないでしょうか?

エラーは出ていません。

該当するソースコード Main Class

import java.util.Scanner;

public class Main {
    public static Scanner scanner = new Scanner(System.in);
    //static にしていないとうまくいかないようだ。なぜだろう。
    // static メソッドはstatic object しかさわれない。
    static MobilePhone myPhone = new MobilePhone("044123456");
    public static void main(String[] args) {
        //MobilePhoneのインスタンス初期化をしたい。
        printChoices();
        boolean flag = true;
        while(flag) {
            System.out.println("Choose the action you want to take/");
            int i= scanner.nextInt();
            switch(i) {
            case 0:
                System.out.println("Shutting down....");
                flag = false;
                break;
            case 1:
                myPhone.printContacts();
                break;
            case 2:
                addNewContacts();
                break;
            case 3:
                updateContact();
                break;
            case 4:
                removeContact();
                break;
            case 5:
                queryContact();
                break;
            case 6:
                printChoices();
                break;
            }
        }
    }
    public static void printChoices() {
        System.out.println("\nAvailable actions:\npress");
        System.out.println("0  - to shutdown\n" +
                "1  - to print contacts\n" +
                "2  - to add a new contact\n" +
                "3  - to update existing an existing contact\n" +
                "4  - to remove an existing contact\n" +
                "5  - query if an existing contact exists\n" +
                "6  - to print a list of available actions.");
        System.out.println("Choose your action: ");
    }

    public static void addNewContacts() {
        System.out.println("Enter new name");
        String name = scanner.nextLine();
        scanner.nextLine();
        //  ↑お手本んなところにこんなものはないよ。
        System.out.println("Enter phone number");
        String phoneNumber = scanner.nextLine();
        Contact newContact = new Contact(name, phoneNumber);
        myPhone.addNewContacts(newContact);
    }

    public static void updateContact() {
        System.out.println("Enter exisiting name");
        String oname = scanner.nextLine();
        int i = myPhone.findContact(oname);
        if(i<0) {
            System.out.println("that name does not on the file");
            return;
        }
        Contact oldContact = myPhone.myContacts.get(i);
        System.out.println("Enter new name");
        String nname = scanner.nextLine();
        System.out.println("Enter new number");
        String pNumber = scanner.nextLine();
        Contact nContact = new Contact(nname, pNumber);
        myPhone.updateContact(oldContact, nContact);
    }

    public static void removeContact() {
        System.out.println("Enter the name you want to remove");
        String rname = scanner.nextLine();
        myPhone.removeContact(rname);
    }

    public static void queryContact() {
        System.out.println("Enter the name you want to query");
        String name = scanner.nextLine();
        Contact contact = myPhone.queryContact(name);
        if(contact==null) {
            System.out.println("That name is not on the file");
            // イコールではない時と書く時はどうする?
        } else {
            System.out.println("Name : "+ contact.getName() + ",Number : " + contact.getPhoneNumber());
        }
    }
}

該当するソースコード MobilePhone Class

import java.util.ArrayList;

public class MobilePhone {

    String myNumber;
    ArrayList<Contact> myContacts = new ArrayList<Contact>();
    //ここでコレクションの初期化をしてもいいですか?

    public MobilePhone(String myNumber) {
        this.myNumber = myNumber;
    }

    public String getMyNumber() {
        return myNumber;
    }
    public void setMyNumber(String myNumber) {
        this.myNumber = myNumber;
    }
    public ArrayList<Contact> getMyContacts() {
        return myContacts;
    }
    public void setMyContacts(ArrayList<Contact> myContacts) {
        this.myContacts = myContacts;
    }
    public int findContact(Contact contact) {
        int i = myContacts.indexOf(contact);
        return i;
    }
    public int findContact(String string) {
        for(int i=0 ; i < myContacts.size(); i++ ) {
            if(myContacts.get(i).getName().equals(string)) {
                return i;
            }
        } return -1;
    }

    public boolean addNewContacts(Contact contact) {
        int i = findContact(contact);
        if(0<=i) {
            System.out.println("The contact exisit");
            return false;
        } else {
            myContacts.add(contact);
            System.out.println("Successfully added");
            return true;
        }
    }


    public boolean updateContact(Contact oldContact, Contact newContact) {
        int i = findContact(oldContact);
        if(0<=i) {
            myContacts.remove(i);
            myContacts.add(newContact);
            System.out.println("Updated successfully");
            return true;
        } else {
            System.out.println("Contact not exists");
            return false;
        }
    }

    public boolean removeContact(Contact oldContact) {
        int i = findContact(oldContact);
        if(0<=i) {
            myContacts.remove(i);
            System.out.println("Contact has been successufully deleted");
            return true;
        } else {
            System.out.println("The contact does not exist");
            return false;
        }
    }
    public boolean removeContact(String name) {
        int i = findContact(name);
        if(0<=i) {
            myContacts.remove(i);
            System.out.println("Contact has been successufully deleted");
            return true;
        } else {
            System.out.println("The contact does not exist");
            return false;
        }
    }

    public Contact queryContact(String name) {
        int i =  findContact(name);
        if(0<=i) {
            return myContacts.get(i);
        } else {
            return null;
        }
    }

    public void printContacts() {
        for(int i = 0; i < myContacts.size(); i++) {
            System.out.println("name:" + myContacts.get(i).getName() + myContacts.get(i).getPhoneNumber());
        }
    }
}

該当するソースコード Contacts Class


public class Contact {

    private String name;
    private String phoneNumber;


    public Contact(String name, String phoneNumber) {

        this.name = name;
        this.phoneNumber = phoneNumber;
    }

    public String getName() {
        return name;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public static Contact creatContact(String name, String phoneNumber) {
        return new Contact(name ,phoneNumber);
    }
}

スクリーンショット 2021-07-30 17.42.40.png

0

1Answer

できました。
アクション2を選んだときのエンターキーがStringとしてデーターに残って悪さをすると解釈しています。それをまず取り除いてからメソッドがすすめられればいいんですね。ありがとうございました。

0Like

Your answer might help someone💌