인천일보아카데미 (39)

728x90

 

수업내용 정리 (Java)

 

1. 복습 +a

 1-1) 변수 선언, 초기화, 대입

int a;
a = 1;
a = 2;

int b = 0;
  • 변수 선언: int a;
    (변수는 생성되지 않음!)
  • 초기화: a = 1;
    처음 변수에 값을 집어넣어서 변수가 생성됨
  • 대입: a = 2;
    변수 안 값을 다른 값으로 대체
  • int ab = 0;
    변수 선언과 초기화를 동시에 하는 것

 

 

2. 반복문_foreach

int[] a = {1,3,5,7,9};
// 인덱스로 확인하는 방법
for(int i=0; i<a.length; i++) {
	System.out.println(a[i]);
}
// foreach
for(int i : a) {
	System.out.println(i);
}
  • 인덱스로 확인하는 방법
    • i번째 배열에 있는 값을 출력
  • foreach
    • 배열을 순서대로 i에 대입
    • i의 타입은 배열의 타입으로 적어야 한다.

 ex)

String[] b = {"홍길동", "이순신", "심청이"};
for(String i : b) {
	System.out.println(i);
}

 

 

3. 예제_grade

 3-1) 변수 선언

Scanner sc = new Scanner(System.in);
		
String[] name = new String[10];	// 학생이름
int[] kor = new int[10];	// 국어점수
int[] eng = new int[10];	// 영어점수
int[] mat = new int[10];	// 수학점수
int[] total = new int[10];	// 총점
double[] avg = new double[10];	// 평균
char[] grade = new char[10];	// 학점
int cnt = 0;			// 학생을 등록할 때마다 1 증가
  • cnt를 지정해야 학생을 몇번 등록했는지 코드에 저장해두고 나중에 에러가 나지 않는다.
  • ex
    • for(int i=0; i<cnt; i++): 등록된 학생 수보다 적은 동안에 돌아가는 for문
    • for(int i=0; i<name.length; i++): name의 크기보다 적은 동안에 돌아가는 for문
      즉, 학생을 몇명 등록했는지와 상관없이 name의 크기만큼 돌아가는 for문
      학생을 name의 크기보다 적게 등록하고 name[i]로 했을 경우, 에러가 난다.

 

 3-2) 기본틀

while(true) {
	System.out.println("==========학사관리시스템==========");
	System.out.println("1.학생등록 2.학생리스트 3.검색 0.종료");
	System.out.print("메뉴선택> ");
	int menu = sc.nextInt();
	
	if(menu == 1) {
		
	}else if(menu == 2) {
		
	}else if(menu == 3) {
				
	}else if(menu == 0) {
		break;
	}else {
		System.out.println("존재하지 않는 메뉴입니다.");
	}
	
	System.out.println();
}
System.out.println("프로그램 종료");
System.out.println("=============================");
  • 메뉴는 0부터 3까지 있다.
  • 0은 종료이기 때문에 break;를 넣어 while문을 나간다.
  • 0~3 이외의 메뉴가 없기 때문에 else로 존재하지 않는 메뉴라는 말을 출력한다.

 

 3-3) 메뉴 선택에서 1을 입력했다면, 1. 학생등록

if(menu == 1) {
		System.out.print("학생이름> ");
		name[cnt] = sc.next();
		System.out.print("국어점수> ");
		kor[cnt] = sc.nextInt();
		System.out.print("영어점수> ");
		eng[cnt] = sc.nextInt();
		System.out.print("수학점수> ");
		mat[cnt] = sc.nextInt();
		total[cnt] = kor[cnt]+eng[cnt]+mat[cnt];
		avg[cnt] = total[cnt] / (double)3; 	// (double)total[0] / 3; 으로도 가능
		char a = ' ';
		if(avg[cnt] >= 90) {
			a = 'A';
		}else if(avg[cnt] >= 80) {
			a = 'B';
		}else if(avg[cnt] >= 70) {
			a = 'C';
		}else if(avg[cnt] >= 80) {
			a = 'D';
		}else if(avg[cnt] < 60) {
			a = 'F';
		}
		grade[cnt] = a;
		System.out.println(name[cnt]+" 학생 등록완료!");
		cnt++;
}
  • name, kor, eng, mat에 정보가 입력되면 total에 kor, eng, mat을 더해 저장하고, avg에 total의 평균을 저장한다.
  • 평균이 90, 80, 70, 60, 60미만인가에 따라 A, B, C, D, F를 a에 저장 후 grade에 대입
  • 학생 등록이 완료되면 cnt 1 추가

 

 3-4) 메뉴 선택에서 2를 입력했다면, 2. 학생 리스트

