배열 & 계산기 만들기

InSeok·2022년 7월 7일
0

TIL

목록 보기
9/51

목차


  1. 1차원배열과 2차원배열
  2. 가변배열
  3. 배열 탐색
  4. 계산기 프로그램 만들기

배운 내용


  • 변수는 하나의 값만 저장할 수 있다
  • 배열을 사용할 경우, 여러 개의 변수를 선언하지 않고도 단 하나의 변수만으로 값들을 저장하고 참조할 수 있다.
  • 배열 : 동일한 타입의 값들을 하나의 묶음으로 묶은 자료 구조
  • 메모리 공간 : 각 메모리 셀마다 0x001a3d41과 같이 16진수로 이루어진 메모리 주소가 지정되어져 있으며, 메모리 주소는 오름차순이다.
    • ex) 0x001a3d41 → 0x001a3d42 → 0x001a3d43
    • 변수는 개별적으로 선언된 변수이므로 메모리 공간 상에 흩어져서 개별적으로 존재
    • 배열을 사용하여 값을 저장하는 경우,메모리 공간 상에 연속적으로 값들이 모여서 저장
  • 요소(element) : 배열이 가진 각 값
  • 인덱스(index) : 배열의 각 요소가 부여받는 순번, 0에서 시작

배열의 차원

  • 배열에서 차원이란 배열이 중첩된 정도 뜻하며, 배열의 요소가 또 다른 배열인 경우를 의미
  • 2차원 배열 : 배열이 한 번 중첩된 경우 = 배열의 요소가 배열이다.

**1차원 배열**

  • 배열 선언 : int[] a; 배열을 가리킬 참조 변수 a를 선언
  • new int[13] : 총 13개의 int형 값을 저장할 수 있는 메모리공간 확보
    • 배열의 모든 요소는 int형의 기본값인 0으로 초기화 되어있다.
  • a = new int[13] : 생성된 배열 첫번째 요소의 주소값이 참조변수 a 에 할당된다.
  • 배열을 선언하는 시점에 배열이 몇개의 요소를 가질지 컴퓨터는 알 수 없습니다. 따라서 배열을 선언하면, 이후에 생성될 배열의 주소값을 담을 메모리 공간만이 확보
  • int[] a = new int[13]; 배열선언과 함께 첫번째 요소의 주소값 참조변수 a 에 할당, 값은 0으로 초기화
  • int[] a = new int[13] {1, 2, 3} : 배열에 실제 값을 넣어서 초기화
  • int[] a = {1, 2, 3} : 선언과 초기화를 하나의 문장으로 할 때에 new int[13] 생략 가능

값 접근하기

  • 배열_참조변수 이름[인덱스] : 배열 참조 변수의 이름과 배열의 인덱스를 활용하여 배열 내 특정요소에 할당된 값에 접근 가능
  • 참조 변수가 가진 배열 첫 번째 요소의 주소값에 인덱스를 더하여 얻을 수 있는 수를 주소로 가진 요소의 값을 읽어옵니다.
  • Arrays.toString() 메서드를 통해 배열의 요소 쉽게 확인가능
int[] ages = { 30, 32, 39, 59, 23 };
System.out.println(Arrays.toString(ages));
//  [30, 32, 39, 59, 23];

**배열의 길이**

  • 배열의 길이 : 배열이 가진 요소의 개수
  • 배열_참조변수 이름.length 으로 배열이 가지 요소의 개수를 얻을수있다.
  • 인덱스는 0부터 시작하므로 , 마지막 요소의 인덱스는 배열의 길이 - 1

**2차원 배열**

  • 2차원 배열은 배열의 각 요소가 또 다른 배열인 구조
int[][] kcal;
kcal =  = new int[31][3];
int[][] kcal = new int[31][3]; 
  • int 형의 기본값인 0을 3개씩 저장하고 있고, 외부배열은 내부배열{0,0,0} 31개 저장하고 있다.
  • 내부 배열은 3개의 0을 요소로 가지지만, 외부 배열의 각 요소는 내부 배열의 주소값을 저장하고있다.
  • 선언과 초기화를 하나의 문장으로 할 때에 한해 new int[][]를 생략 가능

