728x90

 

수업내용 정리 (Java)

 

1. class_복습+a

 1-1) 생성자

// 기본생성자
public User() {

}
User() {

}
  • 생성자의 앞 부분 public 없이 적어도 생성자로 사용이 가능하다.

 

 1-2) 복습 문제

더보기

메뉴에 따른 if문 코드 짜기

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Scanner sc = new Scanner(System.in);
	User[] list = new User[10];
	int cnt = 0;
	
	while(true) {
		System.out.println("============lol============");
		System.out.println("1.회원가입 2.로그인 3.회원목록 0.종료");
		System.out.print("메뉴선택> ");
		int menu = sc.nextInt();
		System.out.println();
		
		if(menu == 1 ) {
			System.out.println(" ==> 회원가입");
			User u = new User();
			System.out.print("이름 입력> ");
			u.setName(sc.next());
			System.out.print("아이디 입력> ");
			u.setId(sc.next());
			System.out.print("비밀번호 입력> ");
			u.setPw(sc.next());
			System.out.println(" > "+u.getName()+"님 회원가입을 환영합니다.");
			list[cnt] = u;
			cnt++;
			
		}else if(menu == 2) {
			System.out.println(" ==> 로그인");
			System.out.print("아이디 입력> ");
			String loginId = sc.next();
			System.out.print("비밀번호 입력> ");
			String loginPw = sc.next();
			boolean find = false;
			for(int i=0; i<cnt; i++) {
				if(loginId.equals(list[i].getId()) && loginPw.equals(list[i].getPw())) {
					System.out.println(" > 로그인 성공!");
					find = true;
					break;
				}
			}
			if(!find) {
				System.out.println("로그인 실패");
			}
			
		}else if(menu == 3) {
			System.out.println(" ==> 회원목록");
			System.out.println("이름\t아이디\t비밀번호");
			for(int i=0; i<cnt; i++) {
				list[i].print();
			}
			
		}else if(menu == 0) {
			break;
			
		}else{
			System.out.println("잘못된 입력입니다.");
			
		}
		
		System.out.println("===========================");
		System.out.println();
	}
	System.out.println("\n프로그램 종료");
	System.out.println("===========================");
	
}

 

 

2. ArrayList

// 배열
String[] a = new String[10];	// 배열 생성
a[0] = "홍길동";		// 값 입력

// a 배열의 크기만큼 반복하여 출력
for(int i=0; i<a.leght; i++) {
	System.out.println(a[i]);
}
// ArrayList
import java.util.ArrayList;

	ArrayList<String> b = new ArrayList<String>();	// 리스트 생성
	b.add("이순신");				// 값 입력
	b.add("심청이");
	b.add("장동건");
	
	// b 리스트의 크기만큼 반복하여 출력
	for(int i=0; i<b.size(); i++) {
		System.out.println(b.get(i));
	}
	
	// foreach로 출력
	for(String i : b) {
		System.out.println(i);
	}
  • ArrayList는 배열과 달리 크기가 지정되어있지 않고, 값을 추가, 삭제하는 것에 따라 크기가 달라진다.
  • 배열의 크기는 leght인 것처럼, 리스트의 크기는 size다.
  • 방이 존재하지 않는 배열이라고 기억하면 편할 것 같다. (값을 집어넣으면 방이 생성됨)
add() 괄호 안 값 추가
get() 괄호 안 인덱스 번호 값 호출
set() 괄호 안 인덱스 번호 값 수정
remove() 괄호 안 인덱스 번호 값 삭제
size 저장된 값의 크기

 

 2-1) 예제_Account

  • Account
더보기
// import
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

 

// 필드
private String name;	// 예금주
private String account;	// 계좌번호
private String pw;		// 비밀번호
private int balance;	// 잔액
private String date;	// 가입일
private DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

 

// 생성자
public Account() {
	String now= dtf.format(LocalDateTime.now());
	this.date = now;
}
public Account(String name, String account, String pw) {
	this();		// 위에 있는 생성자를 실행
	this.name = name;
	this.account = account;
	this.pw = pw;
	this.balance = 0;
}

 

// 메서드
public void deposit(int money) {	// 입금
	System.out.println("입금 전 잔액: "+balance);
	this.balance += money;
	System.out.println("입금 후 잔액: "+balance);
}
//public int withdraw(int money) {	// 출금
//	if(this.balance >= money) {
//		this.balance -= money;
//		return balance;
//	}else {
//		return balance;
//	}
//}
public boolean withdraw(int money) {	// 출금
	if(this.balance >= money) {
		this.balance -= money;
		return true;
	}else {
		return false;
	}
}
public void setName(String name) {
	this.name = name;
}
public String getName() {
	return name;
}
public void setAccount(String account) {
	this.account = account;
}
public String getAccount() {
	return account;
}

public void print() {
	System.out.printf("%s\t%s\t%s\t%,d원\t%s\n",name,account,pw,balance,date);
}

 

  • Util
더보기
import java.util.Scanner;

 

// 숫자체크 메서드
public int numberCheck(String a, Scanner sc) {
	System.out.print(a);
	while(true) {
		if(sc.hasNextInt()) {
			return sc.nextInt();
		}else {
			sc.nextLine();
			System.out.println(" > 숫자를 입력해주세요.");
			System.out.print(a);
		}
	}
}
//public int numberCheck1(String a, Scanner sc) {
//	System.out.print(a);
//	do {
//		if(sc.hasNextInt()) {
//			return sc.nextInt();
//		}else {
//			sc.nextLine();
//			System.out.println(" > 숫자를 입력해주세요.");
//			System.out.print(a);
//		}
//	}while(true);
//}

 