else if(menu == 2) {
	System.out.println("이름\t국어\t영어\t수학\t총점\t평균\t학점");
	System.out.println("==================================================");
	for(int i=0; i<cnt; i++) {
		System.out.printf("%s\t%d\t%d\t%d\t%d\t%.2f\t%c\n",
				name[i], kor[i], eng[i], mat[i], total[i], avg[i], grade[i]);
}
  • 등록된 학생들의 이름, 국어, 영어, 수학, 총점, 평균, 학점 순으로 출력한다.

 

 3-5) 메뉴 선택에서 3을 입력했다면, 3. 검색    // 질문! ( i == cnt-1 )

else if(menu == 3) {
	System.out.print("검색할 학생 이름> ");
	String searchName = sc.next();
	//				내가 한 방법
	for(int i=0; i<cnt; i++) {
	if(searchName.equals(name[i])) {
		System.out.println("이름\t국어\t영어\t수학\t총점\t평균\t학점");
		System.out.println("==================================================");
		
		System.out.printf("%s\t%d\t%d\t%d\t%d\t%.2f\t%c\n",
				name[i], kor[i], eng[i], mat[i], total[i], avg[i], grade[i]);
		break;
	}else if(i==cnt-1) {
		System.out.println("리스트에 존재하지 않는 학생입니다.");
	}
}
  • 콘솔창에서 학생 이름을 받아오면 for문을 통해 입력받아온 이름과 name 배열 안에 있는 이름을 비교해서(.equals()) 동일할 경우, 정보를 출력한다.
  • name 배열에서 찾을 수 없는 경우, 리스트에 존재하지 않는 학생입니다. 를 출력한다.
// 				다른 방법! (선생님이 하신 방법)
boolean find = false;

for(int i=0; i<cnt; i++) {
	if(searchName.equals(name[i])) {
		System.out.println("이름\t국어\t영어\t수학\t총점\t평균\t학점");
		System.out.println("==================================================");
		
		System.out.printf("%s\t%d\t%d\t%d\t%d\t%.2f\t%c\n",
				name[i], kor[i], eng[i], mat[i], total[i], avg[i], grade[i]);
		find = true;
		break;
	}
}
if(find == false) { // !find
	System.out.println("리스트에 존재하지 않는 학생입니다.");
}

 

  • boolean을 이용해 find를 false로 선언 및 초기화해두고, 입력받아온 이름이 name 배열 안에 있으면 find를 true로 바꾸고 반복을 멈춘다.
  • 입력받아온 이름이 name 배열 안에 없으면 find가 false이므로 두번째 if의 조건을 충족해서 리스트에 존재하지 않는 학생입니다. 를 출력한다.

 

 

4. 예제_account

 4-1) import

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy년MM월dd일 hh:mm:ss");
Scanner sc = new Scanner(System.in);
  • DateTimeFormatter
    날짜를 받아올 수 있다.
  • Scanner
    콘솔창에서 입력받아올 수 있다.

 

 4-2) 변수 선언

String[] name = new String[10];		// 예금주
String[] account = new String[10];	// 계좌번호
int[] balance = new int[10];		// 잔액
String[] joinDate = new String[10];	// 가입날짜
int cnt = 0;

 

 4-3) 기본 틀

