전체 글 (135)

20230919
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
20230918
728x90

 

수업내용 정리 (Java)

 

1.반복문_break_continue

 1-1) break: 멈추기

for(int i=1; i<=10; i++) {
	if(i==5) {
		break;
	}
	System.out.println(i);
}
  • for문은 i가 10보다 작거나 같을 때까지 반복하여 출력하라는 식인데
  • if문을 넣음으로 i가 5일때 break, 출력은 4까지만 된다.

 

 1-2) continue: 건너뛰기

for(int i=1; i<=10; i++) {
	if(i==5) {
		continue;
	}
	System.out.println(i);
}
  • for문은 i가 10보다 작거나 같을 때까지 반복하여 출력하라는 식인데
  • if문을 넣음으로 i가 5일때 continue, 출력은 5를 뺀 나머지 1~10이 출력된다.

 

2. 반복문_while

while(조건문){
	
}
  • 조건문이 참일 동안에 반복해서 실행

 

while(1 == 1) {
	System.out.println("자바는 즐거워");
}
  • 조건문이 참이고, while은 조건문이 참일 동안에 실행한다고 그랬으니 이 식은 "자바는 즐거워"가 무한으로 출력된다.

 

int i = 1;
while(i < 100) {
	System.out.println("자바는 즐거워");
    i++;
}
  • i는 1이고, while은 10보다 작을 동안에 실행한다.
  • i++;을 씀으로 한 번 실행할 때마다 i에 1씩 추가가 되므로 "자바는 즐거워"가 99번 출력된다.
int i = 1;
while(i < 100) {
	System.out.println("자바는 즐거워");
    i++;
    if (i == 5){
    	break;
    }
}
  • 이 경우, if문으로 i가 5가 되면 break하라는 식이 적혀있으니, 다시 실행되기 전에 멈춰서 "자바는 즐거워"가 4번 출력된다.

 

 2-1 while_예제

// 1~100까지의 합
int sum = 0;
int i = 1;
while(i <= 100) {
    sum=sum+i;
    i++;
}
System.out.println(sum);
  • i가 100보다 작거나 같을 때까지 반복
  • 반복할 때마다 i가 1씩 증가

 

Scanner sc = new Scanner(System.in);

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

	if(num == 0){
		break;
	}
	System.out.println("입력받은 값: "+num);
}
System.out.println("반복문 종료");
  • 숫자를 입력받고, 입력받은 숫자를 다시 출력
  • 입력받은 숫자가 0이면 while을 빠져나와서 "반복문 종료" 출력

 

Scanner sc = new Scanner(System.in);

while(true) {
	System.out.print("숫자 입력> ");
	int num = sc.nextInt();
	
	if(num==0) {
		break;
	}
	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);
	}
	
}
System.out.println("반복문 종료");
  • 숫자를 입력받고, 입력받은 숫자가 3의배수, 5의배수, 3과5의배수일 경우, 해당 숫자가 무엇의 배수인지 출력
  • 입력받은 숫자가 0이면 while을 빠져나와서 "반복문 종료" 출력

 

 2-2 while_예제(자판기)

Scanner sc = new Scanner(System.in);
int money = 10000;

while(true) {
	System.out.println("======자판기=====  잔액: "+money+"원");
	System.out.println("1.콜라(1,000원) 2.사이다(1,200원) 3.우유(1,500원) 0.종료");
	System.out.print("메뉴 선택> ");
	int menu = sc.nextInt();
	
	if(menu == 1) {
		if(money>=1000) {
			System.out.println("콜라 선택");
			money = money-1000;  // money -= 1000
		}else {
			System.out.println("잔액 부족입니다.");
		}
	}else if(menu == 2) {
		if(money>=1200) {
			System.out.println("사이다 선택");
			money -=1200;
		}else {
			System.out.println("잔액 부족입니다.");
		}
	}else if(menu == 3) {
		if(money>=1500) {
			System.out.println("우유 선택");
			money-=1500;
		}else {
			System.out.println("잔액 부족입니다.");
		}
	}else if(menu == 0) {
		System.out.println("프로그램 종료");
		break;
	}else {
		System.out.println("없는 번호입니다.");
	}
	
	System.out.println();
}
  • 입력받은 수가 1일 때
    잔액(money)이 1000원 이상일 경우에만 콜라 선택이 되고, 아닐 경우 "잔액이 부족합니다." 출력
  • 입력받은 수가 2일 때
    잔액(money)이 1200원 이상일 경우에만 사이다 선택이 되고, 아닐 경우 "잔액이 부족합니다." 출력
  • 입력받은 수가 3일 때
    잔액(money)이 1500원 이상일 경우에만 우유 선택이 되고, 아닐 경우 "잔액이 부족합니다." 출력
  • 입력받은 수가 0일 때, "프로그램 종료"를 출력하고 break가 있으니 while문을 빠져나온다.
  • 입력받은 수가 그 외의 숫자일 경우, "없는 번호입니다." 출력

 

 2-3 while_예제(로그인)

Scanner sc = new Scanner(System.in);
String id = "test";  //회원가입한 아이디
String pw = "1234";  //회원가입한 비밀번호

