일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- javascript
- 스프링
- CSS
- 이안의평일코딩
- 자바스크립트 코딩테스트
- spring
- 정보처리기사실기정리
- 정보처리기사실기요약
- 타입스크립트
- 오라클
- ReactNative
- Java의정석
- VUE
- 코딩테스트
- 국비IT
- react
- 정보처리기사
- 평일코딩
- 정보처리기사요약
- typescript
- 자스코테
- 리액트네이티브
- 국비코딩
- 정보처리기사정리
- 정보처리기사실기
- 리액트
- 자바스크립트
- 자바의정석
- Oracle
- php
- Today
- Total
이안의 평일코딩
JAVA의 정석 12일차 - 배열 본문
2020.06.30(화)
1. 배열 :
1) 같은 타입의 여러개의 변수를 묶어서 관리하는 프로그램
======
double[] a{100, 10.5, ....} //큰 데이터형에는 작은 데이터형 들어가도 됨. double <- int 100
숫자 (정수, 실수, 문자), 문자열
2) 한개의 변수명을 이용해서 -> 여러개의 변수를 제어
============= 구분자 : 번호로 구분을 한다
======= 인덱스번호
인덱스번호 => 0번부터 시작
예) int[] arr = {10, 20, 30, 40, 50} => 크게 늘릴 수 있다
메모리 주소이용해 접근하는 변수 => 참조변수(배열, 클래스)
** 인덱스번호는 중간에 없는 번호는 없다 (순차적) => for
arr[0] arr[1] arr[2] arr[3] arr[4]
==arr== ===========================
100 10 20 30 40 50
====== |====|====|====|====|==========
100 104 108 112 116
100+0
100+1 100+2 100+3 100+4
==> 배열 선언 방식
===========
데이터형[] 배열명;
===== 변수의 명칭법
데이터형 배열명[];
예)
메모리 공간(기억공간) 미리 만든 다음에 나중에 값을 채우는 방법
영화제목을 10개 모아서 관리
String[] title = new String[10]; => null
10명의 학생의 학점을 관리
char[] hakjum = new char[10]; => '\0'
10명의 학생의 총점을 관리
int[] total = new int[10];
=> new를 사용하면 메모리 공간이 생성 => 0값으로 초기화 된다
double => 0.0
float => 0.0f
long => 0L
예) 직접 값을 주입하는 방법
int[] arr={10, 20, 30, 40, 50}
int a;
a=10
int a=10;
=> 주의점
1) 배열의 크기를 초과하면 error : ArrayIndexOutOfBoundsException
=============
n개 ==> 0~n-1 ==> 만약에 갯수를 모르는 경우 : length
2) 제어문을 이용시에는 -> 주로 for문을 이용해서 처리
===========> for에서 사용하는 초기값 => 0
// 5명에 대한 점수 => 저장, 총점, 평균
int a = 80;
int b = 90;
int c = 75;
int d = 90;
int e = 85;
int total = a+b+c+d+e;
double avg = total/5.0;
System.out.println("총점:"+total);
System.out.println("평균:"+avg);
//배열
int[] score={80, 90, 75, 90, 85};
// 80 => score[0]
// 90 => score[1]
int total2 = 0;
double avg2 = 0.0;
for (int i = 0; i<score.length; i++) {
total2+=score[i];
}
avg2=total2/5.0;
System.out.println("총점:"+total2);
System.out.println("평균:"+avg2);
2. 배열 선언
데이터형[] 배열명;
=> 배열 초기화 (메모리안에 값을 주입)
예) int[] arr={10, 20, 30, 40, 50}; // 선언과 동시에 초기값
int[] arr=new int[5]; // 메모리 공간만 제작 => 나중에 값을 채운다
int[] arr; // 선언
arr[0] = 10;
arr[1] = 20;
....
=======================
활용 => 제어문 (for, while)
for -> 제어
for-each -> 출력 담당
// for문
// 출력
String[] names = {"홍길동", "박문수", "이순신", "춘향이", "심청이"};
// length => 배열에 저장된 갯수
for(int i=0; i<names.length; i++) {
// names[1]="";
// 데이터값을 변경이 가능
System.out.println(names[i]); // names[0]~names[4]
}
// for-each
// 데이터 자체를 가지고 오므로 변경이 불가능 -> 화면에 출력만 담당
for(String name:names) {
System.out.println(name);
}
3. 배열의 값 주입
========
1) 직접 주입
2) 사용자가 입력한 값 -> Scanner
3) 난수이용
==============
4) File읽기
5) Web에서 읽어서 주입
6) 오라클
==============
배열 ==> 0번부터 입력
==> 맨뒤부터 입력하는 방식
import java.util.Arrays;
public class 배열의값주입 {
public static void main(String[] args) {
int[] arr={30, 20, 50, 10, 40}; // => 10 20 30 40 50
Arrays.sort(arr); //올림차순만 가능. (최신 내림차순)
for(int a:arr){
System.out.print(a+" ");
}
}
}
// 3명의 학생 => 성적관리 => 국어, 영어, 수학 => 1.총점, 2.평균, 3.학점, 4.등수
import java.util.*;
public class 배열의값주입 {
public static void main(String[] args) {
int[] kor = new int[3]; //kor1, kor2, kor3
int[] eng = new int[3];
int[] math = new int[3];
int[] total = new int[3];
double[] avg = new double[3];
char[] hakjum = new char[3];
int[] rank = new int[3];
// Scanner가 for문안에 있으면 계속 안에서 메모리 누적됨
// new => 새로운 공간이 생성 =>
Scanner scan = new Scanner(System.in);
for(int i=0; i<3; i++) {
System.out.printf("%d번째 국어점수 입력:",i+1);
kor[i]=scan.nextInt();
System.out.printf("%d번째 영어점수 입력:",i+1);
eng[i]=scan.nextInt();
System.out.printf("%d번째 수학점수 입력:",i+1);
math[i]=scan.nextInt();
total[i] = kor[i] + eng[i] + math[i]; //math[0] -> 일반변수
avg[i] = total[i]/3.0;
}
// 학점 계산
for(int i=0; i<3; i++) {
char c = 'A';
switch(total[i]/30) {
case 10:
case 9:
c = 'A';
break;
case 8:
c = 'B';
break;
case 7:
c = 'C';
break;
case 6:
c = 'D';
break;
default:
c = 'F';
break;
}
hakjum[i]=c;
}
/*
* %-5d
* 80000 -> 왼쪽
* %5d
* 00080 -> 오른쪽
* %7d
* 0000240
*
* 한글 => 1글자 (2byte)
* 000000
* ==
* 국
*/
// 등수 계산
/*
* 240 230 250 rank=1
* rank=1+1+1 => 3
* rank=1+1 => 2
*
* 240 230 250
*
*/
for(int i=0; i<3; i++) {
rank[i]=1;
for(int j=0; j<3; j++) {
if(total[i]<total[j]) {
rank[i]++;
}
}
}
// 등록된 점수를 출력
System.out.printf("%-5s%-5s%-5s%-6s%-6s%-5s%-5s\n",
"국어","영어","수학","총점","평균","학점","등수");
for(int i=0; i<3; i++) {
System.out.printf("%-5d%-5d%-5d%-7d%-7.2f%-5c%-5d\n",
kor[i],eng[i],math[i],total[i],avg[i],hakjum[i],rank[i]);
}
}
}
4. 연습문제
1)최대최소값
임의의 정수 -> 5개를 저장한후에
최대값, 최소값 구하는 프로그램
public class 최대최소값 {
public static void main(String[] args) {
// 정수 5개를 저장하는 공간을 만든다 -> 배열
int[] arr = new int[5]; // 0 0 0 0 0
// 5개의 값을 변경
for(int i=0; i<5; i++) {
// 시작 = 0 .... <
arr[i] = (int)(Math.random()*100)+1;
// 2 1 3
// 0.0~99.0 -> 정수변환 => 0~99 => 1~100
}
// 출력
// int i => index가 아니라 => 실제 저장된 값을 대입
for(int i:arr) {
System.out.print(i+" ");
}
System.out.println("\n===== 결과 =====");
// 최소값 저장 공간. 가장 큰 값으로 초기화. 0부터 시작하면 더 작은 값 x
// int min=100;
// 최대값을 저장 공간. 가장 작은 값으로 초기화. 100부터 시작하면 더 큰 값 x
// int max=0;
int min = arr[0];
int max = arr[0];
// 최소값 & 최대값
for (int i=0; i<5; i++) {
if(min>arr[i]) {
min=arr[i];
}
else if(max<arr[i]) {
max=arr[i];
}
}
System.out.println("최소값:"+min);
System.out.println("최대값:"+max);
}
}
2) 난수발생 (로또)
Math.random() => 임의로 컴퓨터 추출 (난수)
===============
0.0 ~ 0.99
=> 로또 1~45 => (int)(Math.random*45)+1;
// 로또 번호 저장하는 공간 ==> 6
int [] lotto = new int[6];
for (int i=0; i<6; i++) {
lotto[i] = (int)(Math.random()*45)+1;
}
//출력
for(int i:lotto) { // i는 index가 아닌 lotto 배열에서 값을 하나 씩 가져옴
System.out.print(i+" ");
}
3) 정렬하기
// DESC(내림차순) 50 40 30 20 10
// ASC(올림차순) 10 20 30 40 50
(1) 선택정렬 ==> 왼쪽 고정 ==> 맨마지막까지 검색
20 10 40 50 30
==
==
10 20
== ==
10 40
== ==
10 50
== ==
10 30
============= 1 round 4바퀴
10 20 40 50 30
== ==
20 40
== ==
20 50
== ==
20 30
============== 2 round 3바퀴
10 20 40 50 30
== ==
40 50
== ==
30 40
============== 3 round 2바퀴
10 20 30 50 40
== ==
40 50
============== 4 round 1바퀴
10 20 30 40 50
===> n ==> n-1
/*
* 20 30 10 40 50
* ==
* i=0 j=1
* 20 30 10 40 50
* ==
* i=1 j=2
*/
int[] arr={30,10,40,20,50}; // ASC => DESC
System.out.println("정렬전:");
for (int i:arr) {
System.out.print(i+" ");
}
System.out.println("\n오름차순정렬후:");
// 선택 정렬
/*int a = 10;
*int b = 20;
* ==> a = 20, b = 10
* a = b; ==> a=20
* b = a; ==> b=20
*
* int temp = a;
* a=b;
* ==
* 20 => a=20;
* b=temp;
* =====
* 10 => b=10;
*/
for (int i=0; i<arr.length-1; i++) {
for (int j=i+1; j<arr.length; j++) {
if(arr[i]>arr[j]) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
for (int i:arr) {
System.out.print(i+" ");
}
System.out.println("\n내림차순정렬후:");
for (int i=0; i<arr.length-1; i++) {
for (int j=i+1; j<arr.length; j++) {
if(arr[i]<arr[j]) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
for (int i:arr) {
System.out.print(i+" ");
}
(2) 버블정렬
20 10 40 50 30
== ==
10 20
== ==
20 40
== ==
40 50
== ==
30 50
============= 1
10 20 40 30 50
== ==
10 20
== ==
20 40
== ==
30 40
============= 2
10 20 30 40 50
== ==
10 20
== ==
20 30
============= 3
10 20 30 40 50
== ==
10 20
============== 4
10 20 30 40 50
int[] arr = {30,20,40,50,10};
/*
* i j
* 0. 4 i+j=4 -> j=4-i
* => arr.length-1-i
* 1. 3
* 2. 2
* 3. 1
*
* => 추천
*/
System.out.println("정렬전:");
for(int i : arr) {
System.out.print(i+" ");
}
System.out.println("\n정렬후:");
//정렬 => bubble sort
for(int i=0; i<arr.length-1; i++) {
for(int j=0; j<arr.length-1-i; j++) {
if(arr[j]>arr[j+1]) {
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int i:arr) {
System.out.print(i+" ");
}
4) 빈도수계산
int[] arr = new int[10]; // 1~9
int[] count = new int[10];
// 초기값
for(int i=0; i<arr.length; i++) {
arr[i]=(int)(Math.random()*10);
}
// 출력 => 빈도수 계산할 데이터
for(int i:arr) {
System.out.print(i);
}
System.out.println("\n===== 결과 =====");
for(int i = 0; i<arr.length; i++) {
count[arr[i]]++;
}
// count[0] ~ count[9] ==> 0
// count[6]=1 count[7]=1 count[8]=1
// count[6]=1 -> count[6]=2
//출력
for(int i = 0; i<arr.length; i++) {
if(count[i]!=0) { // 갯수가 0이면 제외함
System.out.println(i+"갯수"+count[i]);
}
}
5. 문자열
//String[] title = new String[1900];
//String[] actor = new String[1900];
// String 에서 제공하는 기능 (메소드)
String[] title={
"#살아있다",
"결백",
"사라진 시간",
"침입자",
"온워드: 단 하루의 기적",
"야구소녀",
"반도",
"엔딩스 비기닝스",
"배트맨 비긴즈",
"위대한 쇼맨"
};
String[] actor={
"유아인(오준우), 박신혜(김유빈)",
"신혜선(정인), 배종옥(화자), 허준호(추시장)",
"조진웅(박형구), 배수빈(김수혁), 정해균(정해균)",
"송지효(유진), 김무열(서진)",
"톰 홀랜드(이안 라이트풋 목소리), 크리스 프랫",
"이주영(주수인), 이준혁(최진태)",
"강동원, 이정현",
"쉐일린 우들리(다프네), 제이미 도넌(잭)",
"크리스찬 베일(브루스 웨인/배트맨), 마이클 케인(알프레드)",
"휴 잭맨(P.T. 바넘), 잭 에프론(필립 칼라일)"
};
System.out.println("===== 영화 인기 Top 10 =====");
for (int i = 0; i<title.length; i++) {
System.out.println("영화명:"+title[i]);
System.out.println("출연:"+actor[i]);
System.out.println("========================");
}
'Back-end > Java' 카테고리의 다른 글
JAVA의 정석 14일차 - 배열용도2 (0) | 2020.07.02 |
---|---|
JAVA의 정석 13일차 - 배열용도 (0) | 2020.07.01 |
JAVA의 정석 - 변수, 데이터, 연산자, 제어문 복습 (0) | 2020.06.29 |
JAVA의 정석 11일차 - do~while, break, continue, 중첩 for문 (0) | 2020.06.29 |
JAVA의 정석 10일차 - 반복문 while (0) | 2020.06.26 |