while(true) {
	System.out.println("=============은행=============");
	System.out.println("1.계좌생성 2.입금 3.출금 4.계좌목록 0.종료");
	System.out.print("메뉴 선택> ");
	int menu = sc.nextInt();
	
	if(menu == 1) {
		
	}else if(menu == 2) {
		
	}else if(menu == 3) {
		
	}else if(menu == 4) {
		
	}else if(menu == 0) {
		break;
	}
	
	System.out.println();
}
System.out.println("프로그램 종료");
  • 메뉴는 0부터 3까지 있다.
  • 0은 종료이기 때문에 break;를 넣어 while문을 나간다.

 

 4-4) 메뉴 선택에서 1을 입력했다면, 1. 계좌 생성

if(menu == 1) {
	System.out.print("이름을 입력해주세요.\n이름 입력> ");
	name[cnt] = sc.next();
	System.out.print("계좌번호를 입력해주세요.\n계좌번호 입력> ");
	account[cnt] = sc.next();
	System.out.print("초기 잔액을 입력해주세요.\n잔액 입력> ");
	balance[cnt] = sc.nextInt();
	
	String now = dtf.format(LocalDateTime.now());
	
	joinDate[cnt] = now;
	
	System.out.println(name[cnt]+"님 계좌생성 완료되었습니다.");
	cnt++;	
}
  • name, account, balance에 정보가 입력되면 입력한 시간을 String now로 불러오고, now를 joinDate에 저장한다.
  • 계좌 생성이 완료되면 cnt에 1을 추가한다.

 

 4-5) 메뉴 선택에서 2를 입력했다면, 2. 입금

else if(menu == 2) {
	System.out.print("입금할 계좌번호를 입력해주세요.\n입금할 계좌번호> ");
	String inAccount = sc.next();
	for(int i=0; i<cnt; i++) {
		if(inAccount.equals(account[i])) {
			System.out.print("입금할 금액을 입력해주세요.\n입금할 금액> ");
			int inMoney = sc.nextInt();
			System.out.println("성공적으로 입금이 되었습니다.");
			System.out.printf("입금 전 잔액: %,d원\n",balance[i]);
			balance[i] += inMoney;
			System.out.printf("입금 후 잔액: %,d원",balance[i]);
			break;
		}else if(i == cnt-1) {
			System.out.println("존재하지 않는 계좌입니다.");
		}
	}
}
  • 입금할 계좌번호를 입력받아오고 그 값이 account 배열 안에 있을 경우, 입금할 금액을 입력받고, 입금 전, 후의 잔액을 출력하고 break로 for문을 빠져나간다.
  • account 배열 안에 없을 경우, 존재하지 않는 계좌입니다. 를 출력한다.

 

 4-6) 메뉴 선택에서 3을 입력했다면, 3. 출금

else if(menu == 3) {
	System.out.println("출금할 계좌번호를 입력해주세요.\n출금할 계좌번호> ");
	String outAccount = sc.next();
	for(int i=0; i<cnt; i++) {
		if(outAccount.equals(account[i])) {
			System.out.print("출금할 금액을 입력해주세요.\n출금할 금액> ");
			int outMoney = sc.nextInt();
			if(balance[i] < outMoney) {
				System.out.println("잔액이 부족합니다.");
			}else {
				System.out.println("성공적으로 출금이 되었습니다.");
				System.out.printf("출금 전 잔액: %,d원\n",balance[i]);
				balance[i] -= outMoney;
				System.out.printf("출금 후 잔액: %,d원",balance[i]);
			}
		}else if(i == cnt-1) {
			System.out.println("존재하지 않는 계좌입니다.");
		}
	}
}
  • 출금할 계좌번호를 입력받아오고 그 값이 account 배열 안에 있을 경우, 출금할 금액을 입력받고, 계좌 안에 남아있는 잔액보다 적을 경우에는 출금 전, 후의 잔액을 출력하고 break로 for문을 빠져나간다.
  • account 배열 안에 있지만 입력받은 출금 금액이 계좌 잔액보다 클 경우, 잔액이 부족합니다. 를 출력한다.
  • account 배열 안에 없을 경우, 존재하지 않는 계좌입니다. 를 출력한다.

 

 4-7) 메뉴 선택에서 4를 입력했다면, 4. 계좌 목록

