🟩 배열이란? 

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
  • 많은 양의 데이터를 저장하기 위해 사용함
  • 쉽게 말해서 임시저장소이다.
  • 값 로드하기, 값 위치 찾기, 배열이동, 값 바꾸기, 값 이동하기... 등등 여러 가지 방법으로 사용된다.
  • 배열은 기본형 변수를 사용해도 참조형 객체라고 한다.
  • 인덱스(index)의 범위0부터 '배열길이-1'까지!

 

byte[] a=new int[];
short[] b=new short[];
int[] c=new int[];
long[] d=new long[];
boolean[] e=new boolean[];
float[] f=new float[];
double[] g=new double[];
char[] h=new char[];

 기본형 타입의 배열 선언 방법

 

int[] numbers;// int 형 변수의 numbers라는 배열 선언.
numbers = new int[10];// numbers에 크기 10인 배열 할당.
numbers[1] = 3; // numbers의 2번째에 숫자 3을 할당.
int[ ] kors = {1, 2, 3}

 

위에 방식처럼 다르게 배열을 선언할 수 있다.


✅ 간단 퀴즈 #1
   파일에서 값 90을 찾아서 그 값을 1번째 위치 값과 바꾸어 저장하시오.
   
   100 23 46 82 57 90 50 46 80 20 50 70

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.util.Scanner;

public class array {
	public static void main(String[] args) throws IOException {
		int[] nums = new int[100];// 숫자 저장 공간

		int size=0;//데이터 Size측정
		
		// 값 로드하기
		{
			FileInputStream fis = new FileInputStream("JavaPrj/res/Data/data.txt");
			Scanner sc = new Scanner(fis);
			
			for (int i = 0; sc.hasNext(); i++) {
				nums[i] = sc.nextInt();
				size++;
			}
			sc.close();
			fis.close();
		}

		//nums 출력하기
		//100, 23, ...70
		{
			for(int i=0;i<size;i++)
				System.out.printf("%3d ",nums[i]);
		}
		System.out.println();

		int index = -1;// index가 0부터 시작하면 배열에서 0값으로 인식할 수 있어서 범위 밖에있는 값 지정.
		// 위치 찾기
		{
			for (int i = 0; i < size; i++)
				if (nums[i] == 90) {
					index = i;
					break;//효율을 위해서!
				}
		}

		// 값 바꾸기
		{
			int temp; //temp라는 변수는 이 구역에서만 사용해서 여기에 변수를 선언했음
			temp = nums[index]; //temp에 nums[5](90)을 저장함.
			nums[index] = nums[0]; //nums[5]에 nums[0](100)을 저장함.
			nums[0]=temp; // nums[0]에 90을 저장함. 
		}

		// 값 저장하기
		{
			FileOutputStream fos = new FileOutputStream("JavaPrj/res/Data/data.txt");
			PrintWriter fout = new PrintWriter(fos, true, Charset.forName("UTF-8"));
			
			//파일 출력
			for(int i=0;i<size;i++)
				fout.printf("%d ",nums[i]);
			
			//콘솔 출력 
			for(int i=0;i<size;i++)
				System.out.printf("%3d ",nums[i]);
			
			fout.close();
			fos.close();
		}

		
	}
}

 

주제와 조금 벗어난 이야기지만 여기서 "//값 바꾸기"에 대해서 조금 더 자세히 알아보자.

 

// 값 바꾸기
		{
			int temp; //temp라는 변수는 이 구역에서만 사용해서 여기에 변수를 선언했음
			temp = nums[index]; //temp에 nums[5](90)을 저장함.
			nums[index] = nums[0]; //nums[5]에 nums[0](100)을 저장함.
			nums[0]=temp; // nums[0]에 90을 저장함. 
		}

사람한테 "100 23 46 82 57 90" 이런 숫자를 주고, 두 숫자의 자리를 바꾸라고 하면 지우개로 지우고 다시 쓰면 될 거다.

 

반면 컴퓨터는 사람처럼 지우개로 지우고 다시 쓸 수 없다. 그래서 "temp"라는 임시 저장소를 만들어서 "저글링"하듯 값을 돌려주면 된다.

 

이 그림을 보면 이해하기 쉬울것이다.

 

  1. temp라는 변수를 새로 선언한다.
  2. tempnums[5](90)을 저장해준다. num[5]temp에 값을 넘겨주고 num[5]를 temp처럼 사용할 수 있다.
  3. nums[5]nums[0](100)을 저장한다.
  4. nums[0]90을 저장한다.

 


 

+ Recent posts