본문 바로가기
개발 공부 Today I Learned

[국비 13일차 TIL] JAVA 배열 연습

by 개발자신입 2023. 12. 7.
반응형

배열

  • 배열은 객체다. 객체란 속성과 메소드를 가지고 있는데, 배열은 유일하게 속성만 가지고 있음.
  • 배열은 동일한 타입의 데이터를 하나의 묶음으로 관리하는 데이터타입

 

- 배열의 속성

  • length 길이를 int로 반환함
  • 객체의 속성과 메소드 등을 호출할 때는 . 을 사용
  • 배열명.속성명 (배열.length)

 

- 배열의 특징

  • 처음 생성할 때 길이를 적어줘야 함.
  • 배열의 길이는 수정 불가.
  • 배열의 시작은 0부터.
  • index (주소값, 위치값)

 

- 배열 선언

int arr1[] = new int[5];  // arr01을 5만큼 나눠서 각각 값 저장
int arr2[] = null;           // 선언은 했지만 값이 없는 상태

System.out.println(arr1);
System.out.println(arr1[0]); // index
System.out.println(arr1[1]); // 출력, 활용에 쓰는 값 = index
System.out.println(arr1[2]); // 0 1 2 3 4 5
System.out.println(arr1[3]);
System.out.println(arr1[4]);
System.out.println(arr1[5]); // 마지막 index는 길이 -1

 

- 배열 값 저장

배열(객체) 생성 시 기본값으로 초기화됨.

 

- 배열 기본값

  • 정수 : 0
  • 실수 : 0.0
  • 캐릭터 : (공백)
  • 논리타입 : 거짓
  • R타입 : null

 

* 메소드

  • toCharArray() // 값을 한 글자씩 잘라서 출력
  • Arrays.toString() : 배열의 내용을 문자열로 변환하여 반환하는 메소드
  • Integer.parseInt() : String 타입의 문자열을 정수로 변환

 

double d1[] = new double[3];

System.out.println(d1[2]); // 마지막 index는 길이 - 1

// 길이 - 아래의 3개가 같음
System.out.println(d1.length); // d1의 길이 값
System.out.println(d1[d1.length - 1]);
System.out.println(d1[2]);

// 값 대입 (길이만큼 입력 가능)
d1[0] = 123;
d1[1] = 120;
d1[2] = 300;

System.out.println(d1[0]);
System.out.println(d1[1]);
System.out.println(d1[2]);