else if(menu == 4) {
	System.out.println("예금주\t계좌번호\t잔액\t\t가입날짜");
	System.out.println("============================");
	for(int i=0; i<cnt; i++) {
		System.out.printf("%s\t%s\t%,d원\t%s\n",name[i],account[i],balance[i],joinDate[i]);
	}
}
  • 등록된 계좌들을 예금주, 계좌번호, 잔액, 가입날짜 순으로 출력한다.
  • cnt보다 적을 때 동안 반복하여 출력

 

 


 

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

 

3-5) : 왜 cnt가 아니라 cnt-1을 붙여야 하는지 (관련: 4-5, 4-6)

for(int i=0; i<cnt; i++)
else if(i==cnt-1) {
	System.out.println("리스트에 존재하지 않는 학생입니다.");
}
  • for문에 i가 cnt보다 작은 만큼 돈다고 그랬으니 else if의 조건을 i==cnt라고 해버리면 for문의 조건문에 부합하지 않으므로 for문을 돌지 않는다. 그렇기 때문에 else if는 아예 조건을 성립할 수 없게 된다.
  • else if의 조건을 i==cnt-1이라고 하면, for문의 조건인 i가 cnt보다 작을 동안. 즉, cnt보다 1적을 때까지니까 for문의 마지막 반복일 때 else if를 실행하라는 조건이 된다.
  • 질문한 이유: for문의 미자막 반복이면 실행한다는 조건을 넣어야 해서 i==cnt 라는 조건을 걸었더니 아예 실행되지 않았다. 해결하긴 했으나 왜 이게 되는지 몰랐다.

 

 


 

전체 피드백

  • for문을 아직 완벽하게 이해하지 못한 것 같다. 자꾸 cnt보다 작을 때 동안 반복한다라고 알고는 있는데 cnt와 같은 값이어도 돌 것이라고 생각할 때가 있다. 선생님이 if(int i=0; i<2; i++)이라면 i의 값은 3이 된대서 이 설명을 듣고 종종 헤매는 것 같다. 그러지 않도록 많이 if문을 이용한 문제를 보는 것도 괜찮을 것 같다.
  • 코드 제대로 보기!!!

 


728x90
728x90

 

수업내용 정리 (Java)

 

1. 복습

// 문제3) while문을 통해 반복적으로 숫자를 입력받다가 0이 입력되면 반복문 종료

int a = 1;

while(a != 0) {
	System.out.print("숫자입력> ");
	a = sc.nextInt();
}
System.out.println("종료");
  • int에 의미없는 값을 넣을 때는 보통 0 또는 -1을 넣는다.

 

 

2. 배열_예제

 2-1)

int[] a = {4,6,23,43,65}

 

// 문제2) a 배열의 짝수의 합 출력
int sum = 0;

for(int i=0; i<a.length; i++){
	if(a[i]%2 == 0){
    	sum += a[i];
    }
}
System.out.println("짝수의 합: "+sum)
  • for문 조건: i가 a의 크기보다 작은 동안 i가 1씩 더해지면서 반복한다.
  • 만약 a의 i번째 인덱스 값을 2로 나눴을 때, 나머지가 0이면 sum에 a의 i번 인덱스 값을 더한다.

 

// 문제3) a배열의 홀수의 개수 출력
int sum = 0;

for(int i=0; i<a.length; i++) {
	if(a[i]%2 != 0) {
    	sum++;
    }
}
  • for문 조건: i가 a의 크기보다 작은 동안 i가 1씩 더해지면서 반복한다.
  • 만약 a의 i번째 인덱스 값을 2로 나눴을 때, 나머지가 0이 아니면 sum에 1씩 더한다.

 

// 문제4) a 배열의 인덱스가 짝수인 값의 합 출력
int sum = 0;

