일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 오라클
- 자스코테
- 리액트
- 자바의정석
- 정보처리기사실기
- 정보처리기사정리
- 자바스크립트
- 이안의평일코딩
- 정보처리기사
- 국비IT
- 스프링
- 정보처리기사요약
- 평일코딩
- 자바스크립트 코딩테스트
- ReactNative
- VUE
- typescript
- 리액트네이티브
- php
- 국비코딩
- Java의정석
- 코딩테스트
- 정보처리기사실기정리
- javascript
- react
- 타입스크립트
- 정보처리기사실기요약
- Oracle
- spring
- CSS
- Today
- Total
이안의 평일코딩
JAVA의 정석 14일차 - 배열용도2 본문
2020.07.02(목)
1. 배열
-> 같은 타입을 여러개 묶어서 관리
-> 배열생성 -> 연속적인 메모리 구조 (인덱스)
-> 일차원 배열 [], [][], [][][]
==
1) 문자열 배열
String[] arr ====== String arr[]
=== 배열명
2) 정수 배열
int[] arr ====== int arr[]
3) 논리 배열
boolean[] arr ===== boolean arr[]
-> 선언 방식
문자열 10개
========
String[] arr;
========
정수 10개
========
int[] arr;
-> 초기값
1) String[] arr;
arr = new String[10];
2) int[] arr ==> 선언과 동시에 초기값
*** int[] arr = new int[10]
arr = new int[10];
int[] arr = {10, 20, 30, 40, 50} ==> 등록된 갯수 (5개 배정)
===> 선언시에 메모리 저장 갯수를 등록 => 고정적이다
-> 인덱스 사용
예)
int[] arr = {10, 20, 30, 40, 50}
arr
===
배열의 첫번째 주소
100
===
index번호는 0부터 시작
index arr[0] arr[1] arr[2] arr[3] arr[4]
=======================
10 20 30 40 50
|====|=====|====|====|====
100 104 108 112 116
int, String 100 -> 104 (4byte씩)
arr[0] ==> 일반변수와 동일 역할 수행
arr[0]=100 => 값 변경이 가능 하다
-> 출력 => 번호 (0부터 시작~) -> 연속적으로 인덱스번호
-> for, while문을 이용해서 출력
=== 횟수가 지정된 상태
= for
1) 일반 for문 =====> 인덱스를 이용한다(제어)
==> 값을 변경, 값을 삭제
==> Back-End
2) 향상된 for문 (for-each) ===> 실제 저장된 값(출력용)
(실제 저장된 데이터형 : 배열명) for(int i:arr)
==> 값 변경이 불가능
==> Front-End
1) 정수 5개 저장 => 평균
(1) 정수 5개 저장하는 메모리 공간을 설정 (연속적으로 사용)
int[] arr={30, 50, 70, 90, 10};
int total = arr[0]+arr[1]+arr[2]+arr[3]+arr[4];
double avg = total/5.0;
System.out.println("저장된 정수의 평균:"+avg);
(2) for 반복문 활용
int[] arr={30, 50, 70, 90, 10};
int total=0;
for(int i=0; i<5; i++) { //i라는 변수는 자동 삭제
total+=arr[i]; //arr[0]+arr[1]+arr[2]+arr[3]+arr[4];
}
System.out.println("저장된 정수의 평균:"+total/5.0);
(3) for-each 출력
int[] arr={30, 50, 70, 90, 10};
total=0; // 0값으로 초기화
for(int i:arr) {
total+=i;
}
System.out.println("저장된 정수의 평균:"+total/5.0);
2) 선언 연습
//10개의 문자를 가지는 배열 c를 생성하는 코드를 한 줄로 쓰라
char[] c = new char[10];
//0에서 5까지 정수 값으로 초기화된 정수 배열 n을 선언하라
int[] n = {0, 1, 2, 3, 4, 5};
//일~토로 초기화된 배열 day를 선언하라
char[] day = {'일', '월', '화', '수', '목', '금', '토'};
//4개의 논리 값을 가진 배열 bool을 선언하고 true, false, false, true로 선언하라
boolean[] bool = {true, false, false, true};
3) 정수를 10개 저장하는 배열을 만들고 1에서 10까지 범위를 정수를 랜덤하게 생성하여 배열에 저장하라.
그리고 배열에 든 숫자들과 평균을 출력하라.
int[] arr = new int[10]; // 10개의 메모리 공간 생성
for(int i=0; i<10; i++) {
arr[i]=(int)(Math.random()*10)+1; // 필요한 값 설정
}
int total=0;
for(int i:arr) {
total+=i;
}
System.out.println("평균"+total/10.0);
4) String[] course = {"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"};
int jumsu[] = {95, 88, 76, 62, 55};
과목 이름을 입력받아 점수를 출력하는 프로그램 작성. "그만"을 입력받으면 종료.
* 문자열을 비교하기 위해서는 String 클래스의 equals()메소드를 이용해야 한다.
import java.util.*;
public class 연습 {
public static void main(String[] args) {
String[] course = {"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"};
int jumsu[] = {95, 88, 76, 62, 55};
Scanner scan = new Scanner(System.in);
boolean bCheck = false;
while(true) {
bCheck=false;
System.out.print("과목 이름>>");
String subject = scan.nextLine();
if(subject.equals("그만")) {
break;
}
for(int i=0; i<course.length; i++) {
if(subject.equals(course[i])) {
bCheck=true;
System.out.println(jumsu[i]);
}
}
if(bCheck==false){
System.out.println("없는 과목입니다.");
}
}
}
}
2. String : 문자열을 저장할 수 있는 공간
일반변수의 역할
클래스의 역할 => 기능(메소드)
주요 기능
= 문자열 비교 : equals()
= 포함 문자 : contains()
= 문자열중에 한개 문자 : charAt()
= 저장된 문자의 갯수 : length()
= 문자 자르기 : substring()
= 찾는 문자의 위치 : indexOf(), lastIndexOf()
= 모든 데이터형을 문자열로 변환 : valueOf()
= 공백문자 제거 : trim() -> 좌우만 제거
" Hello Java " => "Hello Java"
= 문자열 => char[] => toCharArray()
= startsWith(), endsWith() => 검색기
===============================
Wrapper Class
=========
기본형 데이터 (정수, 실수, 문자, 논리)
int => Integer => "2"=> 2 => parseInt("2") => 2
"10" + "100" => 110
============== 10100
double = Double Boolean, Float, Byte...
1) substring : 필요한 문자만 추출 => 형태소 분석(명사, 부사, 형용사)
substring(int start)
substring(int start, int end)
"Hello Java" => String => char[]
====
0123456789
==
substring(6)
substring(int start시작점, int end끝점+1)
String msg="0123456789";
System.out.println(msg.substring(5)); // => 56789
System.out.println(msg.substring(3,6)); // => 345
String msg="100-010";
System.out.println(msg.substring(0,3)); // (012) 마지막제외 => 100
System.out.println(msg.substring(4,7)); // (456) 마지막제외 => 010
System.out.println(msg.substring(4)); // 010 하나만 넣으면 시작점에서 끝까지 출력
2) indexOf(), lastIndexOf() -> 문자의 위치 찾기 -> 정수
//문자 자르기 => substring 자를위치 +1 주의
String msg="abcde.fghijkl.java";
System.out.println(msg.indexOf(".")); //5
System.out.println(msg.lastIndexOf(".")); //13
System.out.println("확장자:"+msg.substring(msg.lastIndexOf(".")+1)); //확장자:java
3) split() : => String[]
문자를 구분해서 자르는 역할
String msg = "밑반찬,메인반찬,국/탕,찌개,디저트,면/만두,밥,죽/떡,퓨전,김치/젓갈,장류양념,소스/잼,양식,샐러드,스프,빵,과자,차/음료,"+"술,기타";
String[] arr = msg.split(","); // 일반문자열 => 배열로 변경
// 문자일때만 사용이 가능 msg.sp => regex
// ?였으면 //? 로 split해야함. 구분문자 사용시 // 붙여야함.
for(String s : arr) {
System.out.println(s);
}
/*
* /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
* [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
* 맛있[가-힣]+
* 짜[가-힣]+
*/
4) valueOf() => 모든 데이터형을 문자열(String)로 변환
valueOf(10) => "10"
valueOf(true) => "true"
char[] c = {'H', 'e', 'l'. 'l', 'o'};
valueOf(c) ==> "Hello"
char[] c = {'H', 'e', 'l', 'l', 'o'};
String msg = String.valueOf(c); // char[] ==> String
System.out.println(msg);
String ss = "Hello Java!!";
char[] cc = ss.toCharArray(); // String ==> char[]
int a = 10;
int b = 20;
System.out.println(String.valueOf(a)+String.valueOf(b));
// 1020 => "10"+"20" => 1020
3. 이차원배열
=======
[][]
* 형식
1) 데이터형[][] 배열명; => 권장 사항
2) 데이터형 배열명[][];
3) 데이터형[] 배열명[]
=> 행/열
데이터형[행][열]
[3][4]
arr[0][0] | arr[0][1] | arr[0][2] | arr[0][3] |
arr[1][0] | arr[1][1] | arr[1][2] | arr[0][3] |
arr[2][0] | arr[2][1] | arr[2][2] | arr[0][3] |
* 초기화
예) int[][] arr = {{1,2,3},{4,5,6},{7,8,9}}; =>3행, 3열
0 | 1 | 2 | |
0 | 1 arr[0][0] |
2 arr[0][1] |
3 arr[0][2] |
1 | 4 arr[1][0] |
5 arr[1][1] |
6 arr[1][2] |
2 | 7 arr[2][0] |
8 arr[2][1] |
9 arr[2][2] |
=> 2중 for : 퍼즐게임, 지뢰찾기, 빙고게임
초기값 1~25
int[][] arr = new int[5][5]; //전체 => 0으로 초기화
int k=1; //1~25
// 초기값
for(int i=0; i<5; i++) { //행
for(int j=0; j<5; j++) { //열
arr[i][j]=k; // [0][0] ~~ [0][4]
k++;
}
}
// 출력
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
System.out.printf("arr[%d][%d]=%d\t",i,j,arr[i][j]);
}
System.out.println();
}
1) 모래시계 출력
/*
* ======================
* 1 13
* ======================
* 2 6 10 14
* ======================
* 3 7 9 11 15
* ======================
* 4 8 12 16
* ======================
* 5 17
* ======================
*/
public class 모래시계1 {
public static void main(String[] args) {
// 5행 5열 배열
int[][] arr=new int[5][5];
// 입력
int k=1;
for(int i=0;i<3;i++) {
for(int j=i;j<=4-i;j++) {
arr[j][i]=k;
k++;
}
}
for(int i=3;i<=4;i++) {
for(int j=4-i;j<=i;j++) {
arr[j][i]=k;
k++;
}
}
// 출력
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
if(arr[i][j]==0)
System.out.print("\t");
else
System.out.print(arr[i][j]+"\t");
}
System.out.println("\n");
}
}
}
2) 모래시계 출력2
/*
* ======================
* 1 2 3 4 5
* ======================
* 6 7 8
* ======================
* 9
* ======================
* 10 11 12
* ======================
* 13 14 15 16 17
* ======================
* j_s j_e
* i=0 0 4
* i=1 1 3
* i=2 2 2
*
* i와 j_s ==> j_s=i
* i와 j_e ==> i+j_e=4 ==> j_e=4-i
* for(int i=0;i<3;i++)
* {
* for(int j=i;j<=4-i;j++)
* {
* }
* }
* ===============
* j_s j_e
* i=3 1 3
* i=4 0 4
*
* i와 j_s ==> i+j_s=4 ==> j_s=4-i
* i와 j_e ==> i=j_e ==> j_e=i
*/
public class 모래시계2 {
public static void main(String[] args) {
// 5행 5열 배열
int[][] arr=new int[5][5];
// 입력
int k=1;
for(int i=0;i<3;i++) {
for(int j=i;j<=4-i;j++) {
arr[i][j]=k; //i와 j만 바꿔주면 1번과 같음
k++;
}
}
for(int i=3;i<=4;i++) {
for(int j=4-i;j<=i;j++) {
arr[i][j]=k; //i와 j만 바꿔주면 1번과 같음
k++;
}
}
// 출력
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
if(arr[i][j]==0)
System.out.print("\t");
else
System.out.print(arr[i][j]+"\t");
}
System.out.println("\n");
}
}
}
3) 마름모
/*
* j 0 1 2 3 4
* i ======================
* 0 1
* ======================
* 1 2 3 4
* ======================
* 2 5 6 7 8 9
* ======================
* 3 10 11 12
* ======================
* 4 13
* ======================
* 시작 끝 => for(int j=2-i; j<=i+2; j++)
* i=0 2 2
* i=1 1 3
* i=2 0 4
* => i+j=2 ==> j=2-i i+2=j => j=i+2
* i=3 1 3 for(int j=i-2; j<=6-i; j++)
* i=4 2 2
*
* j+2=i ==> j=i-2 i+j=6 ==> j=6-i
*/
public class 마름모 {
public static void main(String[] args) {
int[][] arr=new int[5][5];
int k=1;
for(int i=0;i<3;i++) {
for(int j=2-i;j<=i+2;j++) {
arr[i][j]=k;
k++;
}
}
for(int i=3;i<=4;i++) {
for(int j=i-2;j<=6-i;j++) {
arr[i][j]=k;
k++;
}
}
// 출력
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
if(arr[i][j]==0)
System.out.print("\t");
else
System.out.print(arr[i][j]+"\t");
}
System.out.println("\n");
}
}
}
4. 자바배열정리
프로그램
= 데이터 저장
변수 ==> 배열, 클래스
= 명령문
====> 명령문 묶기 ==> 메소드
=======================
객체 지향 프로그램 (Web)
================================
데이터 저장
한개 ===> 변수/상수
여러개 ==> 배열
데이터 처리(사용자의 요청)
제어문, 연산자
결과값 제시 ==> 도스, 윈도우, 브라우저, 핸드폰
==== 테스트
================================ 클래스
==> 테스트, 사용자가 입력값이 잘못되면 => 쉽게 종료 (견고한 프로그램)
=> 1) if
2) 예외처리
* 활용) 달력만들기
// 년 월 => 입력값
import java.util.*;
public class 달력만들기 {
public static void main(String[] args) {
int year=0,month=0;
Scanner scan = new Scanner(System.in);
// 입력
System.out.print("년도 입력:");
year=scan.nextInt();
System.out.print("월 입력:");
month=scan.nextInt();
// 출력
String[] strWeek = {"일", "월", "화", "수", "목", "금", "토"};
System.out.println(year+"년도 "+month+"월");
for(String week:strWeek) {
System.out.print(week+"\t");
}
// 요일 구하기
// 전년도(year-1)까지의 총날 수 1년~2019.12.31
int total = (year-1)*365 + (year-1)/4 - (year-1)/100 + (year-1)/400;
// 전달 까지의 합 2020.1.1 ~ 2020.6.30 (+1)
int[] lastDay = {31,28,31,30,31,30,31,31,30,31,30,31};
/*
* if(month==2)
* total+=31
* if(month==3)
* total+=31+28
*/
if((year%4==0 && year%100!=0)||(year%400==0)) // 윤년 -> 2월 29일
lastDay[1] = 29;
else
lastDay[1] = 28;
for(int i=0; i<month-1; i++) {
total+=lastDay[i];
}
// 1일자의 요일
total++;
int week = total%7;
// 달력 출력
System.out.println();
for(int i=1; i<=lastDay[month-1]; i++) { // 1월이 index 0이기 때문에 -1
if(i==1) {
for(int j=0; j<week; j++) {
System.out.print("\t");
}
}
System.out.printf("%2d\t",i); //%2d로 글자 정렬
week++;
if(week>6) {
week=0;
System.out.println();
}
}
}
}
'Back-end > Java' 카테고리의 다른 글
JAVA의 정석 16일차 - 메소드 (0) | 2020.07.06 |
---|---|
JAVA의 정석 15일차 - 변수, 연산자, 제어문, 배열, 문자열 복습 (0) | 2020.07.03 |
JAVA의 정석 13일차 - 배열용도 (0) | 2020.07.01 |
JAVA의 정석 12일차 - 배열 (10) | 2020.06.30 |
JAVA의 정석 - 변수, 데이터, 연산자, 제어문 복습 (0) | 2020.06.29 |