일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 |
30 | 31 |
- swift
- 문자열 붙여서 출력하기
- 프로그래머스 주사위 게임1
- Til
- 프로그래머스 n번째 원소까지
- 프로그래머스 최댓값 만들기(2)
- 프로그래머스 문자열 정렬하기 (1)
- 프로그래머스
- 스파르타코딩캠프
- Error installing cocoapods
- 프로그래머스 조건에 맞게 수열 변경하기 3
- n번째 원소까지
- Break
- 객체지향
- 주사위 게임1
- 문자열 정렬하기 (1)
- array
- 연산자
- 프로그래머스 배열 만들기1
- ruby설치
- 스페인어
- 프로그래머스 암호 해독
- continue
- 배열 만들기1
- cocoapods 설치 오류
- 프로그래머스 자동커밋
- 프로그래머스 n의 배수 고르기
- 스파르타 코딩클럽 내일배움캠프
- 조건에 맞게 수열 변경하기 3
- 프로그래머스 문자열 붙여서 출력하기
- Today
- Total
dev._.note
[JAVA] 배열(Array) 본문
배열(Array) 이란?
동일 자료형의 묶음을 의미한다. 배열은 저장된 값 마다 인덱스 번호가 설정됨.(0부터 시작)
- 동일한 물품을 보관하는 서랍장
- 아파트, 오피스텔, 기차
배열 선언과 할당
배열선언 : 주소값을 가지지 않은 변수생성(Stack)
1. 자료형[] 변수이름 ;
2. 자료형 변수이름[] ;
예시 ) int[] arr ;
int arr[] ;
배열의 할당 : 배열객체 생성후 변수에 주소값할당(Heap)
변수이름 = new 자료형[저장데이터개수];
예시 ) arr = new int [5] ;
배열의 저장구조
int[] arr ;
arr = new int [4] ;