for(int i=0; i<a.length; i++) {
	if(i%2 == 0) {
    	sum += a[i];
    }
}
  • for문 조건: i가 a의 크기보다 작은 동안 i가 1씩 더해지면서 반복한다.
  • 만약 i가 2로 나눴을 때, 나머지가 0이라면 a 배열의 i번 인덱스 값을 sum에 더한다.

 

 

 2-2) 반복하면서 a 배열에 값을 입력하는데, 입력한 값이 인덱스가 한 칸씩 밀려서 들어가고 마지막으로 입력한 값은 0번째 인덱스에 넣기

int[] a = new int[10];

for(int i=0; i<a.length; i++) {
	System.out.print("숫자입력> ");
    if(i == a.length-1) {
    	a[0] = sc. nextInt();
    }else {
    	a[i+1] = sc.nextInt();
    }
}
  • for문 조건: i가 a의 크기보다 작은 동안 i가 1씩 더해지면서 반복한다.
  • 만약 i가 a.length보다 1 작을 때라면, a 배열의 0번 인덱스에 입력받은 값을 넣는다.
  • 그렇지 않다면, i+1번 인덱스에 입력받은 값을 넣는다.
// 다른 분이 짠 코드
for(int i=1; i<=a.length; i++) {
	if(i==a.length) {
		i=0;
		System.out.print("숫자입력> ");
		a[i] = sc.nextInt();
		break;
	}
	System.out.print("숫자입력> ");
	a[i] = sc.nextInt();
}
  • for문 조건: i가 1부터 시작하고, i가 a의 크기보다 작거나 같은 동안 i가 1씩 더해지면서 반복한다.
  • 만약 i가 a의 크기와 같다면, i에 0을 대입하고, 입력받아온 값을 a[i]에 넣고, for문을 나간다.
  • 입력받아온 값을 a의 i번 인덱스에 넣는다.
  • for문으로 계속 반복하다가 if문에 걸릴 때, if문을 실행하고 break로 for문을 나가므로 0번 인덱스의 값이 변경된다.

 

 

 2-3) 입력을 반복해서 받는데, 짝수만 a 배열에 저장

int[] a = new int[10];
		
for(int i=0; i<a.length; i++) {
	while(true) {
		System.out.print("숫자입력> ");
		int answer = sc.nextInt();
		if(answer%2 == 0) {
			a[i] = answer;
			break;
		}
	}
}
  • while문을 통해 answer라는 변수를 만들어 숫자를 입력받고, 그 값이 2로 나눴을 때 나머지가 0인 경우에만 a 배열에 차례대로 저장하고 while문을 나간다.
// 다른 분이 짠 코드 1
for(int i=0; i<a.length; i++) {
	System.out.print("숫자입력> ");
	a[i] = sc.nextInt();
	if (a[i]%2 != 0) {
		i--;
	}
}
  • 입력받은 값을 a 배열에 바로 저장하지만, i번 인덱스의 값이 2로 나눴을 경우 나머지가 0이 아닌 경우에 i를 1 빼고 다시 for문으로 돌아가 동일한 i번 인덱스에 값을 재설정하게 된다.
// 다른 분이 짠 코드 2
for(int i=0; i<a.length; i++) {
	System.out.print("숫자입력> ");
	int num = sc.nextInt();
	if(num%2 == 0) {
		a[i] = num;
	}else {
		i--;
	}
}
  • num이라는 새로운 변수를 지정해서 입력받아올 값을 여기에 저장한다.
  • 이때 만약 num을 2로 나눴을 때 나머지가 0이라면, i번 인덱스에 num 값을 저장한다.
  • 그렇지 않다면, i를 1 뺀다.
  • else에서 i를 빼면서 다시 num에 값을 저장하고 그 값이 2로 나눴을 때 나머지가 0일 때까지 반복한다.

 

 

 2-4) a 배열의 0번째 인덱스에 모든 값 누적

int[] a = {4,6,23,43,6};

for(int i=1; i<a.length; i++) {
	a[0] += a[i];
}
  • 0번 인덱스는 이미 담겨있으므로, i를 1부터 시작하게 해서 1번 인덱스부터 마지막 인덱스까지 누적해서 합한다.

 


 

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

 

