contents
CHAPTER04 제어문
1.조건문
5)switch문
2.반복문
1)for문
2)while문
3)do~while문
4)break문, continue문
CHAPTER05 배열
1.배열이란?
2.배열의 사용
1)배열의 선언과 생성
2)배열의 길이와 인덱스
3)배열의 초기화와 출력
3.다차원 배열
1)2차원 배열의 선언과 생성
2)2차원 배열의 인덱스
3)2차원 배열의 초기화와 출력
4.배열다루기
1)배열의 복사
2)foreach
-----------------------------------
CHAPTER04 제어문
1.조건문
5)switch문
-switch문은 하나의 조건식으로 많은 경우의 수를 처리하는 조건문임
*표현식: 특정 값이 나오는 식
switch (조건식) { case 값1: //조건식의 결과와 값1이 같은 경우 실행 break; case 값2: //조건식의 결과와 값2가 같은 경우 실행 break; default: //조건식의 결과와 일치하는 값이 없을 때 실행 } |
-switch문의 조건식의 결과는 정수 또는 문자열이며, case문의 값과 비교하여 알맞은 case를 찾아 실행함. 또한 switch문에서 break문은 case문을 끝내는 역할을 하며 만일 각각의 case에서 break문을 생략하면 break문을 만날 때까지 모든 경우의 case문의 실행부분이 동작함
*break: switch, 반복문만 가능
<1년 동안 읽은 책의 수에 따라 멘트를 출력하는 프로그램>
Exam-19.java
package ch03;
public class Ex19 { public static void main(String[] args) { // TODO Auto-generated method stub // 일 년 동안 읽은 책 수에 따라 멘트를 출력합니다. int book = 2; book = book / 10; // book /= 10; switch (book) { case 0: // 10권 미만 System.out.println("조금 더 노력하세요!"); break; case 1: // 10권 이상 20권 미만 System.out.println("책 읽는 것을 즐기는 분이시네요!"); break; case 2: // 20권 이상 30권 미만 System.out.println("책을 사랑하는 분이시네요!"); break; default: // 30권 이상 System.out.println("당신은 다독왕입니다!"); } } |
실행결과
조금 더 노력하세요!
|
-필요에 따라서 break문을 생략하여 작성하는 경우도 있음
*정수형(int) 나눗셈: 소수점 이하 버려짐
<break문을 생략하여 작성한 프로그램>
*ctrl + shift + F : 자동정렬
<break문을 생략하여 작성한 프로그램>
Exam-20.java
package ch03;
public class Ex20 { public static void main(String[] args) { // TODO Auto-generated method stub // 일 년 동안 읽은 책 수에 따라 멘트를 출력합니다. int book = 2; book = book / 10; // book /= 10; switch (book) { case 0: // 10권 미만 System.out.println("조금 더 노력하세요!"); case 1: // 10권 이상 20권 미만 System.out.println("책 읽는 것을 즐기는 분이시네요!"); case 2: // 20권 이상 30권 미만 System.out.println("책을 사랑하는 분이시네요!"); default: // 30권 이상 System.out.println("당신은 다독왕입니다!"); } } } |
실행결과
조금 더 노력하세요!
책 읽는 것을 즐기는 분이시네요! 책을 사랑하는 분이시네요! 당신은 다독왕입니다! |
2.반복문
-반복문은 특정 작업을 반복적으로 수행하고 싶을 때 사용하는 문장임.
1)for문
-for문은 특정한 횟수동안 작업을 반복하고 싶을 때 사용하는 반복문임. for문은 초기화, 조건식, 증감식, 그리고 실행 부분으로 이루어져 있음
for(초기화; 조식식; 증감식) { System.out.println("조건식이 참일 때 실행되는 부분"); } |
(1)초기화: 반복문을 위해 사용할 변수를 초기화함
(2)조건식: 반복을 계속하기 위한 조건을 정함. 조건식의 값이 true이면 반복을 계속 진행하고 false이면 중단하고 for문을 벗어남
(3)증감식: 변수의 값을 증가 또는 감소함
(4)실행부분: 조건식이 참일 때 실행되는 부분임
<1부터 10까지의 합을 계산하여 츨력하는 프로그램>
Exam-21.java
package ch03;
public class Ex21 { public static void main(String[] args) { // TODO Auto-generated method stub int sum = 0; // 총 합을 담을 변수 for (int i = 1; i <= 10; i++) { //%d(10진수 정수), %x(16진수 정수), %f(실수), %.2f(실수의 자릿수 제한), %c(문자), %s(문자열) System.out.printf("i = %d sum = %d \n", i, sum += i); // System.out.printf("i = %.2f sum = %.2f \n", (float)i, (float)(sum += i)); //형변환 // System.out.println("i = " + i + " sum = " + (sum+= i)); //형변환 안됨 } } } |
실행결과
i = 1 sum = 1
i = 2 sum = 3 i = 3 sum = 6 i = 4 sum = 10 i = 5 sum = 15 i = 6 sum = 21 i = 7 sum = 28 i = 8 sum = 36 i = 9 sum = 45 i = 10 sum = 55 |
*연산 초기값
cf)나중에 값을 입력받을 때: 선언만 해두면 됨
주의)
*지시자: 값을 어떻게 출력할 것인지 지정해주는 역할 ex) %d, %x, %f, %s, %c 등
-지시자의 개수와 출력하려는 값의 수는 같아야 함
-출력하려는 값: ','으로 구분, 지시자의 순서와 동일 (틀리면 에러 발생)
2)while문
-while문은 조건식을 검사하고 조건식이 참이면 반복하고 false이면 while문 전체를 벗어남(특정 조건에 대해서 반복하고 싶을 때)
while(조건식) { //실행되는 부분 } |
-while문의 조건식은 생략할 수 없으며 조건식이 true이면 계속해서 반복함
<while문을 사용하여 입력한 값이 'Y'일 때까지 반복하는 프로그램>
Exam-22.java
package ch03;
import java.util.*; public class Ex22 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); String answer = "Y"; // while이 시작될 수 있도록 응답 값을 초기화 int count = 0; while (answer.equals("Y")||answer.equals("y")) // 사용자의 응답을 검사합니다. { System.out.println("음악을 재생하시겠습니까?(Y)"); answer = sc.nextLine(); // 사용자의 응답을 받습니다. if (answer.equals("Y")||answer.equals("y")) { System.out.printf("음악을 %d번 재생했습니다 \n", ++count); } } System.out.println("재생 종료"); sc.close(); } } |
실행결과
음악을 재생하시겠습니까?(Y)
Y 음악을 1번 재생했습니다 음악을 재생하시겠습니까?(Y) Y 음악을 2번 재생했습니다 음악을 재생하시겠습니까?(Y) Y 음악을 3번 재생했습니다 음악을 재생하시겠습니까?(Y) Y 음악을 4번 재생했습니다 음악을 재생하시겠습니까?(Y) Y 음악을 5번 재생했습니다 음악을 재생하시겠습니까?(Y) N 재생 종료 |
<while문을 do~while문으로 만든 반복하는 프로그램>
Exam-22_1.java
package ch03;
import java.util.Scanner; public class Ex22_1 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); String answer = "Y"; // while이 시작될 수 있도록 응답 값을 초기화 int count = 0; do { System.out.println("음악을 재생하시겠습니까?(Y)"); answer = sc.nextLine(); if (answer.equals("Y") || answer.equals("y")) { //음악을 몇번 재생했는지 안내하는 문장을 출력할지 말지에 대한 조건식 System.out.printf("음악을 %d번 재생했습니다 \n", ++count); } } while (answer.equals("Y") || answer.equals("y")); //중괄호 코드를 한번 더 수행할지 말지에 대한 조건식 System.out.println("재생 종료"); sc.close(); } } |
3)do~while문
-do~while문은 while문의 변형된 형태임. while문이 조건식을 검사한 다음 참/거짓 여부에 따라 반복문을 수행했다면, do~while문은 일단 한번은 문장들을 수행하고 그 다음에 조건식을 검사해서 반복을 결정함. 그러므로 do~while문은 조건식의 참/거짓 여부에 관계없이 적어도 한번 수행됨
do { //실행되는 부분 } while(조건식); |
<do~while문을 이용하여 반복하는 프로그램>
Exam-23.java
package ch03;
public class Ex23 { public static void main(String[] args) { // TODO Auto-generated method stub int i = 100; do { System.out.println("적어도 한번은 출력되는 문장"); } while (i < 10); } } |
실행결과
적어도 한번은 출력되는 문장
|
4)break문, continue문
-break문은 반복을 멈추게 함. 반복문이 진행되다가 break문을 만나면 곧 바로 반복문을 벗어나서 반복문 다음의 코드를 수행함. 특정 조건을 만족할 때 break문을 사용해서 반복을 멈추게 함
Exam-24.java
package ch03;
import java.util.*; public class Ex24 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int sum = 0; int i; while(true) { System.out.println("더할 숫자를 입력하세요: (종료하려면 0입력)"); i = sc.nextInt(); //정수를 입력받아서 i에 저장 if(i == 0) { //만약 0을 입력하였다면 종료 break; } sum += i; //입력받은 값 더해주기 } System.out.println("현재까지의 총합=" + sum); sc.close(); } } |
실행결과
더할 숫자를 입력하세요: (종료하려면 0입력)
3 더할 숫자를 입력하세요: (종료하려면 0입력) 999 더할 숫자를 입력하세요: (종료하려면 0입력) 20482 더할 숫자를 입력하세요: (종료하려면 0입력) 32 더할 숫자를 입력하세요: (종료하려면 0입력) 0 현재까지의 총합=21516 |
-continue문은 현재의 반복을 뛰어넘고 반복을 진행시킴. 반복문이 진행되다가 continue문을 만나면 반복문의 제일 끝으로 가서 다음 반복을 계속 수행함
<continue문과 break문을 이용한 프로그램>
Exam-25.java
package ch03;
import java.util.*; public class Ex25 { public static void main(String[] args) { // TODO Auto-generated method stub int money = 10000; System.out.println("현재 가진 돈은 10000원입니다."); Scanner sc = new Scanner(System.in); while (true) { System.out.println("얼마를 사용하시겠습니까?"); int i = sc.nextInt();// 정수를 입력받음 if (!(0 <= i && i <= money)) { // 현재 가진 돈보다 크거나, 음수를 입력하면 다시 입력 요구 System.out.println("다시 입력해주세요(사용범위가 틀렸습니다)"); continue; // 현재의 반복을 벗어나서 다시 반복을 시작 } System.out.printf("이제 %d원이 남았습니다. \n", money -= i); // 남은 돈의 양 출력 if (money == 0) {// 돈이 0원이 되면 종료 break; } } System.out.println("모든 돈을 사용합니다. 종료"); sc.close(); } } |
실행결과
현재 가진 돈은 10000원입니다.
얼마를 사용하시겠습니까? 1000 이제 9000원이 남았습니다. 얼마를 사용하시겠습니까? 5000 이제 4000원이 남았습니다. 얼마를 사용하시겠습니까? 5000 다시 입력해주세요(사용범위가 틀렸습니다) 얼마를 사용하시겠습니까? 4000 이제 0원이 남았습니다. 모든 돈을 사용합니다. 종료 |
<while 반복문으로 만든 간단한 은행 프로그램>
Exam-BankAccount.java
package ch03;
import java.util.Scanner; public class ExBankAccount { public static void main(String[] args) { // TODO Auto-generated method stub /* 최종목적: 1.입금 2.출금 3.확인 4.종료에 해당하는 기능 구현 */ final String MY_ACCOUNT_NAME = "123-4444-5678"; int money = 0; Scanner scanner = new Scanner(System.in); while (true) { System.out.println("======= 계좌명 : " + MY_ACCOUNT_NAME + "========"); System.out.println("1.입금"); System.out.println("2.출금"); System.out.println("3.확인"); System.out.println("4.종료"); System.out.println("원하시는 메뉴를 고르세요 : "); int choice = scanner.nextInt(); if (choice == 1) { System.out.println("얼마를 입금하시겠습니까?"); int depositMoney = scanner.nextInt(); money += depositMoney; System.out.println(depositMoney + "원을 입금하여 잔액이 " + money + "원입니다. "); } else if (choice == 2) { int withdrawMoney = scanner.nextInt(); if (money < withdrawMoney) { System.out.println("출금할 돈이 부족합니다."); } else money -= withdrawMoney; System.out.println(withdrawMoney + "원을 출금하여 잔액이 " + money + "원입니다. "); } else if (choice == 3) { System.out.println("현재 잔액은 " + money + "원 입니다."); } else if (choice == 4) { System.out.println("시스템을 종료합니다."); break; } else { System.out.println("해당 메뉴가 없습니다. 다시 입력하세요"); } } scanner.close(); } } |
실행결과
======= 계좌명 : 123-4444-5678========
1.입금 2.출금 3.확인 4.종료 원하시는 메뉴를 고르세요 : 1 얼마를 입금하시겠습니까? 10000 10000원을 입금하여 잔액이 10000원입니다. ======= 계좌명 : 123-4444-5678======== 1.입금 2.출금 3.확인 4.종료 원하시는 메뉴를 고르세요 : 2 5000 5000원을 출금하여 잔액이 5000원입니다. ======= 계좌명 : 123-4444-5678======== 1.입금 2.출금 3.확인 4.종료 원하시는 메뉴를 고르세요 : 3 현재 잔액은 5000원 입니다. ======= 계좌명 : 123-4444-5678======== 1.입금 2.출금 3.확인 4.종료 원하시는 메뉴를 고르세요 : 4 시스템을 종료합니다. |
<상품 개수와 상품 가격의 총합을 출력하는 프로그램>
Exam-ProductCount.java
package ch03;
import java.util.*; public class ExProductCount { public static void main(String[] args) { // TODO Auto-generated method stub // 1.변수 2.조건문/반복문 3.함수 // 1. 구매할 상품의 개수 입력받기 // 2. 내가 입력한 상품 가격을 입력 받기 // 3. 내가 입력한 상품 가격 총합 출력하기 int productAmount; Scanner sc = new Scanner(System.in); //매개변수의 값: 인수 필요 int total = 0; int price = 0; System.out.println("구매할 상품의 개수를 입력하세요 : "); //학생의 인원수 productAmount = sc.nextInt(); for(int i = 0; i < productAmount; i++) { System.out.printf("%d번째 상품의 가격을 입력하세요 : ", i + 1); //학생의 점수 price = sc.nextInt(); //제품의 가격을 입력받음 total = total + price; //total += price; } System.out.println("총 계산해야 하는 비용 : " + total + "원 입니다."); //점 // System.out.println("평균 비용 : " + (float)total/ productAmount + "원 입니다."); //평균점 sc.close(); } } |
실행결과
구매할 상품의 개수를 입력하세요 :
3 1번째 상품의 가격을 입력하세요 : 1000 2번째 상품의 가격을 입력하세요 : 500 3번째 상품의 가격을 입력하세요 : 200 총 계산해야 하는 비용 : 1700원 입니다. |
CHAPTER05 배열
1.배열이란?
-배열은 같은 타입의 변수를 하나의 묶음으로 관리함. 변수가 하나의 데이터만 저장할 수 있다면 배열은 여러 개의 데이터를 저장하고 효율적으로 관리함
-변수를 사용하지 않고 저장해야 할 데이터가 100개가 있다면 100개의 변수를 일일이 선언하고 저장해야함
//배열을 사용하지 않을 경우 int student1, student2, student3, ... student50, ... student100; |
-하지만 배열을 사용한다면 길이가 100인 배열은 한번만 선언함
//배열을 사용할 경우 int[ ] student = new int[100]; |
-배열은 매번 변수의 이름을 정하는 불편함을 덜어줌. 또 묶어서 관리하는 것이 편한 데이터의 경우에는 배열로 관리하는 것이 편리함
2.배열의 사용
-배열을 다루기 위해서는 배열을 선언하고 사용하는 방법을 알아야 함
1)배열의 선언과 생성
-배열을 선언하려면 변수 선언에서 타입 뒤에 대괄호([ ])를 추가로 붙이면 됨
타입 [ ] 배열 이름; ex) int [ ] student; String[ ] name; |
-배열을 선언하는 것은 생성된 배열을 다루기 위한 참조변수를 위한 공간을 확보함
-실제 값들이 저장되는 공간은 배열을 생성해야 만들어지게 됨. 배열을 생성하기 위해서는 연산자 'new'를 쓰고 타입과 길이를 정해주면 됨
배열 이름 = new 타입[길이] ex) student = new int[30]; name = new String[3]; |
-대부분의 경우 배열의 선언과 생성을 동시에 함
타입 [ ] 배열 이름 = new 타입[길이]; ex) int [ ] student = new int[5]; String[ ] name = new String[3]; |
2)배열의 길이와 인덱스
-배열의 데이터를 다룰 때는 인덱스를 사용하게 됨. 인덱스(index)란 배열의 공간마다 붙여진 번호임
-예를 들어 길이가 3인 배열을 선언했다면 3개의 데이터가 들어갈 공간을 가지게 되는데 각각의 공간은 순서대로 번호를 부여받음. 배열의 이름과 인덱스를 이용해서 각 요소에 접근함. 첫 번째 요소에 접근하려면 배열의 이름인 a와 인덱스 번호를 사용하면 되고 원하는 위치의 인덱스를 이용하여 접근함. 인덱스는 기억장소의 주소를 대신하여 사용하는 것으로 0번부터 번호가 부여됨
(1)다음과 같은 코드를 작성하게 되면 각각의 배열의 요소는 값을 갖게 됨
a[0] = 10;
a[1] = 11;
a[2] = 12;
(2)배열의 요소가 값을 갖게 되면 이제 배열의 요소로 다양한 작업이 가능함
a[0] = a[1]; //대입
(3)a[2] = a[0] + a[1]; //요소를 두 개 더하여 그 값을 다른 요소에 대입
-배열의 작업에서 주의할 점은 인덱스의 번호가 0부터 시작한다는 점임. 만약 길이가 3인 배열을 생성했다면 각 요소는 순서대로 0, 1, 2의 인덱스를 가지게 됨. 따라서 인덱스의 최댓값은 배열의 길이보다 1 작음(n-1)
3)배열의 초기화와 출력
-배열을 생성하면 기본적으로 배열의 타입에 해당하는 기본 값으로 초기화됨. 그러므로 따로 초기화를 반드시 해야 할 필요는 없지만 특정한 값을 저장하려면 요소마다 값을 저장해야 함
<배열을 선언한 후 배열 요소에 값을 지정하는 프로그램>
Exam-26.java
package ch03;
public class Ex26 { public static void main(String[] args) { // TODO Auto-generated method stub int[] student = new int[3]; //길이가 3인 배열 생성 double[] student2 = new double[3]; //길이가 3인 배열 생성 boolean[] student3 = new boolean[3]; //길이가 3인 배열 생성 String[] student4 = new String[3]; //길이가 3인 배열 생성 Object[] student5 = new Object[3]; //초기화: int형 : 0, double : 0.0, boolean형 : false, Object : null System.out.println("현재 자동으로 초기화된 값: " + student[0]); student[0] = 30; //배열의 첫 번째 요소에 30을 저장 student[1] = 20; //배열의 첫 번째 요소에 20을 저장 student[2] = 10; //배열의 첫 번째 요소에 10을 저장 System.out.println("현재 첫 번째 요소의 값 = " + student[0]); System.out.println("현재 자동으로 초기화된 값: " + student2[0]); System.out.println("현재 자동으로 초기화된 값: " + student3[0]); System.out.println("현재 자동으로 초기화된 값: " + student4[0]); System.out.println("현재 자동으로 초기화된 값: " + student5[0]); } } |
실행결과
현재 자동으로 초기화된 값: 0
현재 첫 번째 요소의 값 = 30 현재 자동으로 초기화된 값: 0.0 현재 자동으로 초기화된 값: false 현재 자동으로 초기화된 값: null 현재 자동으로 초기화된 값: null |
-배열에 요소를 저장할 때 인덱스를 통해 일일이 접근하지 않고 값을 저장하는 방법도 있음
타입 [ ] 배열 이름 = new 타입[ ] {요소1, 요소2, 요소3, 요소4); //1.선언+생성+초기화 int [ ] ar = null; //2.선언/생성+초기화 ar = new int [ ] {1, 2, 3}; //new 타입 [ ] 생략가능 타입 [ ] 배열이름 = {요소1, 요소2, 요소3, 요소4}; //3.선언+초기화 |
-배열의 선언과 동시에 중괄호를 사용하여 요소를 보여줌. 이 방법은 직관적으로 배열의 요소를 확인할 수 있다는 장점이 있음
<배열을 선언한 후 요소를 지정한 프로그램>
Exam-27.java
package ch03;
import java.util.*; public class Ex27 { public static void main(String[] args) { // TODO Auto-generated method stub // 길이가 5인 배열 생성, 배열 길이 생략 int[] a = new int[] { 10, 20, 4, 25, 18 }; //선언 + 생성 + 초기화 // 길이가 7인 배열 생성, new int[] 생략가능 int[] b = new int[] { 1, 2, 3, 4, 5, 6, 7 }; //선언 + 초기화 // for문으로 배열 초기화 int[] c = new int[10]; //선언 + 생성 for (int i = 0; i < c.length; i++) { // for(배열 안의 데이터 갯수만큼){ c[i] = i; // 배열[i] = i; } // } // for문을 이용한 출력 for (int i = 0; i < c.length; i++) { System.out.print(c[i]+" "); } System.out.println(""); System.out.println(Arrays.toString(c)); // Array.toString()메서드 사용 } } |
실행결과
0 1 2 3 4 5 6 7 8 9
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
*print(): 자동 개행 없음
println(): 자동 개행 있음
printf(): 지시자를 이용해 여러 형식으로 변환하여 출력 (자동 개행 없음)
-배열의 길이를 확인하려면 다음과 같이 사용함
배열이름.length |
-배열의 요소를 문자열로 바꾸어 출력하려면 다음과 같이 사용함
Array.toString(배열이름) |
-Array.toString(배열이름)을 사용하려면 import java.util.Arrays; 코드를 작성해야 함
<배열에 학생 점수를 입력한 다음 평균을 구하는 프로그램>
Exam-28.java
package ch03;
public class Ex28 { public static void main(String[] args) { // TODO Auto-generated method stub //시험점수의 평균 구하기 int[] student = {100, 95, 90, 88, 93}; int sum = 0; for(int i = 0; i < student.length; i++) { sum += student[i]; } System.out.println("시험 점수의 평균: " + sum/(float)student.length); } } |
실행결과
시험 점수의 평균: 93.2
|
3.다차원 배열
-많은 데이터를 편하게 관리하기 위해 구조화시키는 것으로 2차원 이상의 배열을 다차원 배열이라고 함. 배열을 선언할 때 차원의 제한은 없지만 3차원 배열 이상은 잘 사용하지 않고 2차원 배열을 주로 사용함
1)2차원 배열의 선언과 생성
-2차원 배열의 선언 방법은 1차원 배열을 선언하는 부분에 괄호[ ]를 하나 더 추가함
-대괄호가 두 개 이므로 2차원 배열임
타입 [ ][ ] 배열이름; ex) int[ ][ ] student; String[ ][ ] name; |
-참고로 3차원은 괄호([ ])를 3개 써주면 되며 그 이상은 차원의 수만큼 추가하면 됨
ex) 6차원 배열을 생성할 때
int[ ][ ][ ][ ][ ][ ] b = new int [3][3][2][2][2][2];
-2차원 배열을 생성할 때는 첫 번째 괄호에 들어가는 수는 2차원 배열의 행이 되고 두 번째 괄호에 들어가는 수는 2차원 배열의 열이 됨
타입 [ ][ ] 배열이름 = new 타입[ ][ ]; ex) int[ ][ ] student = new int[3][3] ; String[ ][ ] name = new String[3][2] ; |
2)2차원 배열의 인덱스
-2차원 배열은 행과 열로 구성되어 있음. 첫 번째 괄호의 인덱스가 행을, 두 번째 괄호의 인덱스가 열을 의미함. 예를 들어 3행 4열의 2차원 배열을 만들었다면 총 요소의 개수는 12개이며 행의 인덱스는 0부터 2까지, 열의 인덱스는 0부터 3까지의 값을 가짐
int[ ][ ] student = new int[3][4];
student[0][0] | student[0][1] | student[0][2] | student[0][3] |
student[1][0] | student[1][1] | student[1][2] | student[1][3] |
student[2][0] | student[2][1] | student[2][2] | student[2][3] |
-2행 3열에 있는 요소를 가지고 작업을 하고 싶다면 행과 열에서 1씩 뺀 인덱스인 student[1][2]를 사용함
student[1][2] = 30; //2행 3열에 30 저장
System.out.println(student[1][2]); //2행 3열 출력
-위와 같은 방법으로 모든 요소에 접근함
3)2차원 배열의 초기화와 출력
-2차원 배열을 초기화 할때는 행을 구분하기 위해 괄호를 한 번 더 사용함. 내부에 들어있는 묶음 중에 첫 번째 묶음 중에 첫 번쩨 묶음이 1핸, 두 번째 묶음이 2행임
int[ ][ ] student = { {100, 200, 300}, {400, 500, 600}, {700, 800, 900}, //중괄호: 행의 갯수 {200, 400, 500} }; //중괄호 안의 데이터: 열의 갯수 |
-다만 2차원 배열인 것을 눈으로 쉽게 확인하기 위해서는 다음과 같은 방법을 권장함
int[ ][ ] student = { {100, 200, 300}, {400, 500, 600}, {700, 800, 900}, {200, 400, 500} }; |
4.배열다루기
-배열을 이용한 반복적인 작업이나 복사를 할 때는 다음과 같은 유용한 방법이 있음
1)배열의 복사
-배열을 다른 배열로 복사할 때 반복문을 사용해서 복사할 수도 있지만 자바에서 제공하는 System.arraycopy() 메서드를 사용하면 더욱 간편함
System.arraycopy(src, srcPos, dest, destPos, length); (1)src는 복사할 배열이고 srcPos는 복사를 하기 시작할 인덱스 (2)dest는 덮어쓸 배열이고 destPost는 덮어쓰기 시작할 인덱스 (3)length는 복사할 길이임 |
<배열을 복사하는 프로그램>
Exam-29.java
package ch03;
import java.util.*; public class Ex29 { public static void main(String[] args) { // TODO Auto-generated method stub int [] a = {1, 2, 3, 4, 5, 6}; int [] b = {0, 0, 0, 0, 0, 0, 0}; // b = a; //a가 가르키는 주소 == b가 가리키는 주소 // for(int i = 0; i<a.length; i++) { // b[i] = a[i]; // } System.out.println(Arrays.toString(a)); System.out.println(Arrays.toString(b)); System.arraycopy(a, 2, b, 3, 4); //a를 b로 복사 System.out.println(Arrays.toString(b)); } } |
실행결과
[1, 2, 3, 4, 5, 6]
[0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 3, 4, 5, 6] |
*주의) 배열 인덱스 길이 주의해서 생성할 것!
2)foreach
-자바에서는 배열을 순환할 때 기존의 반복문보다 편리한 작업을 할 수 있도록 foreach문을 제공함
for(배열의 타입 변수이름: 배열이름) { //실행구문 } |
-기존의 for문에서는 인덱스 번호를 통해서 배열에 대한 작업을 처리함. foreach문은 배열의 이름과 새로운 변수만 하나 지정하면 루프를 돌 때마다 자동으로 배열의 요소를 하나씩 처리함
<foreach문을 이용하여 문장을 출력하는 프로그램>
Exam-30.java
package ch03;
public class Ex30 { public static void main(String[] args) { // TODO Auto-generated method stub String [] a = {"Java", "Hello", "Programming"}; for(String i : a) {//foreach 구문 *i <- a배열의 각 데이터를 담을 임시 변수 System.out.println(i); } int [] b = {1, 2, 3, 4, 5}; for(int i : b) {//foreach 구문 System.out.print(i); } } } |
실행결과
Java
Hello Programming 12345 |
'프로그래밍 > java' 카테고리의 다른 글
JAVA 프로그래밍 43일차 (25/1/10) (0) | 2025.01.10 |
---|---|
JAVA 프로그래밍 41일차 (25/1/8) (0) | 2025.01.08 |
개발자 환경 구축 40일차 (25/1/7) (0) | 2025.01.07 |