Java

2023.04.13. 배열, 메소드

amungstudy 2023. 4. 13. 15:40

do-while문

while문의 변형 형태이고,

실행문이 최소한 1번은 실행이 보장됨

실행문을 일단 수행하고, 조건을 체크한다는 특징이 있다.

public class WhileExam02 {

 

public static void main(String[] args) {

// do-while문의 형태

/* do{

* 실행문;

* }while(조건식);

*

* */

int num = 0;

do {

System.out.println("최소 한번은 실행을 보장");

}while(num != 0);

 

while(num !=0) {

System.out.println("조건을 먼저 체크한다. 조건이 안맞으면 실행 안됨");

}

 

//break문 - 조건문(switch문)과 반복문을 종료할 때 사용

// 특히 조건식에 따라 반복문(while, do-while문)을 종료할 때 사용이 된다.

int[] arrNum = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

for(int i = 0; i <arrNum.length; i++) {

System.out.println(arrNum[i]);

if(arrNum[i] == 5) {

break;

}

}

 

//continue문 - 자신이 포함된 반복문의 다음 횟수로 넘어감(skip)

// continue문 이후의 소스코드는 수행되지 않는다.

for(int i = 1; i <= 10 ; i++) {

if(i%2 == 0) {

continue;

}

System.out.println("홀수만 출력 : "+i);

}

 

 

}

 

}


package kr.ac.busanit.ch03;

 

import java.util.Arrays;

 

배열 - array

// 특정 하나의 공간에 연속된 데이터를 나열할 수 있다.

// 같은 타입의 데이터만을 저장할 수 있다.

// 한 번 생성된 배열은 길이를 늘리거나 줄일 수 없다.

// index값을 가질 수 있고, index값은 항상 0부터 시작한다.

public class ArrayExam {

 

public static void main(String[] args) {

// 배열 생성 방법

// 변수 타입에 []를 붙이거나, 변수명에 []를 붙여줘야한다.

 

 

// 타입[ ] 배열이름 = {1,2,3}; // 배열변수 선언과 동시에, 배열의 값+길이 동시 생성

// 타입 배열이름[ ] = {1,2,3};

int[ ] intArr = {1,2,3};

int intArr2[ ] = {1,2,3};

int[ ] userId = new int[ ]{101,102,103}; // new 연산자 사용(이때 []안에 숫자 명시x)& 초기화

 

// 배열선언과 배열의 길이만 설정하여 생성 - 배열에 값은 들어있지 않은 상태로 생성

//타입 배열이름[ ] = new 타입[개수];

//타입[ ] 배열이름 = new 타입[개수];

String[ ] strArr = new String[5];

String strArr2[ ] = new String[4];

 

//보통 배열은 반복문과 함께 이용되는 것이 일반적이다.

System.out.println("intArr2의 2번째 index의 값 :"+intArr2[2]); // 값 수정전 확인

intArr2[2] = 7;

System.out.println("intArr2의 2번째 index의 값 :"+intArr2[2]); // 값 수정후 확인

 

//자바에서의 배열은 한 번 길이를 설정하면 수정할 수 없다.

// intArr2[3] = 8;

// System.out.println("intArr2의 3번째 index의 값 : "+intArr2[3]);

 

//배열안의 값을 반복문을 활용하여 순회

// 배열변수의 length를 이용하여 반복문 사용시 활용한다.

// 배열변수.length -> 배열의 크기(길이)를 알려준다.

for(int i = 0; i < intArr2.length; i++) {

// System.out.println("반복문을 활용한 배열변수 순회 : "+intArr2[i]);

if(i % 2 == 0) {

intArr2[i] = 0;

}

System.out.println("수정된 배열 : "+intArr2[i]);

}

 

//배열변수 score를 생성하여

//값은 5개 입력을 한다. (값 : 80, 90, 74, 67, 88)

//배열변수 score에 입력된 성적의 총합과 평균을 출력해봅시다.

//총점: 399; 평균 : 79.8

int score[ ] = {80, 90, 74, 67, 88};

double sum = 0;

double avg = 0;

 

for(int i=0;i<score.length;i++) {

sum += score[i];

}

avg= (sum/score.length);

 

System.out.println("score의 총합 : "+(int)sum);

System.out.println("score의 평균 : "+avg);

 

배열 복사 - 한 번 생성이 되면 크기 변경이 불가.

// -더 많은 공간이 필요하다면 보다 큰 배열을 새로 만들고,

// 이전 배열로부터 항목 값들을 복사

 

배열 복사 1. - for문을 이용

int[] oldArr = new int[3]; //길이가 3인 배열변수 생성

oldArr[0] = 1;

oldArr[1] = 2;

oldArr[2] = 3;

 

int[] newArr = new int[5];

// for(int i = 0;i < oldArr.length; i++) {

// newArr[i] = oldArr[i];

// }

// for(int i = 0; i< newArr.length; i++) {

// if(newArr[i] == 0) {

// newArr[i] = newArr[i-1]+1;

// }

// System.out.println(newArr[i]);

// }

// Arrays.toString(타겟배열); -> 타겟배열의 값들을 출력해준다.

// System.out.println(Arrays.toString(newArr));

 

배열복사 2. - System.arrayCopy();메소드 이용

System.arraycopy();메소드에는 5가지 항목이 필요하다.

1. 복사할 대상 (oldArray)

2. 복사할대상의 어느부분부터 읽어올지 위치를 지정 - 처음부터 읽어올거면 0으로 설정

3. 복사하여 저장시킬 대상 (newArray)

4. 저장시킬 대상에서 어느부분부터 쓸건지 시작 위치를 지정 - 처음부터 쓸거라면 0으로 설정

5. 원본에서 복사본으로 데이터를 얼마나 복사할지 길이를 정하는 숫자

System.arraycopy(oldArr, 0, newArr, 0, oldArr.length);

System.out.println("배열복사 메소드이용하여 복사 : "+Arrays.toString(newArr));


 

2차원 배열 - 배열안에 배열이 들어있는 구조.

int [ ][ ] 변수이름 = new int[행][열];

// 행렬(matrix)

 

// int[][] matrix = new int[5][5]; // 5 x 5의 2차원 배열 생성

// int num= 0;

// for(int row = 0; row <5; row++) {

// for(int col=0; col<5; col++) {

// matrix[row][col]= num++;

// System.out.print(matrix[row][col] + " ");

// }

// System.out.println();

// }

 

//2차원 배열 생성시 값과 길이 모두 동시에 생성

int[ ][ ] arr1 = new int[ ][ ] {

{1, 2, 3, 4, 5},

{6, 7, 8, 9, 10},

{11,12,13,14,15},

{16,17,18,19,20},

{21,22,23,24,25}

};

 

int[][] arr2 = {

{1,2,3},

{4,5,6},

{7,8,9}

};

 

 

2차원 배열에 접근 및 제어 : 2중 for문을 이용

 

for(int x = 0; x < arr2.length; x++) {

// System.out.println(

// Arrays.toString(arr2[x])

// );

for(int y = 0; y<arr2[x].length;y++) {

if(arr2[x][y] %2 == 0) { //2차원 배열변수의 값중에 2의 배수일때만 출력하도록

System.out.println(arr2[x][y]);

}

 

}

}

System.out.println("-----------------");

//2차원 배열의 구조 - 바깥 배열안에 값들이 배열이 들어가있는 형태

// {1,2,3,4,5} -> length가 5이다.

// {

// {1,2}, -> length는 2이다.

// {3,4,5,6}, -> length는 4이다.

// {5,6}, -> length는 2이다.

// } -> length는 3이다.

int[][] arr3 = {

{1,2},

{3,4,5},

{6,7},

{8,9,10}

};

 

감싸는 for문 : 감싸는 배열 제어

안쪽 for문 : 안쪽 배열 제어

 

//2중 for문에서 바깥 for문이 length 4를 순회할수있다.

System.out.println("arr3 배열변수의 길이 : "+arr3.length);

for(int x = 0; x < arr3.length; x++) {

for(int y = 0; y <arr3[x].length; y++) {

if(arr3[x][y] == 7) {

arr3[x][y] = 100;

}

System.out.println(arr3[x][y]);

}

}

 

}

 

}