1. a.length: 두 for문이 동일하게 10번 돌아가는 이유

// 1)
int[] a = new int[10];

for(int i=0; i<a.length; i++) {
	System.out.println(i);
}
// 2)
for(int i=0; i<=9; i++) {
	System.out.println(i);
}
  • - 1) 인덱스 번호는 0부터 9까지지만 크기가 10이기 때문에 10번 돌아간다.
    - 2) i가 0부터 9가 될 때까지 10번 돌아간다.
  • 질문한 이유: 인덱스는 9까지인데 왜 a.length를 사용할 때 작거나 같을때(<=)가 아닌 작을 때(<) 동안 반복한다고 해야 10번이 돌아가는지 이해가 안 갔다.

 


 

전체 피드백

  • 사실 1.복습에서 이전에 배웠던 코드로 쓰려고 했는데 적어둔 코드를 안 보고 하려다보니 boolean이 기억이 안 나서 꼼수를 부리다가 나온건데 칭찬을 받아서 얼떨떨했다..
  • 이게 될 리가 있나? 하는 코드를 써봤는데 제대로 굴러가서 원하는 대로 출력이 됐다. 처음부터 안 된다고 단정짓지 말고 안 된다고 생각이 되어도, 꼼수라고 생각되더라도 해보는 것이 좋을 것 같다!
  • 그냥 코드로 이걸 만들어보세요 하면 고민하면서 조금 만들어보겠는데 쉬는 겸 선생님이 코드를 보여주시면 구조를 생각해서 답을 생각해내는 퀴즈에선 답을 잘 못맞추겠다..계속 틀려서 답을 안 내면 그게 정답이어서 너무 슬펐다.
    답을 못맞추는 데에는 코드에 대한 이해도도 있지만, 코드를 잘못 보는 것도 있어서 코드를 제대로 보도록 노력해야겠다.

 

 안 될 것 같아도 일단 해보기!
 코드 제대로 보기!

 


728x90
728x90

 

수업내용 정리 (Java)

 

1. 조건문_if (복습)

// 문제1) 입력받은 수에 따라 양수, 음수, 0 출력

System.out.print ("숫자 입력> ");
int sum = sc.nextInt();

if (sum > 0) {
	System.out.println(sum+": 양수");
}else if (sum < 0) {
	System.out.println(sum+": 음수");
}else {
	System.out.println(sum);
}
  • 입력받아올 식을 까먹었다. sc.nextInt();

 

// 문제2) 입력받은 수에 따라 3의 배수, 5의 배수, 3과 5의 배수, 둘 다 아님 출력

System.out.print("숫자 입력> ");
int num = sc.nextInt();

if(num%15==0) {
	System.out.println(num+": 3과 5의 배수입니다.");
}else if(num%3==0) {
	System.out.println(num+": 3의 배수입니다.");
}else if(num%5==0) {
	System.out.println(num+": 5의 배수입니다.");
}else {
	System.out.println(num+": 둘 다 아님");
}

 
 

2. 반복문_for (복습)

// 문제1) 1~100까지의 합 출력

int sum = 0;
for(int i=1; i<=100; i++) {
	sum+=i;
}
System.out.println(sum);

 

// 문제2) 1~100까지 3의배수개수, 5의배수개수, 3과5의배수개수 출력(0도 포함)

int sum3 = 0;
int sum5 = 0;
int sum15 = 0;

for(int i=1; i<=100; i++) {
	if(i%3==0) {
		sum3++;
	}
	if(i%5==0) {
		sum5++;
	}
	if(i%15==0) {
		sum15++;
	}
}
System.out.println("3의 배수: "+sum3+" 개");
System.out.println("5의 배수: "+sum5+" 개");
System.out.println("3과 5의 배수: "+sum15+" 개");

 

// 문제3) 두개의 숫자를 입력받고, 첫번째 입력받은 수부터 두번째 입력받은 수까지의 합 출력

System.out.print("첫번째 숫자: ");
int num1 = sc.nextInt();
System.out.print("두번째 숫자: ");
int num2 = sc.nextInt();

