変数がうまく印刷されません。
Q&A
Closed
解決したいこと
お手本を参考に、自分でコートを買いてみました。
テストをしたところ、思うように印刷されない部分があります。
このコードは
MobilePhone,
Contact,
Main
三つのクラスから構成されています。。
ターミナルからインプットしてコンタクトを作ったり、足したり、編集したりする内容となっています。
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);
}
}
0