public static void main(String[] args) {
int[][] arr = {
{10, 20, 30},
{40, 50, 60},
{70, 80, 90}
};
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
}
public class Practice1 {
public static int minValue(int[] arr) {
int min = arr[0];
for(int minC : arr) {
if(min > minC) {
min = minC;
}
}return min;
}
public static int maxValue(int[] arr) {
int max = arr[0];
for(int maxC : arr) {
if(max < maxC) {
max = maxC;
}
}return max;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int [] arr = new int [5];
for(int i = 0; i < arr.length; i++) {//숫자를 넣을때도 for문 사용해서 하나씩 입력
System.out.print((i + 1) + "자리 숫자를 입력하세요 : ");
arr[i] = sc.nextInt();
}
System.out.print("최소값 :" + minValue(arr) + " 최대값 :" + maxValue(arr));
sc.close();
}
전화번호 관리 프로그램 03단계 문제
배열을 이용해서, 프로그램 사용자가 입력하는 정보가 최대 100개까지 유지되도록 프로그램을 변경하자. 그리고 다음의 기능을 추가로 삽입하자.
@ 저장 이름, 전화번호, 생년월일 정보를 대상으로 저장의 과정을 진행한다.
@ 검색 이름을 기준으로 데이터를 찾아서 해당 데이터의 정보를 출력해준다.
@ 삭제 이름을 기준으로 데이터를 찾아서 삭제의 과정을 진행한다.
우리가 저장하는 데이터 중에는 동명이인의 데이터가 존재하지 않는다고 가정하겠다. 그리고 데이터의 삭제는 다음의 형태로 이뤄져야 한다.
"배열의 중간에 저장된 데이터를 삭제할 경우에는, 해당 요소의 뒤에 저장된 요소들을 한 칸씩 앞으로 이동시키는 형태로 삭제를 진행한다."
다음의 기능을 담당하는 Manager 클래스를(또는 Control 클래스라 불리는) 정의해서 프로그램을 완성하자.
@ 데이터의 저장
@ 데이터의 검색
@ 데이터의 삭제
전화번호 관리 프로그램 03단계 프로그램의 실행 예
선택하세요...
선택하세요...
선택하세요...
package com.test.memo;
import java.util.Scanner;
//여기서 for each문은 비효율적임 null execption 발생되서
class PhoneSave {//개개인의 연락처를 입력받아 출력하게 하거나, 비교값으로 넘겨주는
private String name;
private String phone;
private String birth;
public PhoneSave(String name, String phone, String birth) {
this.name = name;
this.phone = phone;
this.birth = birth;
}
public void showPhoneInfo() {
System.out.println("name : " + name);
System.out.println("phone : " + phone);
System.out.println("birth : " + birth);
}
public String getName() {
return name;
}
public String getPhone() {
return phone;
}
}
class Function {//유지보수하기 쉬운 Managing Class - 기능 클래스
private static Function pb;// 전화번호를 저장할 객체
private PhoneSave[] pInfoArr;// 저장할 번호 배열
private int numOfPhoneInfo; // 저장된 번호 수
private Function(int size) {// 저장할 수 있는 번호의 수 제한
pInfoArr = new PhoneSave[size];//pInfoArr에 100개의 배열을 만든다.
}
public static Function getPhoneBook(int size) {//싱글톤으로 번호담는 객체를 하나로 제한시키는
if (pb == null) {
pb = new Function(size);
}
return pb;
}
public boolean checkNumOfPhoneInfo() {// 저장된 번호 수가 저장할 수 있는 번호의 수보다 크면 false
if (numOfPhoneInfo >= pInfoArr.length) {
return false;
}
return true;
}
public void insertPhoneInfo(String name, String phone, String birth) {// 값을 입력받을 때마다 객체를 생성하고 그 안에 정보 저장
pInfoArr[numOfPhoneInfo++] = new PhoneSave(name, phone, birth);
//후위연산자로, 0에 값을 받고 1로 변환된다.
}
public boolean searchPhoneInfoByName(String name) {// 이름으로 번호찾기
boolean result = false;
for (int i = 0; i < numOfPhoneInfo; i++) {//저장된 번호 수동안 입력받은 이름과 비교하는 코드
if (name.compareTo(pInfoArr[i].getName()) == 0) {//이름이 같으면 0을 반환한다.
//equals는 객체를 비교해 boolean으로 값을 반환하기 때문에 정수인 0과 비교하지 x
//compareTo 는 비교대상 객체와 현재 객체(this)를 비교하여 정렬한다.
//>compareTo 메서드의 반환 값이 0이라면 두 객체가 서로 동등하다는 것을 의미한다. > 두 객체가 같으면 0을 반환
//0: 두객체가 동등함 /양수: 현재 객체가 비교 대상 객체보다 큼 /음수: 현재 객체가 비교 대상 객체보다 작음
pInfoArr[i].showPhoneInfo();//이름이 같으면 해당 배열을 출력메서드로 호출
result = true;
}
}
return result;
}
public int searchPhoneInfoByPhoneNumber(String phone) {//삭제할 연락처를 번호로 찾는 메소드
for(int i = 0; i < numOfPhoneInfo; i++) {
if(phone.compareTo(pInfoArr[i].getPhone()) == 0) {//일치하는 번호가 있다면 그 객체의 위치 반환
return i;
}
}
return -1; // 없다면 -1 반환 > numOfPhonerInfo의 배열속에 맞는 답이 없다는 거니까
}
public int searchPhoneInfoByNameOfDelete(String name) {//삭제할 연락처를 이름으로 찾는 메소드
for(int i = 0; i < numOfPhoneInfo; i++) {
if(name.compareTo(pInfoArr[i].getName())== 0) {
return i;
}
}
return -1;
}
public boolean deletePhoneInfoByPhoneNumber(String phone) {//삭제메소드
boolean deleteResult = false;//그냥 return true; 하면 되는거 아닌가.
int searchResult = searchPhoneInfoByPhoneNumber(phone);//해당 번호의 배열주소값을 반환받음
if(searchResult != -1) {//배열 속에 일치하는 번호가 있으면
for(int i = searchResult; i < numOfPhoneInfo-1; i++) {
pInfoArr[i] = pInfoArr[i+1];
//1씩더해져서 삭제시킬 위치 바로 옆에있는 애가 와야하니까 +1 해주는것
} //순서상 옮길때 변활할 값의 바로 옆에있는 값부터 덮어씌워야한다.
//1234 중 2를 삭제하려하면 > 3이 2를 넣고, 4를 3에 넣는
pInfoArr[numOfPhoneInfo-1] = null; //하나가 삭제되었고, 삭제시킬 배열의 위치부터 땡겼으니까 삭제를 위해 한자리를 null처리
deleteResult = true;
numOfPhoneInfo--;//저장되어있는 번호의 개수 --
}
return deleteResult;
}
public void printAllPhoneInfo() {//모든 정보 출력 메소드
for(int i = 0; i < numOfPhoneInfo; i++) {
pInfoArr[i].showPhoneInfo();
}
System.out.println();
}
}
class OrganizeUI{//프론트부분의 클래스
private static Function fc = Function.getPhoneBook(100); //번호 저장 최대 100개 지정 싱글톤패턴
public static Scanner sc = new Scanner(System.in);//public 으로 스캐너 객체 생성
public static void print() {
System.out.println("선택하세요...");
System.out.println("1. 데이터 입력");
System.out.println("2. 데이터 검색");
System.out.println("3. 데이터 삭제");
System.out.println("4. 모든 데이터 보기");
System.out.println("5. 프로그램 종료");
System.out.print("선택 : ");
}
public static void inputPhoneInfo() {
String name, phone, birth;
boolean result = fc.checkNumOfPhoneInfo();//데이터를 저장 할 용량이 남았는지 확인하는
if(result == false) {
System.out.println("더 이상 데이터를 저장할 수 없습니다.");
return;//호출한 곳으로 다시 돌아감
}
System.out.println("데이터 입력을 시작합니다.");
System.out.print("이름 : ");
name = sc.nextLine();
System.out.print("전화번호 : ");
phone = sc.nextLine();
System.out.print("생년월일 : ");
birth = sc.nextLine();
fc.insertPhoneInfo(name, phone, birth);
System.out.println("데이터 입력이 완료되었습니다.");
}
public static void serachPhoneInfoByName() {//찾으려는 이름을 입력하는 메소드
String name;
System.out.print("검색하시고자 하는 이름을 입력해주세요 : ");
name = sc.nextLine();
if(!fc.searchPhoneInfoByName(name))
System.out.println("찾으시는 사용자가 없습니다.");
}
public static void deletePhoneInfoByphoneNumber() {//삭제하려는 번호를 입력하려는 메소드 - 동명이인일 수 있으니까 > 겹칠 수 없는게 기준
String phone;
System.out.print("삭제하시고자 하는 전화번호를 입력해 주세요 : ");
phone = sc.nextLine();
boolean result = fc.deletePhoneInfoByPhoneNumber(phone);
if(result) System.out.println("삭제가 완료되었습니다.");
else System.out.println("삭제하시고자 하는 전화번호 정보가 없습니다.");
}
public static void printAllPhoneInfo() {//모든 번호 정보 출력
System.out.println("모든 사용자 정보를 출력합니다.");
fc.printAllPhoneInfo();
}
public static void quitProgram() {//프로그램 종료
System.out.println("프로그램을 종료합니다.");
sc.close();
}
public static void wrongNum() {
System.out.println("잘못 입력하셨습니다.");
}
}
public class Organize {
private static final int INSERT_PHONE_INFO=1; // 상수로 준 이유 : 가독성을 높이기 위해서
private static final int SEARCH_PHONE_INFO=2;
private static final int DELETE_PHONE_INFO=3;
private static final int SHOW_ALL_PHONE_INFO=4;
private static final int QUIT_PHONE_INFO=5;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int user = 0;//사용자 입력을 받을
while (true) {
OrganizeUI.print();
user = sc.nextInt();
switch (user) {
case INSERT_PHONE_INFO:
OrganizeUI.inputPhoneInfo();
break;
case SEARCH_PHONE_INFO:
OrganizeUI.serachPhoneInfoByName();
break;
case DELETE_PHONE_INFO:
OrganizeUI.deletePhoneInfoByphoneNumber();
break;
case SHOW_ALL_PHONE_INFO:
OrganizeUI.printAllPhoneInfo();
break;
case QUIT_PHONE_INFO:
OrganizeUI.quitProgram();
break;
default: OrganizeUI.wrongNum();
}
}
}
}
으아아ㅏ아알ㅇㅁㄹ