while 문과 do-while 문의 비교


앞에서 작성한 [예제 2-30]과 [예제2-32]는 똑같은 결과를 출력합니다. 그러면 다음 두 프로그램도 똑같은 결과를 출력할까요?






다른 결과를 출력한다. 첫 번째는 조건을 만족하지 못해서 "Done." 만 출력한다.


그런데 두 번째는 조건을 만족하지는 못하지만 일단 do 블락을 실행하므로 "10" 과 "Done." 이 출력된다.


else if 절과 switch 문


앞에서 작성했던 [ 예제 2-26 ]은 else if 절을 사용해서 정수의 범위를 알아 내는 프로그램이었습니다. 그와 똑같은 기능을 하는 프로그램을 switch 문을 이용해서 작성할 수 있을까요? 이 경우에 switch 문과 else if 절을 갖는 if 문 중에서 어느 것을 사용하는 게 더 적절한지 생각해 보십시오.





switch 문을 사용하려면 비교가 가능한 정수 형태의 카테고리 값이어야만 한다. 비교하고자 하는 값을 카테고리로 나눌 수만 있다면 어떻게든 switch 문으로 표현할 수 있을 것이다.



코드를 보면 알겠지만, 좀 삽질이다. 범위를 가지고 있는 값에 대해서는 if 문을 사용하는 것이 좋다.

switch 문을 if 문으로


[ 예제 2-27 ] 과 똑같은 기능을 하는 프로그램을 switch 문을 대신 "else if" 절을 갖는 if 문을 이용해서 작성하십시오.





default 는 else 와 같다. 그러므로 다음과 같이 변경할 수 있다.



2차원 배열의 항목 수





위 코드의 2 차원 배열은 3 X 4 의 크기를 가진다. 그러므로 table 자체에다가 length 를 적용하면 3 이 나오고, table[ 0 ] 에다가 length 를 적용하면 4 가 나온다. 아래와 같이 출력된다.


3

4




좀 더 진보된 예제를 들어 보겠다. 배열 선언을 [] 로 했다는 것은 배열의 요소 개수가 가변적인 크기를 가질 수 있음을 의미한다. 아래와 같이 코드를 작성한다면 모든 행의 열 개수를 다르게 만들 수 있다.



이 경우 출력은 다음과 같다.


3

4

7

8


유별난 final 변수


final 변수에는 복합 대입 연산자, 증가 연산자, 감소 연산자를 사용할 수 없습니다. 왜 그럴까요?




복합 대입 연산자, 증가 연산자, 감소 연산자는 어떤 변수의 값을 변경하는 것이다. final 이라는 키워드가 붙게 되면 그 변수는 변경해서는 안 되기 때문에  그러한 연산자를 사용할 수 없다.

변수 선언의 위치


다음의 프로그램은 잘못된 프로그램입니다. 하지만 명령문 하나만 위치를 바꾸면 올바르게 작동할 수 있습니다. 그 명령문을 찾아서 위치를 바꾸십시오.





if 문 안에 abs 지역변수가 선언되어 있는데 이는 if 로 묶인 블락 안에서만 유효하다. 그러므로 11 라인에서 abs 를 접근하려고 할 때 식별자를 찾을 수가 없다. 그래서 해당 지역변수 선언을 if 문 바깥으로 옮겨야 한다.



1. 이 장에서 배운 내용을 생각하면서 다음의 괄호를 채워 봅시다.


a) 명령문만 가지고는 온전한 자바 프로그램이 될 수 없습니다. 자바 프로그램의 되기 위해서는 먼저 ( 클래스class )를 만들고, 그 안에 ( main 메서드method )를 만들고, 그 안에 ( 명령문statement )을 써 넣어야 합니다.


b) java.exe 명령을 실행할 때 클래스 이름을 지정하면 그 클래스의 ( main ) 메서드로부터 자바 프로그램의 실행이 시작됩니다.




2. 자바 프로그램을 실행하려면 반드시 <이것>이 필요합니다. <이것>은 자바 클래스 파일을 다른 종류의 플랫폼에서도 실행할 수 있도록 만들어 줍니다. 자바의 가상 기계어를 하드웨어와 운영체제에 맞는 진짜 기계어로 바꾸어 주는 역할을 하는 <이것>은 무엇일까요?


자바 가상 기계Java Virtual Machine.




3. 메모장으로 HelloJava.java 프로그램을 입력해서 저장하고 컴팡리했는데 다음과 같은 에러가 발생했습니다. 에러 메시지를 보고 다음 그림의 프로그램 어느 부분이 잘 못 되었는지 찾아 보십시오.



E:\work\chap1>javac HelloJava.java

HelloJava.java:5: '}' expected

^

1 error

E:\work\chap1>


HelloJava 클래스에 닫는 괄호가 없음.

+ Recent posts