[Java] 15. while, do-while

@_@·2021년 6월 2일

Java 1부

목록 보기
15/41

<목차>
ㅇ 반복문

  • 와일
  • 두와일



ㅇ 반복문

학습목표- 스크린샷

  • 필요성
  • 종류 특성
  • 실습 예제
    • 시야 트여주는 반복문 추가
  • 필요성  => 효율성!
    • 코드가 여러 번 등장하는데 반복문 안 쓰면 코드가 엄청 길어져
    • 반복문 쓰면 압축 돼
    • 이거 몰라도 프로그램 짤 수는 있지만, 시간과 효율성을 위해 배우자!

CF. 사실 변수, 이프문, 포문, 반복문, 연산자 까지만 알아도 사실 프로그램 만들 수는 있어
1학년때부터 프로그래밍 배우셨는데
3학년때 인턴 나가서 게임회사에 가셨는데 거기에 if포문연산자 말고는 쓴 게 없어ㅋㅋㅋㅋ
동작은 할 수 있구나
근데 보여주고 싶지 않은 코드..
윈드러너처럼 아이들을 대상으로 하는 러너게임. 곰돌이가 날아다니는 3d게임
핸드폰 움직임으로 뛰게 해 - 화면이 안 보여 ㅋㅋㅋㅋㅋ 핸드폰이 날아가 ㅋㅋㅋ

더 좋은 코드를 만들기 위해 그 다음 스텝이 필요해

  • 종류
    • while문
    • do-while문
    • for문



ㅇ while문 와일문

스크린샷

  • 검사조건 : 참 또는 거짓 => 반복될 조건!
    • 불리언 타입을 만들어내는 연산자들 : 비교연산자, 논리연산자
  • while문을 어느 시점에, 어떤 상황에서 써야 하는지 어려워ㅠㅜ
    • 이건 문제 경험을 많이 쌓아보고 감을 잡는 것
    • 문제는 스스로 풀어봐야 해



ㅇ do-while문 두 와일문

do {
    실행문장1;
    실행문장2;
} while(조건식(, 검사조건));
do{
    반드시 한 번은 실행되어야 하는 로직;
} while(검사조건);
  • 정확하게 몇 번 반복해야 할 지 정해지지 않은 경우에 사용 - while문 설명인듯 수업 다시 들어보기
  • while 문과 비교
    • 와일문은 반복할지 안 할지 바로 결정. 검사조건이 앞에 있어
      조건을 잘못 셋팅하면 한 번도 실행 안 될수 있어
    • 두와일은 일단 코드 실행하고 반복할지 안 할지 결정
      코드가 선행. 코드를 한 번은 실행해. 그 다음에 반복할지 안 할지 결정
      뭐가됐든 무조건 한 번은 실행
  • 무조건 한 번은 실행해야 돼 => 두와일
    한 번도 실행 안 되도 돼 => 와일



ㅇ 실습

ㅇ while, do-while 뭘 쓰든 상관 없어


ㅇ 실습1 : 다이어트 관리 프로그램

ppt 스크린샷

  • 흐름 : 1) 입력 2개 받고 2) 1주~n주까지 반복 감량할 때까지 3) 계속 입력받다가 목표 몸무게에 도달하면 끝
    • 끝이 정해지지 않은 반복이므로 => for과 while 중에 while
  • 얘는 와일,두와일에 구애받는 문제는 아니긴 해
    그래도 한 번은 감량한 몸무게 입력 받고 할 지 안 할지 결정 한다면 두와일

(내풀이)
(쌤풀이)

  • 현재 몸무게가 목표 몸무게에 도달하지 못할 때 구동 되어지는 거니까 조건은 current>target
  • 카운팅 기법 : 변수 하나 만들어서 1씩 올려주는 기법 (예) i++)
    • 한번에 써줘도 이상하지 않아
      week++ 현재 변수 먼저 출력 되고 나중에 1 올려줘 wow!!