메소드

어떤 작업을 수행하기 위한 명령문의 집합

주로 특정값을 입력받아서 처리한 후 결과를 되돌려 준다.

반복적으로 사용되는 코드를 줄이기 위해 사용

하나의 메소드는 한 가지 기능만 수행하도록 작성하는 것이 좋다.

 

메소드의 형태

리턴타입 : 메소드를 실행하고 반환(리턴)하는 타입을 표시

매개변수 : 메소드가 실행할때 필요한 데이터를 받기 위한 변수

리턴타입 메소드이름([매개변수,...]){

         메소드가 호출되었을때 실행되는 소스코드;

         return 값; -> 타입이 void가 아닐 경우에만 작성

}

             

 

메소드는 크게 4종류로 나뉜다.

static int a = 3, b = 2;

 

반환값, 매개변수 둘 다 없는 메소드

static void add1() { //반환값(return문)이 없을때 void를 타입으로 지정한다.

System.out.println("add1 메소드에서 출력 : "+(a+b));

}

반환값은 있고, 매개변수는 없는 메소드

static int add2() {//반환(리턴)타입이 int이기때문에 정수를 반환해줘야한다.

int result = a+b;

return result; //반환(리턴)타입이 있다면 타입에 맞는 값을 리턴문에 적어준다.

}

반환값은 없고, 매개변수만 있는 메소드

// 괄호안에 매개변수를 선언할때도 타입을 명시해줘야만 한다.

static void add3(int a, int b) {

System.out.println("add3 메소드에서 실행 : "+(a+b));

}

반환값, 매개변수 둘 다 있는 메소드

static int add4(int a, int b) {

int result = a + b;

return result;

}

 

 

메소드를 호출(사용)을 할때 :  

1.반환값, 매개변수 둘 다 없는 메소드

//메소드이름([매개변수,...]); 

    add1();

2. 반환값은 있고, 매개변수는 없는 메소드

   int add2Result = add2(); //메소드를 실행(호출)한 곳으로 결과값을 돌려주기때문에 저장시켜줄 공간이 있어야한다.

    System.out.println("add2 메소드 실행 결과 : "+add2Result);

3.반환값은 없고, 매개변수만 있는 메소드

add3(3,2); // 메소드 호출(실행)시에 메소드가 매개변수를 받고 있다면, 매개변수를 타입과 갯수를 맞춰서 지정해줘야한다.

 

4.반환값, 매개변수 둘 다 있는 메소드

   int add4Result = add4(3,2);

    System.out.println("add4 메소드 실행 결과 : "+add4Result);

}

** 반환값은 호출한 곳으로 다시 되돌아온다는 특징이 있기 때문에

아래와 같이 사용가능함.(result변수 없어도 사용 가능한 방식) 

System.out.println("add4메소드호출 : "+add4(4,8));

System.out.println("add4메소드호출 : "+(add4(4,8)+1));