import java.util.Scanner;
class PhoneInfo // 전화번호부 클래스
{
String name ,phoneNumber, birthday;
public PhoneInfo(String name , String phoneNumber, String birthday) // 이름 번호 생일 생성자
{
this.name = name;
this.phoneNumber = phoneNumber;
this.birthday = birthday;
}
public PhoneInfo(String name2 , String phoneNumbr2) // 이름 번호 생성자
{
this(name2,phoneNumbr2,"0");
}
public void showInfo() // 출력 메소드
{
System.out.println("이름은 : "+name);
System.out.println("전화번호는 :"+phoneNumber);
System.out.println("생일은 : "+birthday);
}
}
class BookMaker // 유저의 입력에 따라 생성되는 전화번호부 클래스(3단계부터 컨트롤 클래스)
{
PhoneInfo[] save = new PhoneInfo[100]; // 100개 전화번호부 저장하는 배열
int numOfPi=0;
public static Scanner sc = new Scanner(System.in); //스태틱으로 키보드 인풋 인스턴스 생성
public void maker() // 전화번호부 생성을 위한 메소드 + 배열에 저장까지 해줌
{
for (; ; ) // 반복
{
System.out.printf("선택하시오 : 1. 정보 입력 2. 프로그램 종료");
int num1;
num1 = sc.nextInt();
sc.nextLine();
if (num1==1)// 실행 선택
{
System.out.println("입력을 선택하였습니다");
System.out.print("이름 입력 : ");
String name = sc.nextLine();
System.out.print("번호 입력 : ");
String phone = sc.nextLine();
System.out.print("생일 입력 : ");
String birth = sc.nextLine();
PhoneInfo Pi = new PhoneInfo(name,phone,birth);
System.out.print("입력이 완료 되었습니다.");
System.out.printf("\n\n\n입력 결과는 : \n");
Pi.showInfo();
save[numOfPi] = Pi;
numOfPi++;
}
else//종료 선택
{
System.out.println("프로그램이 종료 됩니다");
break;
}
}
}
public void dataSearch() // 이름을 전달받아서 매칭되는 것의 전체 정보 출력 메소드
{
System.out.print("검색할 이름을 입력 하시오 : ");
String name = sc.nextLine();
if(search(name) != -1)
save[search(name)].showInfo();
else
System.out.println("찾는 결과가 없습니다!");
}
public void delete() // 이름으로 검색해서 정보 삭제 시키는 메소드
{
System.out.print("삭제시킨 이름을 입력 하시오 : ");
String name = sc.nextLine();
if (search(name) != -1)
{
for(int i = search(name); i<name.length(); i++)
{
save[i]=save[i+1];
}
System.out.println("삭제가 완료 되었습니다!");
numOfPi--;
}
else
System.out.println("삭제할 정보가 검색되지 않습니다!");
}
public int search(String name) // 검색가능하게 하는 메소드
{
for (int i = 0; i<numOfPi; i++ )
{
if(name.compareTo(save[i].name)==0) // 검색한게 맞으면 배열번호 반환
{
return i;
}
}
return -1; // 검색 한게 없으면 -1 반환
}
public void menuView()
{
for(; ; )
{
System.out.println("선택 하시오 : ");
System.out.println("1.정보 입력");
System.out.println("2.검색");
System.out.println("3.삭제");
System.out.println("4.종료");
int choice = sc.nextInt();
String asdf = sc.nextLine(); // 엔터 남는거 없애기용
BookMaker p = new BookMaker();
switch(choice)
{
case 1 :
p.maker();
break;
case 2 :
p.dataSearch();
break;
case 3 :
p.delete();
break;
case 4 :
System.out.println("프로그램이 종료 됩니다.");
return; // for문을 빠져 나가려면 break로는 안됨 break는 switch를 빠져나가기 때문에, 그래서 메소드를 끄기위해서 return을 사용
}
}
}
}
class FirstProject // 메인 클래스
{
public static void main(String [] args) // 메인 메소드
{
BookMaker pi = new BookMaker();
pi.menuView();
}
}
자바공부하고있는 학생입니다!
그런데 이 코드에서 보시면 main 함수에서 menuView메소드를 호출한 다음
menuView 메소드를 통해서 PhoneInfo 배열에 저장을 하거나 maker 메소드를 호출하거나 search메소드를 호출하고잇는데요...
이걸 컴파일 해보면 컴파일은 되지만 실행했을때 저 menuView로 호출해서
maker 메소드로 배열에 저장을 해도 search메소드나 delete로 검색이 안되네요.
제가볼땐 배열에 저장 자체가 안되는거 같은데 왜그런거죠 ㅠㅠ
menuView를 없애고 그냥 main 메소드에 바로 maker 메소드 생성하면
제가 원하는데로 다 되는데 저렇게 menuView를 거치면 안되네요 ㅠㅠ
왜그런건가요 ㅠㅠ
BookMaker p = new BookMaker(); 가 뭐하는 앨까??
네가 열심히 저장한건 GC가 열심히 치워주고 있을 거니까 너무 걱정하진 말고