3.1 반복문
for 문
while 문
do-while 문
반복 횟수를 처음부터 알 수 있는 경우 : for 문
반복 횟수를 알 수 없고 조건에 따라 반복이 계속되거나 중단되는 경우 : while 문, do-while 문
반복 조건을 처음부터 따지는 경우 : while 문
반복 조건을 나중에 따지는 경우: do-while
* while 문 주의사항
조건식에 사용되는 변수를 while문 실행 전에 초기화해야 한다
int i = 0;
while(i<=10){
System.out.println(i);
i++;
}
|
예제 3-2
-1이 입력될 때까지 입력된 수의 평균 구하기
import java.util.*;
public class ex {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int sum = 0;
int cnt = 0;
System.out.print("정수를 입력하세요(종료하려면 -1 입력)>>");
int i = scan.nextInt();
while(i != -1){
sum += i;
cnt++;
i = scan.nextInt();
}
if(cnt>0){System.out.print("입력된 정수의 갯수 : " + cnt + ", avg = " + (double)sum/cnt);}
else{ System.out.println("입력된 값이 없습니다.");}
scan.close();
}
}
|
3.2 continue 문과 break 문
실행 경로 변경
- continue 문 : 반복문을 빠져나가지 않으면서 즉시 다음 반복(조건)으로 넘어가고자 할 때 사용
예제 3-5
continue 문을 이용하여 양수 합 구하기
5개의 정수를 입력받고 그 중 양수들만 합하여 출력
import java.util.*;
public class ex {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int sum=0;
int cnt=0;
System.out.print("정수 5개를 입력하세요>>");
for(int i=0 ; i<5 ; i++){ // 5번 반복
int n = scan.nextInt();
if(n>0){
sum += n;
cnt++;
}
else{
continue;
}
}
System.out.print("정수의 갯수 : " + cnt + "개, 합 = " + sum);
scan.close();
}
}
|
[결과]
정수 5개를 입력하세요>>5
-2
6
10
-3
정수의 갯수 : 3개, 합 = 21
- break 문 : 하나의 반복문을 즉시 벗어날 때 사용
break 문은 하나의 반복문만 벗어나기 때문에, 중첩 반복의 경우 안쪽 반복문에서 break문이 실행되면, 안쪽 반복문만 벗어나기 때문에 바깥 쪽 반복문 내에서 실행 유지
3.3 배열
- 배열은 선언과 생성 필요
1) 배열 선언 : 배열에 대한 레퍼런스 변수 선언
int intArray [ ] ;
char charArray [ ];
또는
int [ ] intArray;
char [ ] charArray;
- intArray, charArray는 배열에 대한 레퍼런스 변수로, 실제 배열값이 저장된 주소 값(레퍼런스 값)만을 가짐
2) 배열 생성
intArray = new int [10];
charArray = new char [20];
또는
(선언과 생성을 동시에)
int intArray [ ] = new int[10]; // 10개의 정수 공간 배열 생성, 배열 이름은 intArray
char charArray [ ] = new char[20];
- 데이터를 저장할 배열 공간 할당
- 반드시 new 연산자 사용
- 배열 선언 시 초기화를 하면, 초기화 된 값의 개수만큼 배열이 생성됨
int intArray [ ] = {1,2,3,4,5}; |
>> 배열의 크기는 자동으로 5가 됨
- 배열 인덱스와 배열 원소 접근
- 배열의 인덱스(index)는 정수만 가능
- 배열의 원소는 인덱스를 이용하여 접근
* 배열 사용시 주의할 점 : 바운더리 에러가 나지 않도록 해야함
- 배열의 원소에 접근하려면 반드시 배열이 생성되어 있어야 함 (공간을 할당 받아야 함) >> 실행시간 오류
- 레퍼런스 치환과 배열 공유
(자바에서는) 레퍼런스 변수와 배열 공간이 분리
따라서 다수의 레퍼런스 변수가 하나의 배열 공간을 가르키는 배열 공유가 쉽게 이루어짐
int intArray [ ] = new int [5]; int myArray [ ] = intArray; |
>> 레퍼런스 치환, intArray와 myArray는 동일한 배열을 참조
- 배열의 크기, length 필드
자바는 배열을 객체로 다룸
배열이 생성되면 - 객체가 생성
이 객체에는 배열의 저장 공간과 함께 배열의 크기 값을 가진 length 필드가 존재
* 배열의 크기는 직접 쓰지 말고 자동 계산하도록 하는게 좋다.
배열의 크기만큼 반복할 때 유용
예제 3-8
배열의 length 필드를 이용하여 배열의 크기만큼 정수를 입력받고 평균을 구하는 프로그램을 작성하라
import java.util.*;
public class ex {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int arr [] = new int [5];
int sum = 0;
System.out.println("정수 5개를 입력하세요");
for(int i=0;i<arr.length;i++){
int n = scan.nextInt();
sum += n;
}
System.out.print("평균 : " + (double)sum/arr.length);
scan.close();
}
}
|
- 배열과 for-each 문
기존의 for문을 변형하여, 배열이나 나열의 크기만큼 루프를 돌면서 각 원소를 순차적으로 접
* 나열 타입(enum)
enum 타입 Week 선언
Week 타입은 월,화,수,목,금,토,일의 7개의 값 중 하나만 가지도록 선언
→ Week 타입 객체 day는 7개 값 외 다른 값을 가질 수 x
enum Week {월,화,수,목,금,토,일}
for(Week day : Week.values()){System.out.print(day + "요일 ");}
|
3.4 다차원 배열
- 2차원 배열
레퍼러스 변수 선언
int intArray [ ] [ ];
char [ ] [ ] charArray;
배열 생성
intArray = new int [2] [5];
변수 선언 & 배열 생성
int intArray [ ] [ ] = new int [2] [5];
2차원 배열 초기화
int intArray [ ] [ ] = { {0,1,2}, {3,4,5}, {6,7,8} }; // 3x3 배열
- 자동으로 원소 개수만한 배열 공간이 할당되고, 원소 값으로 초기화 됨
- 비정방형 배열
행마다 열의 개수가 서로 다른 배열
예제 3-11
그림과 같은 비정방형 배열을 만들어 값을 초기화하고 출력하라
10 11 12
20 21
30 31 32
40 41
1) 배열 생성시에 초기화 하는 경우
public class ex {
public static void main(String[] args) {
int arr [][] = {{10,11,12}, {20,21}, {30,31,32}, {40, 41}};
for(int i=0;i<arr.length;i++){
for(int j=0; j<arr[i].length;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
|
2)
import java.util.*;
public class ex {
public static void main(String[] args) {
int arr [][] = new int [4][];
arr[0] = new int [3];
arr[1] = new int [2];
arr[2] = new int [3];
arr[3] = new int [2];
for(int row=0 ; row<arr.length ; row++){
for(int column=0 ; column<arr[row].length ; column++){
arr[row][column] = (row+1)*10+column;
}
}
for(int i=0;i<arr.length;i++){
for(int j=0; j<arr[i].length;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
|
3.5 메소드에서 배열 리턴
배열에 대한 레퍼런스만 리턴
따라서 리턴 타입을 선언할 때 [ ] 안에 배열의 크기를 지정x
리턴하는 배열의 타입이 리턴받는 레퍼런스 변수의 타입과 일치해야 함
예제 3-12
public class ex {
static int[] makeArr(){ // 정수형 배열을 리턴하는 메소드
int tmp[] = new int [4]; // 배열 생성
for(int i=0;i<tmp.length;i++){
tmp[i]=i; // 배열의 원소 0,1,2,3 으로 초기화
}
return tmp; // 배열 리턴
}
public static void main(String[] args) {
int intArr []; // 배열 레퍼런스 변수 선언
intArr = makeArr(); // 메소드로부터 배열 전달 받음
for(int i=0;i<intArr.length;i++){
System.out.print(intArr[i]+" ");
}
}
}
|
[결과]
0 1 2 3
3.6 main( ) 메소드
자바 응용 프로그램의 실행이 시작되는 특별한 메소드
→ 자바 응용프로그램의 실행은 main( ) 메소드부터 시작
원형
public static void main(String [] args) {
}
- public : public 속성, 다른 클래스에서 메소드 접근 허용
자바 응용프로그램이 실행을 시작할 때 자바 가상 기계(JVM)에 의해 호출되어야 하므로 public 속성으로 선언되어야 함
- static : static 속성, 자신을 포함하는 클래스의 객체가 생성되기 전에 처음부터 자바 가상 기계에 호출되므로 static 속성
으로 선언되어야 함
static 속성으로 선언되어야 객체 생성 전부터 호출 가능
- void : 리턴 타입은 void, 아무런 값을 리턴하지 않음 main( )메소드를 끝내기 위해 리턴하려면 단순히 return; 문 사용
- (String [] args) : 문자열 배열(String [ ])이 매개변수로 전달, 자바는 명령행에 입력된 인자들을 문자열 배열로 만들어
main( ) 메소드에 전달
'Language > JAVA' 카테고리의 다른 글
[명품 JAVA programming] CHAPTER 4 클래스와 객체 (0) | 2023.03.19 |
---|---|
[명품 JAVA programming] CHAPTER 3 반복문과 배열 그리고 예외 처리(실습문제) (0) | 2023.02.24 |
[명품 JAVA programming] CHAPTER 2 자바 기본 프로그래밍(실습문제) (0) | 2023.02.10 |
[명품 JAVA programming] CHAPTER 2 자바 기본 프로그래밍 (0) | 2023.02.10 |
[명품 JAVA programming] CHAPTER 1 자바 시작(실습문제) (0) | 2023.02.10 |