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
'프로그래밍 > 수업일지' 카테고리의 다른 글
수업일지 13일차 (23/10/06) - Java (1) | 2023.10.07 |
---|---|
수업일지 12일차 (23/10/05) - Java (1) | 2023.10.05 |
수업일지 10일차 (23/09/27) - Java (0) | 2023.09.27 |
수업일지 9일차 (23/09/26) - Java (0) | 2023.09.26 |
수업일지 8일차 (23/09/25) - Java (0) | 2023.09.25 |