참조형 : 주소값을 가지고 다른 공간에 있는 데이터를 확인하고 처리
배열 초기화
※ 선언과 동시에 값 기록
예시 ) int[] arr = {1, 2, 3, 4, 5} ;
String arr[] = {“홍길동”, ”이순신”, ”세종대왕”} ;
예시 ) int[] arr = new int[] {1, 2, 3, 4, 5};
※ 할당과 동시에 자동적으로 기본값으로 초기화됨
예시 ) boolean : false, char : ‘ ’
※ 배열 값 기록 1
index를 이용한 직접 값기록
예시 ) arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
……
※ 배열 값 기록 2
for문을 이용
예시 ) for(int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
※ 초기화 할 리터럴이 일정 규칙으로 증가한다면, 반복문의 index를 통해 배열에 값을 기록.
❏ 예제
int[] arr=new int[5];
for(int i = 0; i < arr.length; i++){
System.out.print(“저장 데이터 : ”);
arr[i] = sc.nextInt();
}
배열 값 출력 : 배열에 저장된 값을 호출(출력)하려면 인덱스를 이용
arr[인덱스번호]
arr[인덱스번호]가 하나의 변수명이라고 생각하면 된다.
출력 : System.out.println(arr[인덱스번호]) ;
❏ 예제 1
길이가 100인 배열을 선언하고 1부터 100까지 값을 순서대로 배열 인덱스에 넣어 그 값을 출력하는 코드를 작성하시오.
public void test() {
int[] arr = new int[100];
for(int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
System.out.print(arr[i] + " ");
}
출력결과 : 1 2 3 ... 98 99 100
❏ 예제 2
길이가 5인 String 배열을 선언하고, “딸기”, ”복숭아”, ”키위”, ”사과” , ”바나나” 로 초기화를 한 후, 배열 인덱스를 활용해서 바나나를 출력해 보시오.
public void test() {
String[] arrStr = {"딸기", "복숭아", "키위", "사과", "바나나"};
for(int i = 0; i < arrStr.length; i++) {
if(arrStr[i] == "바나나") {
System.out.printf("바나나는 arrStr[%s]입니다.", i);
}
}
}
출력결과 : 바나나는 arrStr[4]입니다.
배열 복사
※ 얕은 복사
객체의 주소값만 가져와 참조형변수에 저장하고 하나의 객체를 두 변수가 참조하고 있는 것
방법 : int[] arr1 = new int[4];
int[] arr2 = arr1;

❏ 예제 1
public class Shallow_copy{
public static void main(String[] args){
char[] carr1 = {‘a’, ‘b’, ‘c’, ‘d’};
char[] carr2 = carr1; // <- 얕은복사 ◀︎ ◀︎ ◀︎
for(int i = 0; i < carr1.length; i++){
System.out.print(carr1[i] + “, ”);
}
System.out.println(“주소값 : ” + carr1.hashcode());
for(int i = 0; i < carr2.length; i++){
System.out.print(carr2[i] + “, ”);
}
System.out.println(“주소값 : ” + carr2.hashcode());
}
}
실행결과 : a, b, c, d, 주소값 : 148659610
a, b, c, d, 주소값 : 148659610
❏ 예제 2
public class Shallow_copy{
public static void main(String[] args){
char[] carr1 = {‘a’, ‘b’, ‘c’, ‘d’};
char[] carr2 = carr1;// <- 얕은복사 ◀︎ ◀︎ ◀︎
carr2[0] = ‘f’;
for(int i = 0; i < carr1.length; i++){
System.out.print(carr1[i] + “, ”);
}
System.out.println(“주소값 : ” + carr1.hashcode());
for(int i = 0; i < carr2.length; i++){
System.out.print(carr2[i] + “, ”);
}
System.out.println(“주소값 : ” + carr2.hashcode());
}
}
실행결과 : f, b, c, d, 주소값 : 148659610
f, b, c, d, 주소값 : 148659610
※ 깊은 복사
다른 객체를 생성하여 새로운 객체에 데이터 내용을 복사하는 것
방법 : for문을 이용한 1:1복사
System.arraycopy() 메소드를 이용한 복사
clone() 메소드를 이용한 복사

❏ for 문으로 복사
public class for_copy{
public static void main(String[] args){
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = new int[5];
for(int i = 0; i < arr1.length; i++){
arr2[i] = arr1[i];
}
arr2[0] = 0; // <- 깊은 복사 ◀︎ ◀︎ ◀︎
for(int i = 0; i < arr1.length; i++){
System.out.print(arr1[i] + “, “);
}
System.out.println(“주소값 : “ + arr1.hashCode());
for(int i = 0; i < arr2.length; i++){
System.out.print(arr2[i] + “, “);
}
System.out.println(“주소값 : “ + arr2.hashCode());
}
}
실행결과 : 1, 2, 3, 4, 5,주소값 : 148659610
0, 2, 3, 4, 5,주소값 : 154856980
❏ arraycopy() 메소드 이용복사 1
public class Arraycopy{
public static void main(String[] args){
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = new int[5];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);// <- 깊은 복사 ◀︎ ◀︎ ◀︎
for(int i = 0; i < arr1.length; i++){
System.out.print(arr1[i] + ", ");
}
System.out.println("주소값 : " + arr1.hashCode());
for(int i = 0; i < arr2.length; i++){
System.out.print(arr2[i] + ", ");
}
System.out.println("주소값 : " + arr2.hashCode());
}
}
실행결과 : 1, 2, 3, 4, 5, 주소값 : 148659610
1, 2, 3, 4, 5, 주소값 : 154856980
❏ arraycopy() 메소드 이용복사 2
public class Arraycopy{
public static void main(String[] args){
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = new int[5];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
arr2[0] = 0; // <- 깊은 복사 ◀︎ ◀︎ ◀︎
for(int i = 0; i < arr1.length; i++){
System.out.print(arr1[i] + ", ");
}
System.out.println("주소값 : " + arr1.hashCode());
for(int i = 0; i < arr2.length; i++){
System.out.print(arr2[i] + ", ");
}
System.out.println("주소값 : " + arr2.hashCode());
}
}
실행결과 : 1, 2, 3, 4, 5, 주소값 : 148659610
0, 2, 3, 4, 5, 주소값 : 154856980
❏ clone() 메소드 이용복사 1
public class Clone_copy{
public static void main(String[] args){
char[] carr1 = {‘1’, ‘2’, ‘3’, ‘4’, ‘5’};
char[] carr2 = new char[5];
carr2 = carr1.clone();// <- 깊은 복사 ◀︎ ◀︎ ◀︎
for(int i = 0; i < carr1.length; i++){
System.out.print(carr1[i] + “, ”);
}
System.out.println(“주소값 : ” + carr1.hashcode());
for(int i = 0; i < carr2.length; i++){
System.out.print(carr2[i] + “, ”);
}
System.out.println(“주소값 : ” + carr2.hashcode());
}
}
실행결과 : 1, 2, 3, 4, 5, 주소값 : 148659610
1, 2, 3, 4, 5, 주소값 : 154856980
❏ clone() 메소드 이용복사 2
public class Clone_copy{
public static void main(String[] args){
char[] carr1 = {‘1’, ‘2’, ‘3’, ‘4’, ‘5’};
char[] carr2 = new char[5];
carr2 = carr1.clone();// <- 깊은 복사 ◀︎ ◀︎ ◀︎
for(int i = 0; i < carr1.length; i++){
System.out.print(carr1[i] + “, ”);
}
System.out.println(“주소값 : ” + carr1.hashcode());
for(int i = 0; i < carr2.length; i++){
System.out.print(carr2[i] + “, ”);
}
System.out.println(“주소값 : ” + carr2.hashcode());
}
}
실행결과 : 1, 2, 3, 4, 5, 주소값 : 148659610
1, 2, 3, 4, 5, 주소값 : 154856980
❏ 예제 1
문자열을 하나 입력 받아 배열에 넣고 문자를 하나 입력 받아 입력 받은 문자가 문자열에 몇 개 인지 개수를 출력하는 프로그램을 작성하세요.
public void test() {
Scanner sc = new Scanner(System.in);
System.out.print("단어를 입력하세요 : ");
String str = sc.next();
System.out.print("검색할 문자 입력 : ");
char input = sc.next().charAt(0);
char[] ch = new char[str.length()];
int count = 0;
for(int i = 0; i < ch.length; i++) {
ch[i] = str.charAt(i);
if(ch[i] == input) {
count++;
}
}
System.out.printf("찾으시는 문자 %c은 %s개 입니다.", input, count);
}
실행결과 : 단어를 입력하세요 : helloworld
검색할 문자 입력 : l
찾으시는 문자 l은 1개입니다.
❏ 예제 2
사용자의 전화번호를 입력받고, 13자리의 문자형 배열에 저장한후, 가운데 4자리를 *로 가리기. 단, 원본 배열값은 변경 없이 배열 복사본으로 변경하세요.
public class Test4 {
public static void main(String[] args) {
Test4 t = new Test4();
t.test1();
t.test2();
}
/**
* 문자열에서 가운데 4자리 *처리하기
* "01012341234" -> "010****1234"
*
* String은 불변(immutable)이다.
*/
public void test2() {
String s = "01012341234";
// String java.lang.String.substring(int beginIndex, int endIndex)
String tel1 = s.substring(0, 3);
String tel2 = "****";
String tel3 = s.substring(7);
System.out.println(tel1 + tel2 + tel3);
}
/**
* 사용자의 전화번호를 입력받고,
* 11자리의 문자형배열에 저장한후,
* 가운데 4자리를 *로 가리기.
* 단, 원본 배열값은 변경 없이 배열 복사본으로 변경하세요
*
*/
public void test1() {
Scanner sc = new Scanner(System.in);
System.out.print("사용자의 전화번호를 입력하세요 : 010");
String numInput = "010" + sc.next();
char[] num = new char[numInput.length()];
char[] copy = new char[num.length];
// 입력받은 번호를 num배열에 넣고, for를 이용해서 copy배열에 복사
for(int i = 0; i < num.length; i++) {
num[i] = numInput.charAt(i);
copy[i] = num[i];
}
// copy배열의 가운데 4자리를 *로 변환
for(int i = 0; i < copy.length; i++) {
if(i > 2 && i < 7) {
copy[i] = '*';
}
}
// copy배열과 num배열이 다른지 확인
System.out.print("번호 : ");
for(char numOut : copy) {
System.out.print(numOut);
}
System.out.println();
System.out.print("원본번호 : ");
for(char numOut : num) {
System.out.print(numOut);
}
}
}
실행결과 : 사용자의 전화번호를 입력하세요 : 010 (12341234입력)
번호 : 010****1234
원본번호 : 01012341234
❏ 예제 3
배열의 크기로 홀수인 양의 정수를 입력 받아 배열을 만드세요. 배열의 중간 까지는 1부터 1씩 증가하여 오름 차 순으로 값을 넣고, 중간 이후부터 끝까지는 1씩 감소하여 내림 차 순으로 값을 넣어 출력하는 프로그램을 작성하세요.
출력예 ) 7 입력
[1, 2, 3, 4, 3, 2, 1]
public void test() {
// 홀수인 양의 정수 입력
Scanner sc = new Scanner(System.in);
int arraySize = 0;
// 유효성 검사
while(true) {
System.out.print("홀수인 양의 정수를 입력하세요. : ");
arraySize = sc.nextInt();
if(arraySize < 0 || arraySize % 2 == 0) {
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
continue;
}
break;
}
// 배열의 크기로 지정
int[] arr = new int[arraySize];
for(int i = 0; i < arr.length; i++) {
int count = arr.length/2;
arr[i] = i + 1;
if(i > count) {
arr[i] = arr.length - i;
}
}
// 출력
for(int c = 0; c < arraySize; c++) {
System.out.print(c == 0 ? "[" : "");
System.out.print(arr[c]);
System.out.print(c != arraySize - 1 ? ", " : "]");
}
}
실행결과 : 홀수인 양의 정수를 입력하세요. : 7
[1, 2, 3, 4, 3, 2, 1]
짝수를 입력 한 경우 : 잘못 입력하셨습니다. 다시 입력해주세요.
'Dev > JAVA' 카테고리의 다른 글
[JAVA] 객체지향(Object oriented) (1) | 2023.02.21 |
---|---|
[JAVA] 중첩 반복문 (0) | 2023.02.20 |
[JAVA] 제어문 (0) | 2023.02.18 |
[JAVA] 연산자(Operator) (0) | 2023.02.17 |
[JAVA] 출력 메소드(Print Method) (0) | 2023.02.06 |