**가변 배열**

  • 가변배열 : 2차원 이상일 때, 마지막 차수에 해당하는 배열의 길이를 고정하지 않은 가변의 길이를 가진 배열
    • ex) int[][] ages = new int[5][];

    • 외부 배열만 생성된 상태 → 내부배열 크기 자유롭게 지정 가능

      int[][] key = new int[5][];
      
      ages[0] = new int[5];
      ages[1] = new int[6];
      ages[2] = new int[7];
      
      // or
      
      { 30, 32, 39, 59, 23 },
      { 31, 41, 52, 56, 72, 13 },
      { 45, 32, 84, 23, 13, 42, 55 },

**배열 탐색**

**반복문을 통한 배열 탐색**


int[] scores = { 100, 90, 85, 95, 100 };
int sum = 0;

//for문, 배열 값 수정가능
for (int i = 0; i < scores.length; i++) {
	sum += scores[i];
}

//while문, 배열값 수정가능
while (i < scores.length) {
	sum += scores[i++];
}

//향상된 for문 -> 배열을 순회하면 배열의 값을 읽어오는 것만 가능
// 배열의 값 수정 불가
for (int score: scores) {
	sum += score;
}

계산기 프로그램 만들기

package com.codestates.seb.calculator;
import java.util.Scanner;

public class Calculator {
public static void main(String[] args) {
System.out.println("===Java Calculator===");

Scanner input = new Scanner(System.in);
    /*
        요구 사항에 따라 간단한 계산기를 만들어주세요.
        1. 사용자의 입력으로 첫 번째 숫자, 연산자, 두 번째 숫자를 받아야 합니다.
        2. 연산자의 종류는 +, -, *, / 입니다.
        3. 소수점 연산을 수행할 수 있어야 합니다.
        4. 연산 결과를 콘솔에 출력합니다.
    */
// TODO...

System.out.println("첫 번째 숫자를 입력해주세요.");
double num1 = input.nextDouble();

System.out.println("연산자를 입력해주세요.");
char op = input.next().charAt(0);

System.out.println("두번째 숫자를 입력해주세요.");
double num2 = input.nextDouble();

double ca = calculate(num1, op, num2);
System.out.println("결과값: " + ca);

}
//메서드 정의부
public static double calculate(double a, char b, double c){
double result = 0.0;
if(b == '+')
result = a + c;
else if(b == '-')
result = a - c;
else if(b == '*')
result = a * c;
else if(b == '/')
result = a / c;
else
System.out.println("입력이 잘못되었습니다.");

return result;
	}
}

어려운 내용(에러)


문제

// 1. arr 배열이 빈배열인지 체크
if(arr.length == 0)

// 2. arr 배열의 마지막 인덱스 요소 리턴
return arr[arr.length -1];

// 3. 빈배열 리턴
return new arr[]{};

// 4. 문자열 공백 구분하여 단어별 요소를 가지는 문자열타입 배열 생성
String[] a = str.split(" ");

// 5. 문자열 길이 만큼의 크기르 가지는 문자요소를 가지는 배열 생성
char[] arr = new char[str.length()];

// 6. 빈배열인 result배열에 짝수인 경우 칸을 하나씩 늘리면서 마지막 인덱스에 해당값 추가
if(arr[i] % 2 == 0) {
				result = Arrays.copyOf(result, result.length +1);
				result[result.length - 1] = arr[i];
				
			}

// 7. result 배열에 arr 배열의 값 복사
System.arraycopy(arr, 0, result, 0, arr.length);
System.arraycopy(원본배열, 원본 복사시작 인덱스, 복사할배열, 복사할배열 복사시작위치, 복사할 요소의 개수);

//
Arrays.copyOfRange(arr, len -8, len -4)

// 피보나치 수열 - 수를 입력받아 num번째 까징 총num+1개의 피보나치 수열 리턴

int[] result = new int[num + 1];
// 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다.
    result[0] = 0;
    result[1] = 1;
// 그다음 2번째 피보나치 수부터는 바로 직전의 두 피보나치수의 합으로 정의
    for(int i = 2; i < num +1 ; i++){
        result[i] = result[i-2] + result[i-1];
    }

    return result;
profile
백엔드 개발자

0개의 댓글