IT/JAVA (17.12.18~)

6일차 JAVA(6)

만두토끼 2017. 12. 26. 10:41

오늘은 딴짓하지 않기 

할수있다. 할수있다. 할수있다.


1. 배열 (Array) 

-> 동일한 데이터 타입으로 이루어진 데이터의 연속적인 모임

-> 참조형: 변수가 데이터의 시작주소를 저장

-> 배열의 데이터 개수: 배열이름.length

-> 배열에 하나하나 접근(배열의 요소 접근): 배열이름[인덱스] //인덱스는 0부터 시작한다.


int [ ] ar = {74,23,57,21,43}; //ar은 배열의 이름 

int size = ar.length; //임시 변수에 넣어주는 것이 좋다.


부모보다 자식이 큰 트리를 Heap 이라고 한다. 

참조형변수는 Heap 에 저장된다.

메모리를 가져와서 쓸때 stack, heap 이라고 부른 것 뿐이지 실제로 존재 하진 않는다.

//나중에 또 다시 자세히 



실습) 배열의 데이터 합계, 평균 구하기

public class ArrayTest {

public static void main(String args[]) {

int [] ar= {74,83,27,66,28};

int size = ar.length;

int sum=0;

     //배열의 값 확인, sum에 배열 요소들의 합구하기

for(int i=0; i<size; i=i+1) {

System.out.println("ar["+i+"]= "+ar[i]);

sum=sum+ar[i];

}

     //합계 출력, 평균 출력

System.out.println("sum= "+sum);

System.out.println("ave= "+(double)sum/size);

}

}




실습) 특정 데이터 합계, 평균 구하기 (배열의 요소가 60이상이면 더하기), 소수 1째자리에서 반올림  

public class ArrayTest2 {

public static void main(String args[]) {

int [] ar= {74,83,27,66,28};

int size = ar.length;

int sum=0;

int cnt=0; 

for(int i=0; i<size; i=i+1) {

//60이상의 값만 더하고 평균구하기

if(ar[i]>60) {

System.out.println("ar["+i+"]가 더해지는중...");

sum=sum+ar[i];

cnt=cnt+1;

}

}


if(cnt==0) {

//60 넘는 숫자가 없을 경우

System.out.println("조건에 맞는 데이터가 없습니다.");

}

else {

//소수 1째자리에서 반올림하기: +0.5를 해서 정수로 바꿔버리면 된다.

double ave=(double)sum/cnt;

int result=(int) (ave+0.5);

System.out.println("\nsum= "+sum);

System.out.println("ave= "+ave);

System.out.println("Result= "+result);

}

}

}







--값을 변경해서 맞는지 다시 한번 확인--



public class ArrayTest2 {

public static void main(String args[]) {

int [] ar= {74,83,27,70,28};

int size = ar.length;

int sum=0;

int cnt=0; 

for(int i=0; i<size; i=i+1) {

//60이상의 값만 더하고 평균구하기

if(ar[i]>60) {

System.out.println("ar["+i+"]가 더해지는중...");

sum=sum+ar[i];

cnt=cnt+1;

}

}

if(cnt==0) {

//60 넘는 숫자가 없을 경우

System.out.println("조건에 맞는 데이터가 없습니다.");

}

else {

//소수 1째자리에서 반올림하기: +0.5를 해서 정수로 바꿔버리면 된다.

double ave=(double)sum/cnt;

int result=(int) (ave+0.5);

System.out.println("\nsum= "+sum);

System.out.println("ave= "+ave);

System.out.println("Result= "+result);

}

}

}




실습) 위의 예제와 동일한 상태에서, 소수 2째자리 까지 구하기 

public class ArrayTest2 {

public static void main(String args[]) {

int [] ar= {74,83,27,70,28};

int size = ar.length;

int sum=0;

int cnt=0; 

for(int i=0; i<size; i=i+1) {

//60이상의 값만 더하고 평균구하기

if(ar[i]>60) {

System.out.println("ar["+i+"]가 더해지는중...");

sum=sum+ar[i];

cnt=cnt+1;

}

}

if(cnt==0) {

//60 넘는 숫자가 없을 경우

System.out.println("조건에 맞는 데이터가 없습니다.");

}

else {

//소수 1째자리에서 반올림하기: +0.5를 해서 정수로 바꿔버리면 된다.

double ave=(double)sum/cnt;

int result=(int) (ave+0.5);

//소수 2째자리 에서 반올림하기

double result2=((int)(ave*10+0.5))/10.0; //10이 아닌 10.0으로 나누어주어야 한다.

System.out.println("\nsum= "+sum);

System.out.println("ave= "+ave);

System.out.println("Result= "+result);

System.out.println("Result2= "+result2);

}

}

}






2. 최대값(maximum)

-> 최대값을 저장할 변수를 만들고 초기화

-> 초기화 할 때는 배열의 첫번째 데이터를 대입하거나 데이터에 최소가 될 가능성이 있는 데이터로 초기화

-> 데이터들을 순회하면서 최대값보다 큰 데이터를 만나면 최대값을 그 데이터로 변경


실습) 가장 큰 값을 구하고 위치 구하기

public class MaxTest {


public static void main(String[] args) {

int [] ar= {74,83,27,67,28};

int size = ar.length;

int max=ar[0]; //가장 큰 값은?

int num=0; //가장 큰 값의 위치는?

for(int i=0;i<size;i=i+1) {

if(max<ar[i]) {

max=ar[i];

num=i;

}

}

System.out.println("max값= "+max);

System.out.println("위치i= "+num);

}

}