while(true) {
	System.out.println("=====홈페이지=====");
	System.out.print("아이디 입력> ");
	String loginId = sc.next();
	System.out.print("비밀번호 입력> ");
	String loginPw = sc.next();
	
	if(loginId.equals(id)&&loginPw.equals(pw)) {
		System.out.println("로그인 성공!");
		break;
	}else {
		System.out.println("로그인 실패");
		System.out.print("로그인 재시도 (Y/y)> ");
		String re = sc.next();
		if(!(re.equals("Y") || re.equals("y"))) {
			break;
		}
	}
	
	System.out.println();
}

System.out.println("프로그램 종료");
  • 회원가입한 아이디와 비밀번호를 제대로 입력했을 때, "로그인 성공!" 출력 후 break로 while문을 빠져나온다.
  • 회원가입한 아이디와 비밀번호를 제대로 입력하지 못하면 "로그인 실패"를 띄우고 로그인 재시도를 할 것인지 묻는 말을 출력
    이후 입력받은 답이 "Y", "y"가 아닐 경우 break를 통해 while문을 빠져나온다.
    "Y", "y"인 경우, 다시 로그인 시도를 한다.

 

 2-4 while_예제(성적)

Scanner sc = new Scanner(System.in);

boolean run = true;

while(run) {
	System.out.print("이름> ");
	String name = sc.next();
	System.out.print("국어> ");
	int kor = sc.nextInt();
	System.out.print("영어> ");
	int eng = sc.nextInt();
	System.out.print("수학> ");
	int mat = sc.nextInt();
	int total = kor+eng+mat;
	double avg = total / (double)3;
	String grade = "";
	
	if(avg >= 90) {
		grade = "A";
	}else if(avg >= 80) {
		grade = "B";
	}else if(avg >= 70) {
		grade = "C";
	}else if(avg >= 60) {
		grade = "D";
	}else {
		grade = "F";
	}
	
	System.out.println();
	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%s\n",
			name, kor, eng, mat, total, avg, grade);
	
	//printf: % 위치에 순서대로 대입된다. %s %d 등, % 뒤 영어는 타입에 따라 달라진다.
	//f 앞에 .2를 입력한 이유는 소수점을 2자리 숫자만 출력하기 위해서.
	
	System.out.print("계속 입력하시겠습니까? (Y/y)> ");
	String re = sc.next();
	if(!(re.equals("Y")||re.equals("y"))) {
		break;
	}
	
	System.out.println();
}
  • 콘솔창에서 이름, 국어 점수, 영어 점수, 수학 점수를 입력받아 총점, 평균, 학점을 계산하는 식
  • "Y", "y"를 입력하면 다시 입력할 수 있고, 이 외를 입력하면 종료된다.
  • ! printf
    System.out.printf("출력 서식", 출력할 내용);
    %d (정수형 출력)
    %s (문자형 출력)
    %f (실수형 출력)
    %c (문자형 출력)
    %n (줄 바꿈)
    %b (boolean 출력)

출력 내용

 

 2-5 while_예제(up&down)

Scanner sc = new Scanner(System.in);
int answer = (int)(Math.random()*31)+1;

int sum = 0;
int hp = 5;

while(true) {

	if(hp<=0) {
		System.out.println("시도 가능 횟수를 모두 사용하셨습니다.");
		System.out.println("Game Over!");
		break;
	}
	
	System.out.println("============up&down============");
	System.out.println("1~31까지 숫자를 입력하세요. 시도 횟수 "+(5-hp)+"/5");
	System.out.print("숫자 입력> ");
	int num = sc.nextInt();
	sum++;
	
	if(num>32) {
		System.out.println("1~31 사이의 숫자를 입력해주세요.");
		hp--;
	}else if(num > answer) {
		System.out.println("down!");
		hp--;
	}else if(num < answer) {
		System.out.println("up!");
		hp--;
	}else if(num == answer && sum == 1) { 
		System.out.println("정답입니다!");
		System.out.println("첫 시도로 정답을 맞추셨습니다!");
		break;
	}else if(num == answer) {
		System.out.println("정답입니다!");
		System.out.println("시도 횟수: "+sum);
		break;
	}
	System.out.println();
}
System.out.println("up&down 종료");
  • 1~31 사이의 숫자를 랜덤으로 입력받아 그 숫자보다 낮은 수를 입력하면 up, 높은 수를 입력하면 down이 출력
  • 첫 시도로 정답을 맞추면 "첫 시도로 정답을 맞추셨습니다!" 출력
  • 정답을 맞추면 시도횟수와 "정답입니다!" 출력
  • 5회 시도에 못맞추면 "Game Over" 출력

 


 

전체 피드백

 문제를 너무 간단하게만 생각하여 풀려고 하는 경향이 있는 것 같다. 생각을 좀 더 깊이해야할 것 같다.

 처음 배우는 것의 문제를 풀 때, 이미 배운 것들을 응용해서 풀 수 있는데도 그러지 않다가 예제를 한 번이라도 봐야 응용하기 시작하는 것 같다.

 


728x90
20230916~17
1 ··· 9 10 11 12 13 14 15 ··· 27