🟩 배열이란?
- 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
- 많은 양의 데이터를 저장하기 위해 사용함
- 쉽게 말해서 임시저장소이다.
- 값 로드하기, 값 위치 찾기, 배열이동, 값 바꾸기, 값 이동하기... 등등 여러 가지 방법으로 사용된다.
- 배열은 기본형 변수를 사용해도 참조형 객체라고 한다.
- 인덱스(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"라는 임시 저장소를 만들어서 "저글링"하듯 값을 돌려주면 된다.
이 그림을 보면 이해하기 쉬울것이다.
- temp라는 변수를 새로 선언한다.
- temp에 nums[5](90)을 저장해준다. num[5]는 temp에 값을 넘겨주고 num[5]를 temp처럼 사용할 수 있다.
- nums[5]에 nums[0](100)을 저장한다.
- nums[0]에 90을 저장한다.