반응형
01. 배열이란?
- 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스를 부여해놓은 자료구조
- 객체는 기본적으로 속성과 메서드를 가지고 있지만 객체 중 배열은 유일하게 속성만 가지고 있음
- 인덱스는 0부터 시작
- 배열은 같은 타입의 데이터만 저장할 수 있음
- 한 번 생성된 배열은 길이를 늘이거나 줄일 수 없음
- 배열은 하나의 이름으로 불려지고 R타입처럼 관리 됨
02. 배열 형식
[ 기본 형식 ] 데이터 타입[] 변수명 = new 데이터 타입[인덱스 값];
int[] arr01 = new int[10]; //int 타입의 10개 배열 선언
double[] arr02 = new double[5];//double 타입의 5개 배열 선언
String[] arr03 = new String[3];//String 타입의 3개 배열 선언
//char는 문자열이 아닌 한 글자만 저장하는 명령어
System.out.println(arr01);//값 : [I@3d012ddd
//뜻 : [는 배열, I는 int, 3d012ddd는 객체의 주소
//그대로 출력하면 [위치, index, 번지]의 값이 출력
System.out.println(arr01[0]);//값 : 0
//arr01의 0번지에 저장된 값 출력
//변수선언
arr01[0] = 100; //해당 위치에 100을 저장하라는 뜻
arr01[1] = 10;
arr01[2] = 50;
arr03[0] = "홍길동";
arr03[1] = "금길동";
arr03[2] = "이길동";
[ 활용 ]
public class Array {
public static void main(String[] args) {
// 생성
int[] arr01 = new int[10];
// 값 입력 (역순으로 채워넣기)
for (int i = 9; i >= 0 ; i--)
arr01[i] = 10 - i;
//출력
System.out.println(Arrays.toString(arr01));
//생성과 값 입력을 동시에
int[] arr02 = new int[] {10, 9, 8, 7, 6};//길이를 마음대로 조절 불가
int[] arr03 = {5, 4, 3, 2, 1};
}
}
03. 배열의 길이
- 배열에 저장할 수 있는 전체 항목의 개수를 말함
- 코드에서 배열의 길이를 얻으려면 배열 객체의 length를 이용하면 됨
(ex. 배열 변수.length;)
[ 기본 ]
//int[10] 1~10까지 입력하기
int[] arr01 = new int[10]
for (int i = 0; i < arr01.length; i++) {//0~9
arr01[i] = i + 1;
}
//배열 전체 출력
System.out.println(Arrays.toString(arr01));//toString -> 배열을 스트링으로 변경
//배열은 인덱스만 바꿔서 원하는 값 입력할 수 있음
int[] intArray = { 10, 20, 30 ];//int타입의 배열 생성
System.out.println(arr03.length);//int 타입으로 길이 출력 : 3
//배열 출력
for (int i = 0; i < arr03.length; i++) {
System.out.println(arr03[i]);
//arr03배열값 출력
//10 20 30
04. 배열의 초기값
- 객체는 객체 생성과 동시에 초기값을 가짐
- 정수 = 0, 실수 = 0.0, 객체 = null, char = 0 (아스키 코드 특수문자로 화면엔 나오지 않음)
boolean = false
[ 예시 ]
int[] test01 = new int[3];
System.out.println(Arrays.toString(test01));//[0, 0, 0]
byte[] test02 = new byte[3];
System.out.println(Arrays.toString(test02));//[0, 0, 0]
long[] test03 = new long[3];
System.out.println(Arrays.toString(test03));//[0, 0, 0]
short[] test04 = new short[3];
System.out.println(Arrays.toString(test04));//[0, 0, 0]
float[] test05 = new float[3];
System.out.println(Arrays.toString(test05));//[0.0, 0.0, 0.0]
char[] test06 = new char[3];
System.out.println(Arrays.toString(test06));//[ , , ]
boolean[] test07 = new boolean[3];
System.out.println(Arrays.toString(test07));//[false, false, false]
String[] test08 = new String[3];
System.out.println(Arrays.toString(test08));//[null, null, null]
Scanner[] test09 = new Scanner[3];//R타입은 다 null로 뜸
System.out.println(Arrays.toString(test09));//[null, null, null]
Object[] test10 = new Object[3];
System.out.println(Arrays.toString(test10));//[null, null, null]
05. printf 활용
' printf ' 활용
%d = 정수 %c = 문자 %f = 실수 %s = 문자열 %b = boolean
%o = 8진수 %x = 16진수 \n = 줄바꿈 \t = tab키
//% 쓸 때는 무조건 printf 써야함
String name = "홍길동";
System.out.printf("제이름은 %s입니다.\n", name);
double pi = 3.14;
System.out.printf("파이는 %f입니다.\n", pi);
System.out.printf("파이는 %.2f입니다.\n", pi);
//.2는 소수점 아래 둘째자리까지 보여줘 라는 뜻
int money = 5000;
System.out.printf("제 용돈은 %d원입니다.\n", money);
System.out.printf("제 용돈은 %,d원입니다.\n", money);
//,붙여주면 5,000원으로 출력
System.out.printf("제 용돈은 %10d원입니다.\n", money);
/10칸을 만들고 값을 적는다는 뜻
System.out.printf("제 이름은 %7s입니다.\n", name);
//폭을 만들 수 있음
System.out.printf("제 이름은 %7s입니다.\n", "가나다라");
char ch = 65;
System.out.printf("제 이름은 %c입니다.\n", ch);
System.out.printf("제 이름은 %10d입니다.\n", 1000);//오른쪽정렬
System.out.printf("제 이름은 %-10d입니다.\n", 1000);//왼쪽정렬
System.out.printf("제 이름은 %010d입니다.\n", 1000);//빈 공간을 0으로 채움
06. 배열 활용 예제
[ Q1. 구구단 2단 출력하는 프로그램 작성 ]
// 방법 1)
for (int i = 1; i < 10; i++) {
System.out.println("2 x " + i + " = " + (2 * i));
}
// 방법 2)
for (int i = 1; i < 10; i++) {
System.out.printf("2 X %d = %d\n", i, (2 * i));
// %d == 정수 첫번째 d자리 두번째 d자리
[ Q2. 2단부터 9단까지 for문으로 출력 ]
// 방법 1)
for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
System.out.printf("%d x %d = %d\n", i, j, i * j);
}
System.out.println("");
}
// 방법 2)
for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
System.out.printf("%d x %d = %d\n", j, i, i * j);
}
System.out.println("");
}
// 방법 3) 옆으로 출력
for (int i = 1; i < 10; i++) {
for (int j = 2; j < 10; j++) {
System.out.printf("%d x %d = %d\t", j, i, i * j);
} //n대신 t를 넣음
System.out.println("");
}
[ Q3. 알파벳 A - Z까지 저장하는 배열 만들기 ]
public class Test03 {
public static void main(String[] args) {
char[] cha01 = new char[26];
for (int i = 65; i <= 90; i++) {
cha01[i - 65] = (char) i;
System.out.println(cha01[i-65]);
}
}
}
[ Q4. 문자 암호화 하기 ]
package jun08;
import java.util.Arrays;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input;
System.out.println("암호화 할 문장을 입력하세요.");
System.out.print("입력 : ");
input = sc.nextLine();// 입력받을 때까지 기다림
input = input.toUpperCase();// 입력받은 문장 모두 대문자화
// input.toLowerCase(); 입력받은 문장 모두 소문자화
// 문자열을 배열화하기
// System.out.println(input);
// String to char
char[] chInput = input.toCharArray();
// input에 넣은 것을 하나하나 쪼개서 배열로 만들기
// (스트링을 char배열로 만들기)
System.out.println(Arrays.toString(chInput));//입력한 문장 배열로 출력
int z = 0;
for (int i = 0; i < chInput.length; i++) {
if ( ((char) (chInput[i] + 3)) > 90) {
z = (chInput[i] + 3) - 26;
System.out.println( (char) z);
} else {
System.out.println((char) (chInput[i] + 3));
}
}
sc.close();
}
}
[ Q5. String 자르기 ]
package jun08;
public class Test05 {
public static void main(String[] args) {
String word = "Hello";
// 01234 charAt은 n번째 있는 것을 char화 시키는 것임
System.out.println(word.length());//word가 가지고 있는 길이 = 5
for (int i = 0; i < word.length(); i++) {
System.out.print( (char) (word.charAt(i) + 3 ) );//Khoor (3글자 밀기)
}
// string 2번부터 뒤까지 출력
System.out.println( word.substring(2));// llo
// string 0번부터 2번 앞까지 출력
System.out.println( word.substring(0,2));// He
String name01 = "가나다라마법사";
System.out.println( name01.substring (4,7) );// 마법사
String name = "가나다라마법사";
String shortName = name.substring (4,name.length());
System.out.println( shortName );// 마법사
}
}
[ Q6. 1차원의 점들이 주어졌을 때, 그 중 가장 거리가 짧은 것의 쌍을 출력하는 함수 작성하기 ]
package jun08;
public class Test06 {
public static void main(String[] args) {
int[] map = {1, 3, 4, 8, 13, 17, 20};
int fir = 1;// 시작 숫자
int sec = 3;// 끝 숫자
int temp = map[1] - map[0];// 두 수의 차이
for (int i = 0; i < map.length - 1; i++) {
// System.out.print(map[i] +", "+map[i + 1] + " : ");
// System.out.println(map[ i + 1 ] - map[i]);//뒷 수 - 앞 수
// i + 1까지 가게 하려고
if( (map[ i + 1 ] - map[i]) < temp ) {
temp = map[ i + 1 ] - map[i];
fir = map[i];
sec = map[i + 1];
}
}
System.out.print("두 거리의 차가 가장 작은 숫자는 ");
System.out.print(fir + ", " + sec);
}
}
참고자료
신용권, '혼자 공부하는 자바'
반응형
댓글