for (int i = 0; i < d1.length; i++) {
d1[i] = i + 100;
System.out.println(d1[i]);

for (int j = 0; j < d1.length; j++) {
System.out.println(d1[i]);
}

 

 

String arr1[] = {"홍길동", "김길동", "이길동"}; // 들어오는 값에 따라서 길이가 저장됨.

String arr1[] = new String[] {"홍길동", "김길동", "이길동"};

 


package dec07;

import java.util.Arrays;

public class Array02 {

	public static void main(String[] args) {

	String arr1[] = new String[] {"홍길동", "김길동", "이길동"};
	String name1 = arr1[0];

	System.out.println(name1); // name1에 홍길동이 저장 = 홍길동이 2개가 된 상태
	System.out.println(Arrays.toString(arr1));

	char chArray[] = name1.toCharArray();
	System.out.println(Arrays.toString(chArray));


	// arr1 배열에 있는 첫번째 문자의 길이 구하기 (메소드와 변수 구분해야 함)

	System.out.println(name1.length()); // 메소드 표시 붙음
	System.out.println(chArray.length); // 배열 변수명
	System.out.println(arr1[0].length());
	}
}

 


 

로또 번호 생성기

	int num1[] = new int[6];

	System.out.println("행운의 로또 번호");

	for (int i = 0; i < num1.length; i++) {
	num1[i] = (int)(Math.random() * 45)+1;
}
	System.out.println(Arrays.toString(num1));

-------------------------------------------

	int lotto[] = new int[6];
	Random random = new Random();

	for (int i = 0; i < lotto.length; i++) {
	lotto[i] = random.nextInt(45) + 1; // 1~45
}
	System.out.println(Arrays.toString(lotto));

 


- 피보나치수열  1, 1, 2, 3, 5, 8

	int numbers[] = new int[10];

// 피보나치 수열 초기화

	numbers[0] = 1;
	numbers[1] = 2;

	for (int i = 2; i < numbers.length; i++) {
	numbers[i] = numbers[i - 1] + numbers[i - 2];
	}
	System.out.println(Arrays.toString(numbers));

--------------------------------------------------

	int numbers[] = new int[10];

// 피보나치 수열 초기화

	numbers[0] = 1;
	numbers[1] = 2;

	for (int i = 0; i < numbers.length-2; i++) {
	numbers[i + 2] = numbers[i] + numbers[i + 1]; // for문 다르게
}
	System.out.println(Arrays.toString(numbers));

 


* * * 자꾸 실수하는 부분 * * *

for문 결과 출력할 때, System.out.println 위치 주의할 것.

 

  1. 전체 결과가 필요할 때 : for문 밖에 System.out.println()을 놓아서 한 번에 전체 결과를 출력.
  2. 각 단계의 결과를 보고 싶을 때 : for문 안에 System.out.println()을 넣어서 각 단계의 결과를 확인.

 


 

Integer.parseInt()

String 타입의 문자열을 정수로 변환

 

+ 연결이 되는 경우

  • 문자 + 숫자
  • 숫자 + 문자
  • 문자 + 문자
  • 숫자 + 숫자 = 덧셈 결괏값
text = 5 + ""; // 숫자 + "" 문자 연결 = 문자열로 변경 (="5", 값은 5)
System.out.println(text);

text = 5 + 5 + ""; // 10
System.out.println(text);

text = 5 + "" + 5; // 55
System.out.println(text);

text = "" + 5 + 5; // 55
System.out.println(text);

- 과목 별로 점수 입력하면 총점과 평균 출력

	Scanner sc = new Scanner(System.in);
	String msg = " 점수입력";
	String subject[] = {"자바", "jsp", "spring"};

// 점수를 저장하는 배열
	int score[] = new int[subject.length + 1];
	for (int i = 0; i < subject.length; i++) {
		System.out.println(subject[i] + msg);
		score[i] = sc.nextInt();
	}
	score[score.length - 1] = score[0] + score[1] + score[2];

	System.out.println("* 총점 : " + score[score.length - 1]);
	System.out.println("* 평균 : " + score[3] / 3);

 

 


- 게임 승패 승률 출력

 

* 사용자가 원하는 게임 수만큼 게임을 진행하고 그 승패 결과를 배열에 저장, 승률을 출력하는 프로그램 제작.

 

import java.util.Scanner;

public class Array06 {

	public static void main(String[] args) {
    
	Scanner sc = new Scanner(System.in);
	int input, com, game[];
	float win = 0; // 승률 저장
	int winCount = 0;

	System.out.print("환영합니다~ 몇 게임 보고 오셨어요? ");

	game = new int[sc.nextInt()];

	for (int i = 0; i < game.length; i++) {
		System.out.println("게임 스타트");
		System.out.println("1. 가위\t 2.바위\t 3.보");
		input = sc.nextInt();

// 가위바위보 게임 (1 가위, 2 바위, 3 보)

	com = (int) (Math.random() * 3 + 1);

	if (com == 1 && input == 3
		|| com == 2 && input ==1
		|| com == 3 && input ==2) {
	System.out.println("*** 저런....컴퓨터가 이겼습니다..\n");

	} else if(com == 1 && input ==2
			|| com == 2 && input == 3
			|| com == 3 && input == 1) {
		System.out.println("*** 와아~ 당신이 이겼습니다!!!!!!! ㅊㅋㅊㅋ\n");
		winCount++;

		} else if(input == com) {
		System.out.println("*** 두둥! ~무승부~\n");
	}
}

// 승률 통계 (승 1, 패 0, 무승부 0)

	win = (float) winCount / game.length * 100;
	System.out.println("승률 : " + win + "%");

	sc.close();
	}
}

 

 

- 버블정렬

숫자를 크기 순으로 정렬하는 알고리즘

public static void main(String[] args) {

	int i, j; // 반복문에서 사용할 변수
	int temp; // 값 교환할 때 사용할 임시 변수
	int a[] = { 75, 95, 85, 100, 50 }; // 정렬할 배열

	for (i = 0; i < 4; i++) {
		for (j = 0; j < 4 - i; j++) {
			if (a[j] > a[j + 1]) {
				temp = a[j]; // 값을 비교해서 자리를 바꿈
				a[j] = a[j + 1];
				a[j + 1] = temp;
		}
	}
}

	for (i = 0; i < 5; i++) {
		System.out.println(a[i]); // 정렬된 배열 출력
		}
	}
}

 

public static void main(String[] args) {

	int i, j;

	for (j = 0, i = 0; i <= 5; i++) { // 0으로 초기화
		j += i; 					// i의 값을 다 더한 값 = j
		System.out.print(i); 		// 0
		if (i == 5) {
			System.out.print("=");
			System.out.print(j);
		} else {
			System.out.print("+"); // 0+1+2+3+4+5=15

// 배열

  • 같은 타입의 값을 하나의 변수에 넣어서 관리.
  • 같은 타입, 동일 관리, 주소 호출
  • ex) int, 10칸, arr01 = int arr01[] = new int[10];

List

List<Integer> list = new ArrayList<Integer>();

list.add(10);
System.out.println(list.size()); // 크기
System.out.println(list); // list = 값 그대로 보여줌

for (int i = 0; i < list.size(); i++) {
	System.out.println(list.get(i));
}

 

 

배열이 생각보다 어렵다!!!

자바를 배우면서 큰 고비가 3번쯤 온다던데 그 첫 번째가 바로 이 배열 부분이라고 한다.

내 머리 속의 로직을 컴퓨터로 바꿔야한다.

반응형

댓글