코딩

Day 09 - 배열의 기본과 1차원 배열

Ledlaputa 2020. 2. 17. 15:47

안녕하십니까 아재나라 입니다. 오랜만에 자바 관련 포스팅을 하겠습니다. 그동안 바쁜일들로 코딩과 오피스쪽 포스팅이 부족했습니다. 다시 앞으로 열심히 올려보도록 하겠습니다. 

 

오늘은 자바 뿐만이 아니라 다른 프로그래밍 언어에서도 매우 중요한 배열에 대해서 살펴 보도록 하겠습니다. 

 


배열의 개요


배열은 기억창고를 한꺼번에 잡아주는것을 배열이라고 한다. (아파트와 같은 구조)

  • 연관된 데이터를 모아 관리하기 위해 사용하는 데이터 타입  
  • 배열은 여러 개의 데이터를 저장하기 위한 것

배열의 용도

  • 학교 점수 계산의 예)
    int kor,eng,mat,sci,art....
    total=kor+eng+sci...
    avg=(kor+eng+sci...)/13

성적처리 예) 일반 방식

int kor,eng,mat,soc,sci;
kor=90;
eng=100;
mat=30;
soc=70;
sci=80;
           
int total=kor+eng+mat+soc+sci;
double avg=total/5.0;
                     
System.out.println("total= "+total);
System.out.println("avarage= "+avg);

배열 구조

배열 선언하기

  • int[] jum = new int[5]; // 정수가 들어가는 배열 5개를 잡는다는 의미. bae:배열의 대표명
  • int[] jum;
    bjume = new int[5]; // 두줄로 선언하기 
  • int jum[] = new int[5]; // 배열의 대표명 뒤에 써도 된다. C#에서는 안됨
  • C#은 int int[] jum; 방식만 사용한다. 

배열로 문제 풀이 

에러 발생 : 배열 범위 초과 : 5 (배열 크기가 4이므로 jum[5]는 초과되었다


코드> 1차원 배열

// 배열 선언
int[] jum = new int[5];
jum[0]=100;
jum[1]=80;
jum[2]=30;
jum[3]=70;
jum[4]=80;
           
int total=0;
for(int i=0; i<5; i++) { 
	total = total+jum[i]; //누적 스템, 초기치
}
System.out.println(total);
System.out.println(total/5.0);

배열의 종류 - 1차원 배열

  • 1차원 배열 형식 : int [] jum = new int[5]; 형태 (단층 아파트 모양)   
  • 다양한 데이터 형의 1차원 배열 

배열 입력의 간략화

  • int[] jum={100,90,30,50,80}; //별도 초기치 없이 입력 가능
//일반 배열 선언
int[] jum = new int[5];
jum[0]=100;
jum[1]=80;
jum[2]=30;
jum[3]=70;
jum[4]=80;

// 간략한 배열 선언
int[] jum={100,90,30,50,80}; //위의 내용을 한줄로 가능
  • 실수 배열의 간략화
    double [] dd={3.14, 5.78, 6.75};  
    System.out.println(ddd[0]+ddd[1]); 
  • String 배열의 간략화
    String [] str1={"babo", "ondal", "merong"}; 
    System.out.println(str1[0]+str1[1]+str1[2]);  

<실습> 암호학 

예시) mpwf => alphabet+1 => love //본래 알파벳에서 한글자씩 뒤로 더 이동해서 암호화

 

문제1)

love라는 글자를 배열에 넣은 후 적당한 방법으로 순서를 바꾸세요 

힌트) swap을 이용한 방법

  1. aa와 bb의 값을 바꾸세요
    int aa=30;
    int bb=50;
    aa=bb; bb=aa; (x)
  2. 임시방을 만들어야 한다. swap
  3. swap=aa; (swap=30)
    aa=bb; (aa=50)
    bb=swap; (bb=30) 
char[] love= {'L','O','V','E'};

char imsi=love[1];
love[1]=love[3];
love[3]=imsi;
           
for (int i = 0; i < love.length; i++) {
	System.out.print(love[i]);
}  

다시 원래대로 돌리기 코드

love[3]=love[1];
love[1]=imsi;
           
for (int i = 0; i < love.length; i++) {
	System.out.print(love[i]);
}

 


문제2)

love라는 글자를 다른 글자로 바꾸어 표시하라  

힌트)

  1. 배열char[4]로 love 문자 저장
  2. 문자를 ASCII로 변환
  3. ASCII 코드값에 숫자 더하기 
  4. 결과를 문자로 변환 
  5. 출력 
char[] love= {'L','O','V','E'};

// love를 Ascii 숫자 코드로 바꿈
int[] loveInt= new int[4];
for (int i = 0; i < love.length; i++) {
	loveInt[i]=(int)love[i];
}
           
//변환된 숫자에 +1하여 암호화
for (int i = 0; i < loveInt.length; i++) {
	loveInt[i]=loveInt[i]+1;
}
           
//숫자>문자로 안호화
char[] loveChar= new char[4];
for (int i = 0; i < loveChar.length; i++) {
	loveChar[i]=(char)loveInt[i];
}
           
//love원본 출력
for (int i = 0; i < love.length; i++) {
	System.out.print(love[i]);
}
System.out.println();
           
//암호화된 love를 출력
for (int i = 0; i < loveChar.length; i++) {
	System.out.print(loveChar[i]);
}    
System.out.println();

코드 - 암호화할 +숫자를 입력하고 싶으면 아래 코드로 변경

//더할 숫자를 입력해서 반영하는 부분
Scanner sc1=new Scanner(System.in);
System.out.println("암호화할 숫자를 입력하세요");
int num=Integer.parseInt(sc1.next());
//변환된 숫자에 +1하여 암호화
for (int i = 0; i < loveInt.length; i++) {
	loveInt[i]=loveInt[i]+num;
}

코드 - 암호화할 문자열을 직접 입력하기 

//char[] love= {'L','O','V','E'};
System.out.println("문장을 입력하세요.");
String str = sc1.next();
char[] love=str.toCharArray(); // 입력받은 Sting 문자를  char[] 배열로 변환

(중요)입력받은 문자열 변수 str에 .toCharArray()  함수를 써서 char[]배열로 변환

 

코드 - 역 암호화 

//역 암호화
for (int i = 0; i < loveInt.length; i++) {
	loveInt[i]=loveInt[i]-num;
}
        
//숫자>문자로 안호화
for (int i = 0; i < loveChar.length; i++) {
	loveChar[i]=(char)loveInt[i];
}

배열에 대한 기본 내용과 관련 예제를 다루어 봤습니다. 오늘 배운 부분은 배열에서 1차원 배열이라고 하는 단순 구조의 배열입니다. 이후 2차원 3차원 등 다차원 배열이 등장하며, 2차원 배열과 3차원 배열 이상의 다차원 배열은 자주 사용되지는 않지만 존재한다는 것은 알아두시길 바랍니다. 

 

배열은 특히 for 구문과 매우 잘 결합되어 사용되며, 상당수의 배열 예제들은 for문으로 되어 있습니다. 

배열은 자바는 물론 프로그램에서 매우 중요한 부분이므로 확실히 학습하고, 또 이해하기를 바랍니다. 그럼 다음 시간에는 배열에서 2차원 배열에 대해서 알아보도록 하겠습니다.