int num12 = 0;

for(int i=num1; i<=num2; i++) {
	num12 += i;
}
System.out.println(num1+"부터 "+num2+"까지의 합은 "+num12+"입니다.");
  • 입력받아올 수를 이용하여 첫번째 수부터 두번째 수까지의 합을 출력하는걸 헤매다가 1번 문제를 보고 힌트를 받아 해결했다.

 
 

3. 자판기(while, switch) (복습)

Scanner sc = new Scanner(System.in);
boolean run = true;
int balance = 10000; //잔액
String list = "";

while(run) {
	System.out.printf("======LOL상점======[잔액: %,d원]\n", balance);
	System.out.println("1.도란검(1,000원) 2.링(1,200원) 3.방패(1,500원)\n4.충전 5.구매내역 0.종료");
	System.out.print("메뉴 선택> ");
	int menu = sc.nextInt();
	
	switch(menu) {
	case 1:
		if(balance-1000>=0) {
			balance -= 1000;
			System.out.println("도란검 구매 완료");
			list += "도란검\t1000\n";
		}else {
			System.out.println("잔액 부족!");
		}
		break;
	case 2:
		if(balance-1200>=0) {
			balance -= 1200;
			System.out.println("링 구매 완료");
			list += "링\t1200\n";
		}else {
			System.out.println("잔액 부족!");
		}
		break;
	case 3:
		if(balance-1500>=0) {
			balance -= 1500;
			System.out.println("방패 구매 완료");
			list += "방패\t1500\n";
		}else {
			System.out.println("잔액 부족!");
		}
		break;
	case 4:
		System.out.println("충전할 금액> ");
		int money = sc.nextInt();
		balance += money;
		// balance += sc.nextInt(); 위 두 줄을 이렇게 한 줄로 줄여도 됨.
		break;
	case 5:
		System.out.println("구매 상품\t가격");
		System.out.println("============");
		System.out.println(list);
		break;
	case 0:
		run = false;
		break;
	default:
		System.out.println("없는 번호입니다.");
	}
	
	System.out.println();
}
System.out.println("프로그램 종료");
  • String list = "";
  • 위치를 while문 안에(int menu 밑에) 넣었더니 리스트가 뜨지 않았다.
  • %,d: 세자리 수가 될 때마다 ,(콤마)를 넣어준다.
  • ex) 1,000 / 1,000,000
  • int money = sc.nextInt();
  • balance += money;
  • 이 식은 balance += sc.nextInt(); 식으로 줄일 수 있다.

 
 

4. 홈페이지 로그인 (복습)

Scanner sc = new Scanner(System.in);
boolean run = true;
String name = "";	//회원가입 이름
String id = "";		//회원가입 아이디
String pw = "";		//회원가입 비밀번호