실습) 가장 작은 값을 구하고 위치 구하기

public class MaxTest {


public static void main(String[] args) {

int [] ar= {74,83,27,67,28};

int size = ar.length;

int min=ar[0]; //가장 작은 값은?

int num=0; //가장 작은 값의 위치는?

for(int i=0;i<size;i=i+1) {

if(min>ar[i]) {

min=ar[i];

num=i;

}

}

System.out.println("max값= "+min);

System.out.println("위치i= "+num);

}

}




실습) 로또 번호 입력하고 출력하기(중독된 숫자 입력 X & 범위 내의 숫자 입력 & 오름차순으로 정렬하여 출력)

import java.util.Scanner;


public class LottoTest {

public static void main(String[] args) {


//1~45까지의 숫자를 6개 입력받아서 저장하고 오름차순으로 정렬하여 출력하기

//단, 입력은 정수만 한다고 가정

//단 중복된 숫자는 저장하면 안됨 

int [] lotto = new int[6];

int size = lotto.length;

Scanner sc = new Scanner(System.in);

int temp=0; //오름차순을 위한 공간


//로또 숫자 6개 받기

for(int i=0; i<size; i=i+1) {

System.out.print("로또 숫자를 입력하세요 " +(i+1)+"번째: ");

lotto[i]= sc.nextInt();

//범위에 벗어나는 숫자인지 확인하기

if(lotto[i]<0||lotto[i]>45) {

System.out.println("범위에서 벗어나는 값입니다. 1~45 숫자를 입력해주세요.");

i=i-1;

continue;

}

//중독된 숫자가 있는지 확인

for(int j=0; j<i; j=j+1) {

if(lotto[i]==lotto[j]) {

System.out.println("중복된 숫자가 있습니다. 다시 입력하세요.");

i=i-1;

}

}

}


//오름 차순 계산하기 

for(int i=0; i<size-1; i=i+1) {

for(int j=i+1;j<size;j=j+1) {

if(lotto[i]>lotto[j]) {

temp=lotto[j];

lotto[j]=lotto[i];

lotto[i]=temp;

}

}

}


//로또 번호 출력하기 

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

for(int i=0; i<size; i=i+1) {

System.out.print(lotto[i]+"\t"); //탭으로 구분해서 출력 

}

sc.close();//Scanner 변수 다 사용함, 닫는것, 키보드 객체 반환 하기 

}

}





3. Sorting (정렬)

-> 데이터를 순서대로 나열하는 것

1) 값의 순서에 따른 분류

- 오름 차순 (Ascending /Asc) : 기본적으로 정렬이라고 하면 오름차순이라고 한다. 작은값 -> 큰값

- 내림 차순 (Descending / Desc) : 큰값 -> 작은값 


2) 알고리즘에 따른 분류

- 선택정렬 //현업에서는 사용하지 X. 느림

첫번째 위치부터 (n-1) 번째 위치까지 자신의 뒤에 있는 모든 데이터와 비교하면서 정렬

- 버블정렬

- 삽입정렬

- 퀵 정렬 




4. 다차원 배열

-> 자료형 [ ][ ] 배열명;

-> 배열의 배열

-> 행 우선

ex) int [ ][ ] score = new int [3][60]; //행(row) & 열(column)  


1) 2차원 배열: 배열의 차원이 2개 (행과 열)

                   length는 생략된 첫번째 차원의 갯수


[0][0] [0][1] [0][2] ... ...

[1][0] [1][1] [1][2] ... ...


score.length == 3

score[0].length == 60




5. 프로그래밍 방식

1) 구조적 프로그래밍

=> 프로그램을 구조적으로 분할해서 프로그래밍 하는 방식

=> 프로그램을 분할 할 때 사용하는 기호: {  } //c언어 방식을 취하지 않는건 Python 이며 들여쓰기를 한다.

=> C언어(모든 프로그램 작성 가능 - 시스템 프로그래밍, Embedded에 강함) 이후의 모든 언어


2) 객체 지향 프로그래밍

=> 프로그램을 제어문이나 함수 단위 뿐 아니라 변수와 함수의 묶음인 클래스 단위로 분할해서 프로그래밍을 하는 방식

=> Java(대규모 웹 애플리케이션, Embedded에 많이 사용, 안드로이드), C++(C와 동일, 언리얼엔진), C#(윈도우 프로그래밍, Unity 3D, 자마린-아이폰과 안드로이드 앱을 동시 개발, java와 유사), Objective-C(아이폰) 등


3) 스크립트 방식의 프로그래밍

=> 모든 데이터를 참조형으로 만들어서 사용하는 언어

=> 프로그램을 컴파일하지 않고 줄 단위로 실행하는 방식

=> Python(데이터 분석용으로 많이 사용), javascript(브라우저 안에서 구동), ruby(일본에서 만든 파이썬 개선판), swift(아이폰), kotlin(안드로이드) 등 




6. 클래스와 객체 - PPT 자료 


public class Car {

Car car = new Car( ); //인스턴스(객체) 생성

}


'IT > JAVA (17.12.18~)' 카테고리의 다른 글

8일차 JAVA(8)  (0) 2017.12.28
7일차 JAVA(7)  (0) 2017.12.27
5일차 JAVA(5)  (0) 2017.12.22
4일차 JAVA (4)  (0) 2017.12.21
3일차 JAVA (3)  (0) 2017.12.20