ㅇ 실습 2

PPT스크린샷

0부터 100까지 점수 입력 받기
범위 벗어나는 수 입력되면
그 이전까지 입력된 자료의 합계와 평균 출력하는 프로그램

CF. 이 문제의 의도는
처음부터 100을 넘기는 수를 입력 받는 경우는 신경 안 써도 돼
그래서 i나 i-1로 나누는 것을 조심할 필요 없어

내 풀이

쌤 풀이

(시험준비한다고 잠깐 복습했던)

  • do while 이라서 맨 앞에 변수만 선언해 둘 수 있어.
    while은 조건식이 먼저 나오니까 그 전에 초기화 되어 있어야 하는데
    do while은 우선 한 번은 실행하니까 (거기서 초기화 되고) 그 다음 조건식에서 사용 가능해져.

  • 변수 선언할 때 컴마 이용해서 한꺼번에 할 수 있어

  • 맨 마지막에 프린트 문에 -1 했던거
    코드 맨 마지막에 i--; 로 처리하면 돼

  • 자료형변환 할 때 주의

여기까지가 혼자 공부했던 필기


여기서부터는 다시 수업 필기

ㅇ 여러 스타일을 많이 경험할 수록 실력 향상에 도움이 돼

ㅇ 황해도 팀장님이 연구원이실 때의 팀장님께서 해주신 이야기
대학교 가면 초반에 과제를 주시는 데
선배들이 셔틀을 시켜서 똑같으면 걸리니까 여러 스타일로 풀어서 드렸는데
이렇게 하니까 실력이 엄청 늘었어!

ㅇ 협업하려면 잘 읽을 수 있는 깔끔한 코드를 만들어주는 게 좋아

ㅇ 이 부분 다시 들으면서 스크린샷해가면서 정리

지역변수 / 전역변수 개념

쌤꺼 변수명
받는 수는 input

input에 빨간 줄이 나오는 이유
변수는 변수가 선언된 공간 안에서만 사용될 수 있어

do라는 중괄호 안에서 선언됐어
input은 그 안에서만 쓸 수 있어 - 지역변수

do 안에서 선언됐기 때문에 빨간줄 나와서 밖에서 못 쓴거야

sc라는 변수는 매인 안에서 선언되었으므로 어디서든 쓸 수 있어 ()

그래서 맨 첫줄에 input을 먼저 선언해 둬

그래서 섬에 인풋을 누적하려고 하는 데 또 에러가 났네 왜 에러날까?!
썸에 기본 변수가 없어서.
썸이라는 변수 안에 초기 값이 없다.

아무것도 안 들어있어서 초기화 해달라고 하는거야

오류의 과정을 계속 설명해주심

쓰다보니 두 와일보다 와일로 푸는 게 더 깔끔하게 풀 수 있어

ㅇ 내가 말한 부분 i--로 처리 가능

ㅇ 마지막에 더블타입으로 변환시키면 돼
강제형변환과 자동형변환이 동시에 일어나는 코드야


<8교시>

마지막

로그인 프로그램 만들기

아이디와 비밀번호 입력받고 일치할 경우 성공
않은 경우 실패

이건 문자열로 저장하고 비교할

일반연산자로 하면 안돼?
그러면 비교할 수 있는 도구는?!

프로그램은 단순해
미리 아이디와 비밀번호를 지정
사용자에게 입력 받아서
둘다 같으면 성공!


왜 프로그램 코드를 메인 안에 써야 하나
이 부분 다시 듣기

프로그램의 실행 여부, 시작점


프로그램 짤 때 단타적으로 풀다보니 메인이 다 따로따로 있어
큰 규모의 프로그램 만들 때는 메인이 있는 파일은 딱 하나
나머지 파일들은 걔를 도와주기 위한 알고리즘 코드가 들어있는거야

각자 기능이 든 파일을 따로 만들어서 합쳐


