생각기록

2023-03-02 java 표준 배열 본문

SeSAC 풀스택/JAVA &Spring boot

2023-03-02 java 표준 배열

끼록관 2023. 3. 2. 15:16

저번시간 복습

더보기

1. 개발환경 구축

- JDK(Java Development Kit) 17 버전 설치 ** jvm을 설치하기 위해 이 것을 설치해야 한다. 

- Eclipse

 

2. 기본 문법

- 식별자 원칙 : js랑 비슷

- 데이터 타입 : 자바는 강한 언어라서 

1) 기본 타입 

2) 레퍼런스 타입 : 값이 담겨있는 메모리 주소 참조

 > String

.equals("")  ***==을 쓰면 안됨

- 연산자 

 

3. 조건문 반복문 메소드

if else / for / while / do while (do 부분을 무조건 한 번 실행)

클레스 내에서 쓰는 함수를 메소드라고 한다.

public static void 함수명() => 반환값이 xxx

public static 데이터타입 함수명() => 반환값이 있을 경우 데이터 타입 지정

 

4. 배열

표준 배열 사용해서 1차원 배열 만들기

 

배열

• 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

 

배열 출력

• for문 활용

 

• Arrays 클래스의 toString 메소드 활용

• Arrays 클래스는 배열을 다루기 위한 다양한 메소드가 포함되어 있음.

 

• for-each 문

• 배열의 각 원소에 순차적으로 접근하는데 유용한 for 문

 

2차원 배열

1차원배열과 선언은 똑같지만, 뒤에 괄호 하나가 더 추가 된다.

 

package java_first_project;

public class Main {
	
	
	public static void main(String[] args) {
		
		// 0 1 2
		// 3 4 5  ㄴ 으로 읽으면 된다 2, 3 // 자바에서는 중괄호 사용!
		int [][] arr1 = {{0, 1, 2}, {3, 4, 5}};
		int [][] arr2 = new int [2][3];
		
		// for-each
		for (int[] arr : arr1) {
			for (int value : arr) {
				System.out.print(value + " ");
			}
			System.out.println(" ");
		}
		
	}
}

 

이번에는 arr2에 값을 넣어 보도록 한다

현재 값이 없다

package java_first_project;

public class Main {
	
	
	public static void main(String[] args) {
		
		// 0 1 2
		// 3 4 5  ㄴ 으로 읽으면 된다 2, 3 // 자바에서는 중괄호 사용!
		int [][] arr1 = {{0, 1, 2}, {3, 4, 5}};
		int [][] arr2 = new int [2][3];
		
		// for-each
		for (int[] arr : arr1) {
			for (int value : arr) {
				System.out.print(value + " ");
			}
			System.out.println(" ");
		}
		
		int num = 0;
		for ( int i = 0; i<arr2.length; i++) {
			for (int j=0; j<arr2[i].length; j++) {
				arr2[i][j] = num;
				num++;
			}
		}
		
		for (int[] arr : arr2) {
			for (int value : arr) {
				System.out.print(value + " ");
			}
			System.out.println(" ");
		}
	}
}

2차원 배열은 [ ]가 하나더 있고,

요소에 접근할때는 2중 for문으로 접근

 


표준배열의 단점....

배열을 사용하기 전에 크리를 미리 지정해줘야 한다고 했는데, 모든 상황에서 배열의 길이를 아는게 아니다.

그럴때 사용하는 것이 arraylist를 사용한다.

ArrayList 클래스

• 표준 배열보다 조금 느릴 수 있지만, 배열에서 많은 조작이 필요할 때 유용 하게 사용되는 클래스

크기를 미리 정하지 않아도 되는 배열

사용하려면 클래스를 가져와주고,

생성할때는 위와 같은 형태로 생성

ArrayList <타입지정>객체명 = new ArrayList <>();

 

<> 제내릭스? > 타입을 지정하는 곳

 

ArrayList 메소드

• add( element ) : ArrayList 맨 뒤에 element 추가

• add( index, element ) : index 위치에 element 삽입

• addAll( ArrayList ) : ArrayList 뒤에 ArrayList추가

• size() : ArrayList의 길이 리턴

• get( index ) : index에 해당하는 요소 리턴

• indexOf( params ) : params와 같은 첫 번째 요소의 index 리턴, 없 으면 -1 리턴

• remove( index ) : index의 요소 삭제

• clear() : 모든 요소 삭제.

 

package java_first_project;

import java.util.ArrayList;