while(run) {
	System.out.println("=======홈페이지=======");
	System.out.println("1.회원가입 2.로그인 0.종료");
	System.out.print("메뉴선택> ");
	int menu = sc.nextInt();
	
	if(menu == 1) {
		System.out.println("회원가입 할 이름 입력");
		System.out.print("이름> ");
		name = sc.next();
		System.out.println("회원가입 할 아이디 입력");
		System.out.print("아이디> ");
		id = sc.next();
		System.out.println("회원가입 할 비밀번호 입력");
		System.out.print("비밀번호> ");
		pw = sc.next();
		
		System.out.println("회원가입 성공!");
		
	}else if(menu == 2) {
		System.out.print("아이디 입력> ");
		String loginId = sc.next();
		System.out.print("비밀번호 입력> ");
		String loginPw = sc.next();
		if(loginId.equals(id) && loginPw.equals(pw)) {
			System.out.println(">로그인 성공!");
		}else {
			System.out.println(">로그인 실패");
			
			System.out.println("아이디/비밀번호를 찾으시겠습니까?");
			System.out.println("1.홈페이지로 2.아이디찾기 3.비밀번호찾기 4.종료");
			System.out.print("메뉴선택> ");
			int answer1 = sc.nextInt();
			if(answer1 == 2) {
				System.out.println("회원가입 시 입력하셨던 이름을 입력해주세요.");
				System.out.print("이름 입력> ");
				String loginName = sc.next();
				if(loginName.equals(name)) {
					System.out.println("회원님의 아이디는 [ "+id+" ]입니다.");
				}else {
					System.out.println("회원 정보가 없습니다.");
				}
			}else if(answer1 == 3) {
				System.out.println("회원가입 시 입력하셨던 이름과 아이디를 입력해주세요.");
				System.out.print("이름 입력> ");
				String searchName = sc.next();
				System.out.print("아이디 입력> ");
				String searchId = sc.next();
				if(searchName.equals(name) && searchId.equals(id)) {
					System.out.println("회원님의 비밀번호는 [ "+pw+" ]입니다.");
				}else {
					System.out.println("회원 정보가 없습니다.");
				}
			}else if(answer1 == 4) {
				run = false;
			}else if(answer1 == 1) {
				
			}else {
				System.out.println("없는 메뉴입니다.");
			}
		}
		
	}else if(menu == 0) {
		run = false;
	}else {
		System.out.println("없는 메뉴입니다.");
	}
		
	System.out.println();
}
System.out.println("홈페이지 종료");
  • 회원가입, 로그인, 종료에서 아이디찾기, 비밀번호 찾기를 임의로 추가했다.
  • 비밀번호 변경도 추가해보려고 했는데, 수업 시간인데 너무 오래 걸릴 것 같아서 못했다.

 
 

5. 배열

  • 하나의 변수에 여러가지 변수를 담고싶을 때 사용한다.
  • 배열의 인덱스는 0부터 시작한다.
  • 값이 없는 상태에서 인덱스만 생성할 수 있다.

 

// 배열을 쓰지 않았을 때

String name1 = "홍길동";
String name2 = "이순신";
name2 = "강감찬";
String name3 = "심청이";
System.out.println(name1);
System.out.println(name2);
System.out.println(name3);
// 배열을 사용했을 때

String[] name = {"홍길동", "이순신", "심청이"};
name[1] = "강감찬";
System.out.println(name[0]);
System.out.println(name[1]);
System.out.println(name[2]);
// 값이 없는 상태에서 인덱스만 생성

String[] names = new String[10];

names[0] = "장동건";
names[5] = "원빈";
  • 없는 인덱스를 쓰려고 하면 에러가 난다.
  • ex) name[3] = "강감찬";
  • 없는 인덱스를 호출하려고 하면 에러가 난다.
  • ex) System.out.println(name[3]);
  • 변수 내의 인덱스 값은 (변수이름)[(인덱스 값)] = "(바꿀 값)"; 으로 바꿀 수 있다.

 
 5-1) 예제

int[] a = new int[10];
int[] b = {1, 2, 3, 4, 5, 6, 7, 8, 9 ,10};

for(int i=0; i<b.length; i++) {
	System.out.println(b[i]);
}

// b[3]까지만 출력
for(int i=0; i<3; i++) {
	System.out.println(b[i]);
}
  • int[] a 는 인덱스만 생성한 변수
  • int[] b 는 인덱스에 값을 입력한 상태로 생성한 변수
  • b.length 는 b의 길이, 즉 0부터 9까지 10을 가지고 있다.

 

//문제) 배열 합하기

int[] a = {12, 24, 3, 44, 56, 6, 77, 8, 9 ,10};
int sum = 0;

for(int i=0; i<a.length; i++) {
	sum+=a[i];
}
System.out.println(sum);
  • int[] a 안에 들어있는 값을 모두 더하는 식
  • a.length 를 사용함으로 a 내에 있는 인덱스 수를 세지 않아도 된다.

 


 

전체 피드백

  • 데이터를 받아올 식이나 그런 식들을 자주 잊는 것 같다. 기억하도록 노력하자!
  • for문과 배열을 합쳤을 때 왜 이렇게 출력되는지는 알겠는데 설명을 하라고 하면 못하겠다...

 


728x90
1 ··· 9 10 11 12 13