2023.04.13. 배열, 메소드
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));