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를 거치면 안되네요 ㅠㅠ 


왜그런건가요 ㅠㅠ