Welcome to Wesley & Harry's Traveling & Programming

IT Program/Java Basic

자바(java) 반복문(while) & 자바 키코드(keyCode) 정리 & 키보드 제어 & while문 키보드

Wesley & Harry 2022. 3. 1. 23:01
반응형

for문에 이어서 while문에 대해 작성해본다.

for문과의 차이점이 있다면 for문은 횟수만큼 반복을 하고,

while문은 조건식이 true이면 계속 반복하는 것이다.

 

형태는 for문과 비슷하고 동작또한 비슷하게 작동한다.

while(조건식) {
	실행문

}

조건식이 true일 경우 실행문을 실행하고 다시 조건식으로 돌아가는 행위를 반복한다.

조건식이 false가 될 경우 while문을 벗어나게 된다.

 

이전 게시글과 같이 1부터 5까지 출력하는 행위를 해보자.

int wesley = 1;
while(wesley <= 5) {
	System.out.println(wesley);
	wesley++;
}

해당 코드는 wesley에 1을 저장한 후 

while 문에 진입하여 조건을 판단한 후 true라고 결과가 나오면

System.out.println(wesley);
wesley++;

를 실행시킨다. while문이 한번 반복하고 나면 wesley의 값을 출력하고 난 뒤wesley의 값은 1이 증가되며 다음 조건문에 진입하여 true false를 판별한뒤 true일 경우 다시 한번 while문을 반복한다.

이런식으로 wesley가 6이되기 전까지 반복이된다.

해당 결과값을 확인해보자.

맞게 잘 나온것을 확인할 수 있다. 

그렇다면 1에서 5까지 더하는 코드는 어떻게 작성하면 될까?

이또한 for문과 비슷하다.

int wesley = 1;
int wesleySum = 0;
while(wesley <= 5) {
	wesleySum += wesley;
	wesley++;
	}
System.out.println("1부터 5까지의 합 = " + wesleySum);

저번시간에 wesleySum += wesley의 뜻은

wesleySum = wesleySum + wesley 라는것을 알았다.

보아하니 wesley++의 위치와 변수명 빼고는 달라진 것이 크게 보이지않는다.

결과값을 통해 확인해본다.

이로써 우리는 while문의 사용법에 대해 알아보았다.

하지만 여기서 주의해야 할 점이 있다. while의 조건문에는 boolean 형식의 true가 들어갈 수 있는데 무작정 true를 넣는다면 무한루프에 빠져버릴 수 있다. run을 사용할 때에는 꼭 빠져나가는 코드를 작성하자.


다음은 키보드 키 코드에 대해 알아보도록 하겠다.

외울필요는 없으며 참고사항으로 사용하도록 하자.

숫자 알파벳 기능 방향키
0=48 A=65 O=79 a=97 o=111 Backspace=8 ←=37
1=49 B=66 P=80 b=98 p=112 Tab=9 ↑=38
2=50 C=67 Q=81 c=99 q=113 Enter=(CR=13, LF=10) →=39
3=51 D=68 R=82 d=100 r=114 Shift=16 ↓=40
4=52 E=69 S=83 e=101 s=115 Ctrl=17  
5=53 F=70 T=84 f=102 t=116 Alt=18  
6=54 G=71 U=85 g=103 u=117 ESC=27  
7=55 H=72 V=86 h=104 v=118 Space=32  
8=56 I=73 W=87 i=105 w=119 PageUp=33  
9=57 J=74 X=88 j=106 x=120 PageDown=34  
  K=75 Y=89 k=107 y=121    
  L=76 Z=90 l=108 z=122    
  M=77   m=109      
  N=78   n=110      

이 키코드를 사용하기 위해선 키코드를 읽는 코드가 필요하다.

int keyCode = System.in.read();

자바에서 지원하는 함수이다.

우리는 이 키코드와 표를 가지고 키보드를 통해 while문을 제어해보려한다.

해당 코드를 따라해보자.

코드에 대한 설명부터 해보겠다.

우선 코드들의 형태를 보면 그간 우리가 배워온것들을 전부 사용하고 새로운 것이라고는

예외처리와

keyCode = System.in.read(); 뿐이다.

코드를 자세히 보자 boolean 타입으로 설정한 run에 true를 저장하고

int 타입의 speed에 0

int 타입의 keyCode에 0을 저장한다.

while문의 조건식에 run이 들어가게 되고

while 반복문 안의 구문으로 들어가게 되면

if문이 조건문과 함께 들어있다.

조건문은 enter키가 입력되면 위의 표와 같이 캐리지리턴과 라인피드가 입력되므로 값을 제외시켰다. (숫자를 쓰지 않고 엔터칠 경우를 대비해)

콘솔에 system.out.println으로 메뉴바를 생성하고

keyCode를 받게된다.

console에 마우스를 클릭한 후 숫자 1을 입력하고 enter키를 누르면 while문은 세번 반복되고 System.in.read()는 세번의 키 코드를 리턴하는데 1의 키코드 49, 엔터의 키코드 캐리지리턴 13, 엔터의 키코드 라인피드 10을 읽고 새로운 코드를 받기위해 그자리에서 대기하게된다.

만약 49번의 키코드가 들어오면

해당 조건에 맞는 if문으로 들어가게 되고 speed++와 System.out.println("현재속도 = " + speed);를 수행하게 된다.

2의 키코드를 넣었을때도 마찬가지이다.

하지만 3의 키코드를 넣었을때에는 run의 변수값을 false로 바꾸면서 while문을 빠져나가게 되고

System.out.println("시스템 종료");를 출력하고 프로그램은 종료가 된다.

 

boolean run = true;
int speed = 0;
int keyCode = 0;
while(run) {
	if(keyCode!=13 && keyCode!=10) {
		System.out.println("--------------");
		System.out.println("1.속도증가|2.속도감소|3.중지");
		System.out.println("--------------");
		System.out.print("숫자 1,2,3 선택 : ");
			}
			keyCode = System.in.read();
			if (keyCode == 49) {
				speed++;
				System.out.println("현재속도 = " + speed);
			} else if (keyCode == 50) {
				speed--;
				System.out.println("현재속도 = " + speed);
			} else if (keyCode == 51) {
				run = false;
			}	
		}
		System.out.println("시스템 종료");

코드를 따라 쓰다보면 해당 오류가 발생될텐데

Add throws declaration을 클릭하도록 하자 예외처리를 해주는 부분인데 이부분은 추후 배우도록하자.

 

해당 결과값은 아래와 같다.

빨간네모를 친 해당 부분은

if(keyCode!=13 && keyCode!=10)를 테스트 해보기 위해 엔터를 숫자를 쓰지않고 쳐본 공백이다.

잘 작동하는것을 확인할 수 있다.

반응형