• Home
  • About
    • Yerim Oh photo

      Yerim Oh

      Happy and worthwhile day by day :)

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

[05] Java_base

08 Jul 2020

Reading time ~3 minutes

Table of Contents
  • 목차
  • 배열
    • 의미
    • 선언법
      • 배열의 선언과 초기화를 동시에
    • 배열의 위치
      • Dangling Pointer
    • 배열의 특징
  • 2차원 배열
    • 선언
    • 접근
  • 같이 풀어볼 문제
    • [문제 1]
    • [문제 2]
    • [문제 3]

목차

  • 배열
    • 의미
    • 선언법
      • 배열의 선언과 초기화를 동시에
    • 배열의 위치
      • Dangling Pointer
    • 배열의 특징
  • 2차원 배열
    • 선언
    • 접근
  • 같이 풀어볼 문제

배열

의미

배열을 이용하면 아무리 많은 수의 변수라 할지라도 하나의 문장으로 선언하는 것이 가능
배열을 이용하면 반복문을 이용한, 배열을 구성하는 변수에 순차적으로 접근할 수 있다.

선언법

[배열을 쓰지 않는 일반 선언법] 일반적인 변수(예 : 정수형 int)의 경우 아래와 같이 선언 image

image

[배열을 사용한 선언 법]

  • 변수이름을 숫자로 부여->카테고리 마다 대표이름 부여
  • 사용자가 얼마나 긴 변수 덩어리를 선언할지 모름
  • 그러므로 컴파일러가 사용자에게 직접 얼마나 내부 메모리를 확보해야 하는지 알려주어야 함.
    image

image

(주의)
-배열의 접근에는 0부터 시작하는 인덱스값이 사용된다. -가장 첫번째 배열 요소의 인덱스는 0이고 N번째의 인덱스는 N-1이다

int [] book = new int [100];
  
book[0] = 1;
book[1] = 2;

book[99] = 100;

배열의 선언과 초기화를 동시에

image

배열의 위치

image

Dangling Pointer

한번 메모리에 확보한 변수를 재활용할 경우
안쓰게 디는 변수를 자동으로 지워준다

1)선언한 배열의 이름을 재활용하는 경우

int [] var = new int[100];
for(int i = 0;i<100;i++)
	var[i] = i;

var = new int[50];
for(int i = 0;i<50;i++)
	var[i] = i*2;

2)선언한 배열에 다른 배열을 담는 경우

int [] var1 = new int[100];
int [] var2 = new int[90];
var1 = var2;

[지워지는 과정]

  1. 지역에 지역을 덮어 쓰면
  2. 덮어쓰기 전 사용자 지정구역(처음 선언한 integer짜리 100개의 배열)은 좀비가 되어 바이트만 잡아먹음
  3. 프로그램이 점점 느려짐(C나C++-> GC가 자제적으로 메모리 관리)
  4. but, 자바는 Garbage Collection있음!

배열의 특징

new로 선언된 배열은

  • 기준점으로부터 얼마나 떨어져 있는 지를 알려줌
  • 우리의 공간이라 OS가 함부로 건들이지 않음
  • New로 저장된 것은 사용자 정의 공간에 들어감
  • New [3]->(사용자) 4x3 byte +(지역) 64 bit

image


2차원 배열

2차원 배열: 2차원의 구조를 갖는 배열
배열의 가로 세로 길이를 명시하여 선언함
배열 접근할 때에도 가로 세로 위치 정보를 명시해서 접근
int [][] arr1 = new int[행][] image image image

선언

image

int [][] A = {  {1,2,3},
		{4,5,6},
		{7,8,9}
		};

접근

image


같이 풀어볼 문제

[문제 1]

구구단의 값을 저장하는 배열을 만들어라

(답)

Scanner scan = new Scanner(System.in) ;
System.out.print("몇단? ");
int table = scan.nextInt();
int [] gugudan = new int[9];

for(int i = 0;i<9;i++)
	gugudan[i] = table * (i+1);


scan.close();

[문제 2]

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다.
이 값을 M이라고 한다. 그리고 나서 모든 점수를 \(점수/(M\*100)\) 으로 고쳤다.

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

(답)

import java.util.Scanner;

public class mmmmmm {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	Scanner scan = new Scanner(System.in);
	int a = scan.nextInt();
	double num[] = new double[a];
	
	
	  for (int i = 0; i < num.length ; i++) {
		  int hi = scan.nextInt();
          num[i] = hi;
          
	  }
	  
	  for (int i = 0; i < num.length; i++) {

          for (int j = 0; j < num.length-1; j++) {
                if (num[j] > num[j+1]) {
                	double temp = num[j];  
                    num [j] = num[j+1];
                    num[j+1] = temp ;}
          }
         
	  }
	  
	   double M =num[a-1]; 
	   for (int k=0; k< num.length ; k++) {
		  double hey=num[k] ;
		  double hey2= hey/M*100;
		  num[k]= hey2;
		  
	   }
	   double total=0;
	   for(int l = 0 ; l<num.length; l++) {
		   total+= num[l];
	   }
	  double fianl = total/num.length;
	  
	  System.out.println(fianl);
	  }
}

[문제 3]

주어진 두 행렬의 합을 구하시오

주어진 행렬

int [][] A = { {1,2,3},
	{4,5,6},
	{7,8,9}
	};

int [][] B = { {-1,-2,-3},
{0,0,0},
{-7,-8,-9}
};

(답)

int[][] C = new int[3][3];

for(int i = 0;i<A.length;i++)
	for(int j = 0;j<A[i].length;j++)
		C[i][j] = A[i][j] +B[i][j];

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



BasicJava Share Tweet +1