// 글자수체크	(내가 한 것/두번 입력받게 코드를 짜서 선생님께 도움받았음)
public String mCheck(String a, Scanner sc) {
	while(true) {
		System.out.print(a);
		String m = sc.next();
		if(m.length()<5 && m.length()>0) {
			return m;
		}else {
//			sc.nextLine();	// 여기서 필요없음
			System.out.println(" > 5자 미만으로 입력해주세요.");
		}
	}
}
	

// 글자수 체크	(선생님이 한 것)
public String lengthCheck(String a, Scanner sc) {
	while(true) {
		System.out.print(a);
		if(sc.hasNextInt()) {
			String b = sc.nextInt()+"";
			if(b.length() == 4) {
				return b.substring(0,2)+"-"+b.substring(2);
                // 계좌번호 123-45 처럼 출력
			}
			System.out.println(" > 4자로 입력하세요.");
			sc.nextLine();
		}else {
			System.out.println(" > 숫자만 입력하세요.");
			sc.nextLine();
		}
	}
}

 

  • AccountMain
더보기
import java.util.ArrayList;
import java.util.Scanner;

 

Scanner sc = new Scanner(System.in);
ArrayList<Account> list = new ArrayList<Account>();
Util util = new Util();

 

 

while(true) {
	System.out.println("=============lol은행=============");
	System.out.println("1.계좌생성 2.입금 3.출금 4.계좌목록 5.조회 0.종료");
	int menu = util.numberCheck("메뉴입력> ",sc);
	
	System.out.println();
	
	if(menu == 1) {
		System.out.println(" ===> 계좌생성");
		String name = util.mCheck("예금주> ",sc);
		String account = util.mCheck("계좌번호> ",sc);
		String pw = util.mCheck("비밀번호> ",sc);
		Account a = new Account(name, account, pw);
		list.add(a);
		
		System.out.println(name+"님, 계좌가 생성되었습니다.");
		
	}else if(menu == 2) {
		System.out.println(" ===> 입금");
		System.out.println("입금할 계좌번호> ");
		String inAccount = sc.next();
		boolean find = false;
		for(Account a : list) {
			if(a.getAccount().equals(inAccount)) {
				System.out.println(" > 계좌번호가 확인되었습니다.");
				int inMoney = util.numberCheck("입금할 금액> ",sc);
				a.deposit(inMoney);
				System.out.println(" > 입금이 완료되었습니다.");
				find = true;
				break;
				
			}
		}
		if(!find) {
			System.out.println(" > 조회할 수 없는 계좌입니다.");
		}
		
	}else if(menu == 3) {
		System.out.println(" ===> 출금");
		System.out.println("출금할 계좌번호> ");
		String outAccount = sc.next();
		boolean find = false;
		for(Account a : list) {
			if(a.getAccount().equals(outAccount)) {
				System.out.println(" > 계좌번호가 확인되었습니다.");
				int outMoney = util.numberCheck("출금할 금액> ",sc);
				if(a.withdraw(outMoney)) {	// true가 리턴되면 출금
					System.out.println(" > 출금이 완료되었습니다.");
				}else {		// false가 리턴되면 잔액부족
					System.out.println(" > 잔액이 부족합니다.");
				}
				find = true;
				break;
			}
		}
		if(!find) {
			System.out.println(" > 조회할 수 없는 계좌입니다.");
		}
		
	}else if(menu == 4) {
		System.out.println(" ===> 계좌목록");
		System.out.println("예금주\t계좌번호\t비밀번호\t잔액\t가입날짜");
		System.out.println("=============================================");
		for(Account a : list) {
			a.print();
		}
		
	}else if(menu == 5) {
		System.out.println(" ===> 조회");
		System.out.print("조화할 계좌번호> ");
		String seachAcc = sc.next();
		boolean find = false;
		for(Account a : list) {
			if(a.getAccount().equals(seachAcc)) {
				System.out.println("예금주\t계좌번호\t비밀번호\t잔액\t가입날짜");
				System.out.println("=============================================");
				a.print();
				find = true;
				break;
			}
		}
		if(!find) {
			System.out.println(" > 조회할 수 없는 계좌입니다.");
		}
		
	}else if(menu == 0) {
		System.out.println(" ===> 종료");
		
		break;
	}else {
		System.out.println(" > 존재하는 메뉴를 선택해주세요.");
	}
	
	sc.nextLine();
	System.out.println();
}

System.out.println("===============================");

 

 

3. static

  • 클래스 변수(정적필드)
  • class에 붙어서 하나만 존재할 수 있는 변수
  • 메인에서 접근할 때, 클래스명으로 접근

 


 

질문한 내용이나 어려웠던 점 메모

 - 2-1의 Util, 글자수 체크 메서드

  • 코드를 잘못짜서 입력을 두번 받아야 넘어갈 수 있게 되어서 줄이는 방법을 질문했다.
  • 내가 메서드 안에서 sc.next();를 두번 사용해서 그런 결과가 출력됐던 것을 확인 받았다. 나는 sc.next();를 if 조건에서 한 번, 리턴할 때 한 번 썼는데, 이게 입력을 두 번 받게 되는 결과가 된 것이었다.
  • 변수를 하나 선언하면서 값을 저장하고 그 값을 리턴하는 방식으로 해결했다.

 


 

전체 피드백

  • 연휴동안 열심히 놀아서 그런지 수업을 듣는데 조금 힘들었다. 

 


728x90