오늘은 딴짓하지 않기
할수있다. 할수있다. 할수있다.
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 |