시작점
자바 버츄얼 머신이 여기서부터 코드를 실행시켜야지?! 하고

ㅇ(시험문제)
jre jvm차이점
변수기본타입8가지

ㅇ 스트링 데이터타입은 문자열을 표현
캐릭터는 한 글자밖에 못 써
여러개 쓰고싶으면
각자 한개씩 char에 담아서 더하기 하면 넘 힘들잖아.

여러개를 한꺼번에 넣기 위해 스트링을 만들었어

사용자 정의 데이터 타입

문자열을 의미하는 더블 쿼테이션
파이썬과 비교 쌍,홑 비교하지 않아
자바는 문자열은 큰따옴표. 캐릭터는 작은따옴표!!!!

파이썬 수업을 하다가 자바 수업 들어오면 모드 전환이  잘 안돼 ㅋㅋ

(차이점 모음 글 따로 만들자)


문자열은 그냥 넥스트 쓰면 돼


조건문 이용

ㅇ 무슨 말씀 하셨는 데 놓침. 엘스이프 쓰는 부분

ㅇ이제 조건문 적기

이렇게 하면 아이디비번 맞았는데도 로그인 실패가 나올꺼야

문자열끼리 비교할 때 많이 하는 실수

문자열 비교할 때는
이퀄 대신에 .equals를 써야 해
다른애들은 다 상관 없는데
문자열 만큼은 이걸 써야 해



(여기부터 셤공부한다고 정리했떤거)
  • 문자열 비교는 == 비교연산자 사용 못해
    이건 기본 자료형에서 사용했던거
    문자열은 함수 이용해야 해
    .equals()을 붙이는 거야
    (그냥 equal이라 생각하기 쉬워! s붙이기★)
기존변수.equals(비교변수)
  • 얘의 결과가 참 혹은 거짓으로 나오는 것
  • 참 거짓을 반대로 바꾸려면? 앞에 ! 붙이기

즉 같지 않다를 표현하는 조건식은

!기존변수.equals(비교변수)

(여기서부터 다시 수업 필기)

ㅇ 왜 안되느냐 - 이걸 설명 드릴려면 저~뒤에 있는 지식까지 끌어다 얘기해야 하기 때문에 나중에설명드릴거야
다음주 쯤 배열, 레퍼런스라는 개념 배우고 나면 그 때 소개해주겠어
문제  풀 때 많이 사용하니까 사용법만 알려 드리는거야

ㅇ지금은 딱 한번만 도는거야
이제 반복문을 사용해서
로그인이 ㅅ어공할 때 까지 계속 입력할 수 있또록 확장

다시 풀어보자!!!

// 프로그램의 시작점
public static void main(String[] args) {
String id = "hhd";
String pw = "12345";
Scanner sc = new Scanner(System.in);

	System.out.print("아이디를 입력해주세요>>");
	String input_id = sc.next();
	System.out.print("비밀번호 입력해주세요>>");
	String input_pw = sc.next();

	// 조건문 활용 로그인 성공/실패 판단
	if (id.equals(input_id) && pw.equals(input_pw)) { // 로그인 성공
		System.out.println("로그인 성공");
	} else { // 로그인 실패
		System.out.println("로그인 실패");

ㅇㅇㅇㅇㅇ

public static void main(String[] args) {
String id = "hhd";
String pw = "12345";
Scanner sc = new Scanner(System.in);
System.out.print("아이디를 입력해주세요>>");
String input_id = sc.next();
System.out.print("비밀번호 입력해주세요>>");
String input_pw = sc.next();

	while (!id.equals(input_id) || !pw.equals(input_pw)) {		
		System.out.print("아이디를 입력해주세요>>");
		input_id = sc.next();
		System.out.print("비밀번호 입력해주세요>>");
		input_pw = sc.next();
		System.out.print("아이디와 비밀번호가 잘못되었습니다.");
	}

	System.out.println("로그인 성공");
profile
STEP BY STEP

0개의 댓글