public class Main {
	
	
	public static void main(String[] args) {
		
		// arr1 이라는 정수형 ArrayList 생성
		ArrayList<Integer> arr1 = new ArrayList<>();
		ArrayList<Integer> arr2 = new ArrayList<>();
		
		// ArrayList 뒤에 ArrayList 를 추가하는 방법
		for ( int i=1; i<6; i++) {
			arr2.add(i);
		}
		
		// arr1 리스트 맨 뒤에 2가 추가 된다.
		arr1.add(2);
		// 0번째 인덱스에 1 추가
		arr1.add(0, 1);
		// arr1 요소 뒤에 arr2 추가
		arr1.addAll(arr2);
		// 1번째 인덱스 요소 제거
		arr1.remove(1);
		// 요소 모두 제거
		arr1.clear();
		
		for (int value : arr1 ) {
			System.out.print(value + " ");
		}
		
		// .length x > .size() 
		//  arr1[i] x > arr1.get(i)
		System.out.println(""); // 줄 바꿈
		for (int i=0; i<arr1.size(); i++) {
			System.out.print(arr1.get(i) + " ");
		}
		
		// 요소의 인덱스 반환 indexOf 
		System.out.println("");
		System.out.println("index of 2: " + arr1.indexOf(2));
		System.out.println("index of 2: " + arr1.indexOf(6));
		
	}
}

배열은 직접 인덱스로 접근하지만,

어레이리스트는 제공하는 메소드를 사용해서 조작하면 된다.

 

 

 

 


실습1

입력 정수로 받고 결과는 실수로 변환해줘야 하는데

강제형 변환이라고 해서

package java_first_project;

import java.util.Scanner;

public class Main {
	
	
	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		
		// 배열 준비
		int[] intArray = new int[5];
		
		int sum = 0;	
		// 숫자 5개 입력받기
		System.out.println("5개의 정수를 입력해 주세요.");
		
		for ( int i = 0; i < intArray.length; i++) {
			intArray[i] = scanner.nextInt();
			sum += intArray[i]; // 합 계산
		}
		System.out.println("평균은 :" + (double)sum/5);
	}
}

선생님 답안

package java_first_project;

import java.util.Scanner;
import java.util.ArrayList;

public class Main {
	
	
	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		
		int[] arr = new int[5];
		int sum = 0;
		
		System.out.println("5개의 정수를 입력하세요");
		

		
		// 입력된 5개의 값이 arr에 저장됨
		for (int i=0; i<5; i++) {
			arr[i] = scanner.nextInt();
			sum += arr[i];
			}
		
		// 이렇게 하면, 1 2 3 4 7 > 3.0이 출력된다 sum / arr.length 먼저 실행되서 3을 double로 저장하는거라.. 그냥 3.0이 된다.
		// 똑같이 sum 앞에 더블을 한다.
//		double result = (double)sum / arr.length;
		
		System.out.println("평균은 " + (double) sum/arr.length);

	}
}

 


실습 2

exit값을 입력받을 때까지 문자열을 계속 받는다.

반복문을 for문같은 경우 횟수를 알고있을 경우 사용하고,

while은 입력을 얼마나 받을지는 모르겟지만, 원하는 조건이 올때까지 입력받을거라 while이 좋습니다

while은 조건을 잘 모를때 사용한다 무한으로 돌린다 그냥.. true!

 

브레이크로 탈출!

 

package java_first_project;

import java.util.Scanner;
import java.util.ArrayList;

public class Main {
	
	
	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		
		// str1 이라는 정수형 ArrayList 생성
		ArrayList<String> str1 = new ArrayList<>();
		

		while ( true ) {
			System.out.println("문자를 입력해주세요: ");
			String temp = scanner.nextLine();
			
			if(temp.equals("exit")) {
				break;
			}
			str1.add(temp);
		}
		for (int i = 0; i < str1.size(); i++) {
			System.out.println(str1.get(i));
		}
	}
}

 

 

선생님 코드

package java_first_project;

import java.util.Scanner;
import java.util.ArrayList;

public class Main {
	
	
	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		// str1 이라는 정수형 ArrayList 생성
		ArrayList<String> arr = new ArrayList<>();
		
		// true로 하면 무한 돈다.
		while(true) {
			System.out.println("문자열을 입력해주세요.");
			// 문자열을 받을 객체 생성
			String str = scanner.nextLine();
			
			// exit면, 브레이크 아니면? 문자를 더해준다.
			if(str.equals("exit")) {
				break;
			}
			arr.add(str);
		}
		// while문 밖에서 출력
		for (String str : arr ) {
			System.out.println(str);
		}
	}
}