만년달력

1. 1년 1월 1일부터 전년도 12월 31일까지의 총 날짜수 구함.
int total = (year-1)*365 + ((year-1)/4 - (year-1)/100 + (year-1)/400);


2. 해당년도 1월 1일부터 해당년도 해당월 1일까지의 총 날짜수 구함.
int[] m = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for (int a=0; a<month-1; a++) {
total += m[a];
}
//해당월 1일 때문에 +1
total++;
//올해가 윤년이면서 2월 이상인 경우 +1
if (month>=3 && (year%4==0 && year%100!=0 || year%400==0)) {
total++;
}


3. 해당년도 해당월의 첫 날(1일)의 요일(일, 월, 화, 수, 목, 금, 토) 구함.
String[] d = {"일", "월", "화", "수", "목", "금", "토"};
int days = total % 7;
System.out.printf("%s요일 %n", d[days]);


4. 콘솔버전에서 날짜를 달력 형태로 출력.






난수 발생

1. 0 부터 1 사이의 무작위 숫자를 난수라고 함.

2. Random 클래스의 nextInt() 메소드를 이용하면 쉽게 난수를 얻을 수 있다.

import java.util.*;
Random rd = new Random();

int val = rd.nextInt(100); //0 보다 크거나 같고 100 보다는 작은 난수

예를 들어, 로또번호는 1~45까지만 존재. rd.nextInt(45) + 1 라고 계산함.
난수를 여러개 발생시키고, 배열에 저장한 다음, 난수 출력. 1~45 범위의 숫자 6개.






문제) 여러개의 난수를 발생시키고, 난수들 중에서 가장 큰 값과 가장 작은 값을 별도 출력. 난수 허용 범위는 1~100. 배열 이용.
실행 예)
난수 갯수(2~20)?5
난수 결과 : 55 9 12 6 90 
가장 큰 값 : 90
가장 작은 값 : 6






중복되지 않은 난수 얻기 (1~100)_방법1
실행 예)
난수 갯수(2~20)? 5
난수 결과 : 3 4 5 10 12


//중복되는 경우

int size=5;
int count=0;
int[] arr = new int[size];
Random rd = new Random();
while(true) { //무한실행 (특정 갯수의 난수를 얻을때까지 반복)
int random = rd.nextInt(100) + 1;
arr[count] = random;
count++;
if (count == size) {
break;
}
}


//중복되지 않은 경우

int size=5;
int count=0;
int[] arr = new int[size];
Random rd = new Random();

while(true) { //무한실행 (특정 갯수의 난수를 얻을때까지 반복)
int random = 0;
boolean check = false;


do {
check = false;
random = rd.nextInt(100) + 1;
for (int a=0; a<count; a++) {
if (arr[a] == random) {
check = true;
}
}
}while(check);  //무한실행 (중복되지 않는 경우만 배열에 저장)


arr[count] = random;
count++;
if (count == size) {
break;
}
}






중복되지 않은 난수 얻기 (1~100)_방법2
실행 예)
난수 갯수(2~20)? 5
난수 결과 : 3 4 5 10 12






문제) 로또 번호를 원하는 장수 만큼 출력.
로또 번호는 1~45 범위의 숫자를 중복되지 않은 상태에서 6개가 되면 1장에 해당.
실행 예)
로또 장수(1~20)?3
번호1 :  1 12 13 34 35 36
번호2 : 12 20 25 30 39 45
번호3 :  1  4  9 20 30 42






문제) 가위,바위,보 게임. 
1~3 사이의 난수가 발생하면 가위, 바위, 보라고 생각하고 사용자가 내는 가위, 바위, 보와 비교해서 승패 결정.
실행 예)
사용자 선택(1:가위, 2:바위, 3:보, -1:종료)?1
사용자:가위, 컴퓨터:바위
결과 : 컴퓨터 승!

사용자 선택(1:가위, 2:바위, 3:보, -1:종료)?2
사용자:바위, 컴퓨터:바위
결과 : 비겼습니다.

사용자 선택(1:가위, 2:바위, 3:보, -1:종료)?-1
사용자 승:0회, 컴퓨터 승:1회





객체 지향 프로그래밍

-> 프로그램의 대상이 되는 데이터를 객체로 취급하는 프로그램 기법.


클래스 
- 객체에 대한 원본 정의서. 
- 데이터형을 정의하는 코드 작성 필요.
- 사용자가 직접 데이터형에 대한 정의를 추가해야 한다. 
- 멤버변수(상태), 메소드(행위)

예를 들어서, 
int 자료형은 상태값은 있지만 행위는 없다.
Integer 클래스는 상태값만 있는게 아니라 행위도 가능하다.

나무(상태) -> 조각가(클래스) -> 조각(행위) -> 작품(결과)

예를 들어, 프린터 클래스를 만든다면
class 프린터 {
//멤버변수
int 잉크 = 100;
int 종이 = 0;

//메소드
void 인쇄(대상) {
if (잉크>0 && 종이>0) {
//대상 출력
잉크--;
종이--;
} else {
//잉크 또는 종이 부족 메시지 출력
}
}
void 종이공급(매수) {
종이 += 매수;
}
}



클래스 정의 기본 형식

1. 클래스명은 첫 글자는 대문자로 표기

2. class 클래스명 { .... }

3. 저장시 물리적 파일명은 클래스명.java

4. public class 클래스명 {   ..    } 에서 public은 접근지정자. 

외부에서 클래스를 참조할 때 접근 가능한 지역 표시.

5. 멤버변수와 메소드는 사용자 정의.

6. 멤버변수와 메소드도 접근 지정자를 별도 지정. 멤버변수는 private, 메소드 public 주로 사용.


멤버변수 정의 예.  private int a = 0;

메소드 정의 예. public void method() { ...  }




산술연산 담당 클래스 연습
-> Calc
-> 숫자 두 개에 대한 덧셈 결과 리턴
실행 예)
숫자1?10
숫자2?20
입력된 숫자 : 10, 20
결과 : 30





산술연산 담당 클래스2 
-> 기존의 Calc 클래스에 메소드 추가를 이용해서 수정 가능.
-> 임의의 정수 두 개를 받아서 n부터 m까지의 합을 계산해서 출력.
실행 예)
숫자1?1
숫자2?10
입력된 숫자: 1, 10
연산 결과: 55



WRITTEN BY
빨강꼬마

,

정렬(Sort)

1. 배열 요소에 일정한 순서를 부여하는 것.

임의의 숫자가 여러개 존재하는 경우 크기순으로 다시 배열한다.
원본 배열 int[] arr = {4, 2, 7, 9, 1, 3, 5, 6, 8, 0};
정렬후 결과 int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};


2. 정렬 알고리즘 - 버블, 선택, 삽입, 쉘, 퀵

1회전 ------------------------------------------------

- 항목1과 항목2를 비교 -> 4, 2
- 작은 값에 항목1에 배치. 큰 값을 항목2에 배치 -> 2, 4
- 항목2와 항목3을 비교 -> 4, 7
- 작은 값에 항목2에 배치. 큰 값을 항목3에 배치 -> 4, 7
- 위와 같은 방법으로 항목 두 개씩 비교 및 바꿔치기를 반복 실행.- 가장 큰 값이 가장 끝에 배치된다. -> 9


2회전 ------------------------------------------------

- 가장 끝에 있는 값을 제외하고 나머지에 대해서 1회전과 같은 방법 사용.
- 끝에서 두 번째에 두번째로 큰 값이 배치된다. -> 8


3회전 ------------------------------------------------

- 2회전 상황을 반복한다.
- 끝에서 세 번째에 세번째로 큰 값이 배치된다. -> 7


....

9회전 ------------------------------------------------

- 마지막 숫자 2개를 정렬. -> 0, 1

=> 정렬 완료.(회전수는 (n - 1)회)







문제) 외부에서 임의의 여러개의 숫자를 입력받고 정렬해서 출력.
실행 예)
갯수지정(2~10)?5
숫자 입력(1)?
숫자 입력(2)?
숫자 입력(3)?
숫자 입력(4)?
숫자 입력(5)?
원본:
정렬:






문제)여러명의 성적을 입력 받고, 점수가 높은 순으로 등수 부여해서 출력.
배열, 정렬 알고리즘 이용.
실행 예)
인원수(2~10)?5
이름 점수(1)?kim 80
이름 점수(2)?park 90
이름 점수(3)?choi 100
이름 점수(4)?hong 70
이름 점수(5)?kang 60
-----------------------
1등 choi 100
2등 park 90
3등 kim 80
4등 hong 70
5등 kang 60





문제)여러명의 성적을 입력 받고, 점수가 높은 순으로 등수 부여해서 출력.
배열, 석차 알고리즘 이용.
실행 예)
인원수(2~10)?5
이름 점수(1)?kim 80
이름 점수(2)?park 90
이름 점수(3)?choi 100
이름 점수(4)?hong 70
이름 점수(5)?kang 60
-----------------------
kim 80 3등
park 90 2등
choi 100 1등
hong 70 4등
kang 60 5등
-----------------------






배열의 배열 (다차원 배열)

1. 1차원 배열 여러개를 조합시켜서 사용하는 배열.
2. 선언
자료형[][] 변수 = new 자료형[크기1][크기2]; 
자료형[인덱스1][인덱스2] = 값;
자료형[][] 변수 = {{값1, 값2, ...}, {값, 값, ...}, {값, 값, ...} ,...};

예를 들어,
int[][] arr = new int[2][3];
arr[0][0] = 0;
arr[0][1] = 0;
arr[0][2] = 0;
arr[1][0] = 0;
arr[1][1] = 0;
arr[1][2] = 0;

for (int a=0; a<arr.length; a++) {  //arr.length는 2
for (int b=0; b<arr[a].length; b++){ //arr[a].length는 3
arr[a][b] = 0;
}
}

for (int a=0; a<arr.length; a++) {  //arr.length는 2
for (int b=0; b<arr[a].length; b++){ //arr[a].length는 3
System.out.printf("%d ", arr[a][b]); // 배열의 배열
}
System.out.println();
}


문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 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





문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
10  9  8  7  6
 5  4  3  2  1





문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 1  6 11 16 21
 2  7 12 17 22
 3  8 13 18 23
 4  9 14 19 24
 5 10 15 20 25





문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 1  2  3  4  5 
 2  3  4  5  6
 3  4  5  6  7
 4  5  6  7  8
 5  6  7  8  9







문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 1  2  3  4  5
 5  1  2  3  4
 4  5  1  2  3
 3  4  5  1  2
 2  3  4  5  1





문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 1  2  3  4  5
10  9  8  7  6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25





문제) 마방진(가로 세로 및 대각선에 있는 숫자들의 합이 같도록 배열한 것)






만년달력

1. 1년 1월 1일부터 전년도 12월 31일까지의 총 날짜수 구함.
int total = (year-1)*365 + ((year-1)/4 - (year-1)/100 + (year-1)/400));


2. 해당년도 1월 1일부터 해당년도 해당월 1일까지의 총 날짜수 구함.
int[] m = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for (int a=0; a<month-1; a++) {
total += m[a];
}
//해당월 1일 때문에 +1
total++;
//올해가 윤년이면서 2월 이상인 경우 +1
if (month>=3 && (year%4==0 && year%100!=0 || year%400==0)){
total++;
}


3. 해당년도 해당월의 첫 날(1일)의 요일(일, 월, 화, 수, 목, 금, 토) 구함. //7로 나눈 나머지 연산 구함. 0:일~6:토
String[] d = {"일", "월", "화", "수", "목", "금", "토"};
int days = total % 7;
System.out.printf("%s요일 %n", d[days]);


4. 해당년도 해당월의 마지막 날짜 구함.


5. 해당년도 해당월 달력 출력. -> 인터페이스의 영향을 받음.





문제) 특정 년, 월, 일 입력시 요일 구하기.
실행 예)
년도?
월?
일?
결과 : 월요일





문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 1  2  3  4  5
16 17 18 19  6
15 24 25 20  7
14 23 22 21  8
13 12 11 10  9


해답은 없음 알아서 풀어보기


WRITTEN BY
빨강꼬마

,

문제) 구구단 출력. 반복문 이용.
실행 예)
원하는 단수(1~9)?5
5 * 1 = 5
5 * 2 = 5
...
5 * 9 = 45






문제) 구구단 출력. 1단부터 9단까지 출력. 이중 반복문 이용.
실행 예)
1 * 1 = 1
1 * 2 = 2
...
1 * 9 = 9
-------------
2 * 1 = 2
2 * 2 = 4
...
2 * 9 = 18
-------------
...
9 * 9 = 81





문제) 구구단 출력. 1단부터 9단까지 출력. 이중 반복문 이용. 한줄당 3단씩 출력
실행 예)
1 * 1 = 1      2 * 1 = 2      3 * 1 = 3
1 * 2 = 2
...
1 * 9 = 9      2 * 9 = 18     3 * 9 = 27
-------------------------------------------
4 * 1 = 4      5 * 1 = 5      6 * 1 = 3
4 * 2 = 4      5 * 2 = 5      6 * 2 = 3
7                8                9





break, continue 키워드

1. break는 블럭 탈출문. 반복문, switch문을 탈출.
2. continue는 블럭 점프문. 반복문 실행시 건너뛰기를 할 때 사용.

continue 예제
예를 들어, 아래 코드에서 출력 결과는?

for(int a=1; a<=100; a++) {
if (a%2 == 0) {
continue; //건너뛰기. 현위치에서 a++(증감식) 부분으로 이동함.
} else {
System.out.printf("%d ", a);
}
}


for(int a=1; a<=100; a++) {
if (a%2 == 0) {
continue; //건너뛰기. 현위치에서 a++(증감식) 부분으로 이동함.
}
System.out.printf("%d ", a); //1 3 5 7 .... 99
}


예를 들어, 1부터 100사이의 숫자중에서 홀수들의 합을 계산해서 출력. for문, continue키워드 이용.

int sum=0;
for(int a=1; a<=100; a++) {
if (a%2 == 0) {
continue; //건너뛰기. 현위치에서 a++(증감식) 부분으로 이동함.
}
sum += a;
}
System.out.printf("홀수들의 합: %d %n", sum);






배열(Array)


1. 배열은 크기와 성격이 같은 일련의 원소들이 모여 공동의 집합 구조를 갖는 자료의 집합체.


2. 특징
- 하나의 이름(식별자)을 가지고 여러개의 저장 공간을 가진다.
- 자료형이 같은 자료만 저장할 수 있다.
- 사전에 공간의 크기를 지정해야 한다.
- 참조형이다.
- 특정 저장 공간을 지칭하기 위해서 인덱스(0부터 시작되는 번호)를 이용한다.
- 배열의 배열을 이용해서 다차원 배열을 만들 수 있다.
- 자동 초기화 지원


3. 배열 사용 방법

자료형[] 변수명;  //배열 선언 int[] arr;
변수명 = new 자료형[크기];  //배열에 메모리 할당 arr = new int[]
변수명[인덱스] = 자료;  // 배열 요소의 사용


4. 배열 선언 및 초기값 동시 지정

자료형[] 변수명 = new 자료형[크기];  // 자동초기화 지원.
자료형[] 변수명 = {값1, 값2, .....};  // 원하는 값으로 채워짐


예를 들어,

int[] arr1 = {10, 20, 30};  //크기 3인 int형 배열
String[] arr2 = {"hong", "kim", "park", "choi"};  // 크기 4인 String형 배열




문제) char 자료형의 1차원 배열을 선언하고, 영문자 대문자를 A~Z까지 채우는 프로그램 작성.
영문자 대문자 A의 ASCII코드는 65.

//방법1

char[] arr = new char[26];

arr[0] = 'A';
arr[1] = 'B';
//...
arr[25] = 'Z';


//방법2

char[] arr = {'A', 'B', ..., 'Z'};



//방법3

char[] arr = new char[26];

for (int a=0, b=65; a<arr.length; a++, b++) {
arr[a] = (char)b; // 65[A], 66[B], ...
}






문제) 이름과 전화번호를 저장하는 주소록 작성. 배열이용. 반복문 이용.
실행 예)
회원 수(1~10)?3
이름 전화번호(1)? hong 111-1111
이름 전화번호(2)? kim 222-2222
이름 전화번호(3)? park 333-3333

----------------
전체 회원수: 3명
----------------
이름    전화번호
hong    111-1111
kim     222-2222
park    333-3333
----------------






문제) 여러개의 숫자를 입력받고, 최대값을 출력. 배열 이용.
실행 예)
갯수 지정(1~10)?3
숫자 입력(1)?20
숫자 입력(2)?10
숫자 입력(3)?30
입력된 숫자 : 20 10 30
최대값 : 30





문제) 아래 두개의 1차원 배열(arr1, arr2)에 있는 숫자들의 합집합 출력.

int[] arr1 = {2, 3, 5, 7, 9, 10, 12};
int[] arr2 = {3, 4, 5, 6, 7};

-> 합집합_첫번째방법
int[] hap = new int[arr1.length + arr2.length];

//------
hap[0] = arr1[0];
hap[1] = arr1[1];
....
hap[6] = arr1[6];

//------
hap[7] = arr2[1]; //4
hap[8] = arr2[3]; //6

//------







문제) 아래 두 개의 1차원 배열(arr1, arr2)에 있는 숫자들의 교집합 출력.

int[] arr1 = {7, 9, 12, 2, 3, 10, 5};
int[] arr2 = {3, 4, 5, 6, 7};


->교집합 // 조건연산자 ( (조건)?값1:값2 )를 이용해서 hap배열의 크기를 지정.


int[] hap = new hap[(arr1.length>arr2.length)?arr2.length:arr1.length];
hap[0] = 7;
hap[1] = 3;
hap[2] = 5;






문제) 아래 두 개의 1차원 배열(arr1, arr2)에 있는 숫자들의 차집합 출력.

int[] arr1 = {7, 9, 12, 2, 3, 10, 5};
int[] arr2 = {3, 4, 5, 6, 7};

->차집합  // a집합에서 b집합을 뺀 나머지 a집합

int[] hap = new hap[arr1.length];
hap[0] = 9;
hap[1] = 12;
hap[2] = 2;
hap[3] = 10;


WRITTEN BY
빨강꼬마

,

문자열 누적 클래스, 메소드 공부필수

String.Builder 와 append





이클립스 다운로드 및 설치

1. http://www.eclipse.org사이트에서 다운로드

2. 압축해제~

3. workspace 지정 끝!





while문



1. while문, do~ while문이 있다. 조건을 언제 검사하느냐의 차이이다.


while(조건) {
//실행문;
}


do {
//실행문;
}while(조건);


2. 조건이 참이면 반복 실행하고, 거짓이 되면 반복을 멈춘다.

3. for문과 while문의 비교

* 증감식의 위치는 논리적으로 위치변경이 가능함.

for (대입문1; 조건식2,5,8,11; 증감식4,7,10) {
//반복 실행하고자 하는 구문;3,6,9
}

-------------------------------------------> while문으로 수정하면 아래와 같다.

대입문1;
while(조건식2, 5, 8, 11) {
// 반복 실행하고자 하는 구문; 3, 6, 9
// 증감식;4, 7, 10

}


for (int a=0; a<10; a++) {  //10회 반복할 수 있는 구문
System.out.printf("%d %n", a); //0, 1, 2, ..., 9
}

-------------------------------------------->while 문으로 수정하면 아래와 같다.

int a=0;
while(a<10) {
System.out.printf("%d %n", a);
a++;
}


for (int a=1; a<=10; a+=2) { //5회
System.out.printf("%d %n", a); //1, 3, 5, 7, 9
}

-------------------------------------------->while 문으로 수정하면 아래와 같다.

int a=1;
while(a<=10){
System.out.printf("%d %n", a);
a+=2;
}




문제) 아래와 같은 경우 출력 결과는?

int a=0;
while (a <10) {
System.out.printf("%d %n", ++a);
}



문제) 반복문을 이용해서 1~100사이의 짝수만 출력. while문 이용




문제) 반복문을 이용해서 1~100 사이의 숫자에서 짝수들의 합, 홀수들의 합까지 출력. while문 이용.
실행예)
짝수들의 합 : 2550
홀수들의 합 : xxxx



문제) 반복문을 이용해서 1~100 사이의 숫자에서
3의 배수의 합, 4의 배수의 합, 3 또는 4의 배수의 합까지 출력. while문 사용
실행 예)
3의 배수의 합: xxxx
4의 배수의 합: xxxx
3 또는 4의 배수의 합: xxxx



문제) 1부터 100까지의 합을 계산해서 출력. while문 이용.
실행 예)
1부터 100까지의 합 : 5050

//Sample03_01.java

//해답은 알아서 -ㅅ- 쉬운문제임



문제) 1부터 100까지의 수중에서 4의 배수만의 합을 계산해서 출력. while문 이용.
실행 예)
1부터 100까지의 합 : 5050

//Sample03_02.java

//해답은 알아서 -ㅅ- 쉬운문제임




문제) 1부터 100까지의 수중에서 4의 배수만 출력
한줄에 4개씩 출력. 빈 줄바꿈 지정은 System.out.println(); 이용. while문 이용.
실행 예)
 4  8 12 16
20 24 28 32
...



문제) 1부터 100까지의 수중에서 4의 배수만 출력
한줄에 4개씩 출력. 줄 끝에 해당 줄 숫자들의 합을 출력
빈 줄바꿈 지정은 String.format("%n"); 이용. while문 이용.
실행 예)
 4  8 12 16 -> 40
20 24 28 31 -> 104
...





do ~ while문

do {
// 실행문
} while(조건);


1. 조건이 참이면 반복실행하고, 거짓이 되면 반복을 멈춘다.
예를 들어, 입력받은 숫자(양의 정수)를 화면에 출력하되, -1이 입력될때까지 계속 반복.


실행 예)
숫자입력(양의 정수)?1
1
숫자입력(양의 정수)?2
1 2
숫자입력(양의 정수)?3
1 2 3
...
숫자입력(양의 정수)?-1





문제) 입력받은 숫자(양의 정수)를 화면에 출력하되, 출력된 숫자들의 합을 출력. -1이 입력될때까지 계속 반복.
실행 예)
숫자입력(양의 정수)?1
1 -> 1 
숫자입력(양의 정수)?2
1 2 -> 3
숫자입력(양의 정수)?3
1 2 3 -> 6
...
숫자입력(양의 정수)?-1





문제) 입력받은 숫자(양의 정수)를 화면에 출력하되, -1이 입력될때까지 계속 반복.
출력된 숫자들의 합을 마지막에 한번 출력
실행 예)
숫자입력(양의 정수)?1
1
숫자입력(양의 정수)?2
1 2
숫자입력(양의 정수)?3
1 2 3
...
숫자입력(양의 정수)?-1
현재까지 입력된 숫자들의 합: xxxx





문제) 입력받은 숫자(양의 정수)를 화면에 출력하되, -1이 입력될때까지 계속 반복.
마지막에 최대값을 출력
실행 예)
숫자입력(양의 정수)?1
1
숫자입력(양의 정수)?2
1 2
숫자입력(양의 정수)?3
1 2 3
...
숫자입력(양의 정수)?-1
현재까지 입력된 숫자들중에서 최대값: xxxx





문제) 입력받은 숫자(양의 정수)를 화면에 출력하되, -1이 입력될때까지 계속 반복.
마지막에 최대값을 출력
실행 예)
숫자입력(양의 정수)?1
1
숫자입력(양의 정수)?2
1 2
숫자입력(양의 정수)?3
1 2 3
...
숫자입력(양의 정수)?-1
현재까지 입력된 숫자들중에서 최대값: xxxx
현재까지 입력된 숫자들중에서 최소값: xxxx





이중 반복문

1. for문이나 while문 등을 겹쳐서 코딩.

for (대입문1; 조건식2 12 19; 증감식11 18) {
        //(이 부분은 바깥쪽 for문의 영향 범위)

for (대입문3 13; 조건식4 7 10 14 17; 증감식6 9 16) {
// 이부분은 안쪽 for문의 영향 범위5 8 15
}

//(이 부분은 바깥쪽 for문의 영향 범위)
}


예를 들어, 1부터 10까지 숫자를 출력하는 과정을 보면

for (int a=1; a<=10; a++) {
System.out.printf("%d ", a);
}

-------->

 1 2 3 4 5 6 7 8 9 10 


for (int a=1; a<=10; a++) {
for (int b=1; b<=10; b++) { //100회실행
System.out.printf("%d ", b);
}
System.out.printf("%n"); //줄바꿈지정 // 10회실행
}

--------->

1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 


예를 들어, 아래 코드에서 출력 결과는?

for (int a=1; a<=10; a+=2) { //5회 반복
for (int b=1; b<=10; b++) { //10회실행
System.out.printf("%d ", b);
}
System.out.printf("%n"); //줄바꿈지정
}



예를 들어, 아래 코드에서 출력 결과는?

for (int a=1; a<=10; a++) { //10회 반복
for (int b=a; b<=10; b++) { //10회실행
System.out.printf("%d ", b);
}
System.out.printf("%n"); //줄바꿈지정
}



예를 들어, 아래 코드에서 출력 결과는?

for (int a=1; a<=10; a++) { //10회 반복
for (int b=10; b>=a; b--) { //10회실행
System.out.printf("%d ", b);
}
System.out.printf("%n"); //줄바꿈지정
}



문제) 아래와 같은 결과가 나오도록 이중 for문 구성.
실행 예)
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1



WRITTEN BY
빨강꼬마

,
String.format("%s이다", 변수);
-> printf는 서식지정자와 함께 출력을 위해 사용되는 메소드임을 기억한다면
String.format은 기억하기 쉬움. 출력대신 변수데이터를 위한 메모리의 저장 메소드로 변경해서 기억하면 됨.

또한, 자주쓰는 형변환 메소드들 기억하기



if문 문제) 임의의 점수를 입력받아서 판정을 출력.
실행 예)
점수 입력(0~100)? 90
90~100 -> A
80~89 -> B
70~79 -> C
60~69 ~> D
0~59->F

입력된 점수 : 90
판정 결과 : A

 

 

 


문제) 세 개의 정수를 입력 받고, 가장 큰 수와 가장 작은 수를 나누어서 출력.
실행 예)
숫자1?30
숫자2?10
숫자3?20

입력된 숫자 : 30, 10, 20
가장 큰 수 : 30
가장 작은 수 : 10

 

문제) 국,영,수 점수를 입력 받아서 판정 결과 출력.
판정 기준은
합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상.
과락 -> 과목중 40점 미만이 있고, 평균이 60이상.
불합격 -> 평균이 60점 미만

평균이 60점 이상 -> 합격 또는 과락 -> 국영수 점수가 모두 40점 이상인지 확인.
평균이 60점 이하 -> 불합격

실행 예)
국어(0~100)?XX
영어(0~100)?YY
수학(0~100)?ZZ

입력받은 점수 : 국어 xx점, 영어 xx점, 수학 xx점
판정 결과 : 합격

 



for문

1. 반복문. 정해진 횟수만큼 반복해야 하는 경우 유용하게 사용되어지는 반복문.
2. 기본형식

for (대입문1; 조건식2,5,8,11; 증감식4,7,10) {
 //반복 실행하고자 하는 구문;3,6,9
}
-> 대입문 먼저 실행
-> 조건식 확인. 참일 경우 구문 실행.
-> 증감식 실행.
-> 조건식 확인. 거짓일 경우 반복문 실행 중단.

for (int a=0; a<10; a++) {  //10회 반복할 수 있는 구문
 System.out.printf("%d %n", a); //0, 1, 2, ..., 9
}
for (int a=0; a<=10; a++) { //11회
 System.out.printf("%d %n", a); //0, 1, 2, ...., 10
}
for (int a=1; a<=10; a++) { //10회
 System.out.printf("%d %n", a); //1, 2, ..., 10
}
for (int a=1; a<=10; a+=2) { //5회
 System.out.printf("%d %n", a); //1, 3, 5, 7, 9
}
for (int a=2; a<=10; a+=2) { //5회
 System.out.printf("%d %n", a); //2, 4, 6, 8, 10
}
for (int a=1; a>10; a++) { //0회
 System.out.printf("%d %n", a); //X
}
for (int a=1; a<10; a--) { //무한반복
 System.out.printf("%d %n", a); //1, 0 , -1, -2, ......, -2147483648
}

for ( ; ; ) { //무한반복
 // 실행 구문;
 if (조건) {
  break; // 반복블럭 탈출
 }

 

문제) 반복문을 이용해서 1~100 사이에 존재하는 짝수만 출력.


//Test32.java


 

문제) 반복문을 이용해서 1~100 사이에 존재하는 짝수만 출력.
마지막에 짝수들의 합도 같이 출력



문제) 반복문을 이용해서 1~100 사이의 숫자에서 짝수들의 합, 홀수들의 합까지 출력
실행예)
짝수들의 합 : 2550
홀수들의 합 : xxxx


 

다른방법으로 문제 해결

 

문제) 반복문을 이용해서 1~100 사이의 숫자에서
3의 배수의 합, 4의 배수의 합, 3 또는 4의 배수의 합까지 출력.
실행 예)
3의 배수의 합: xxxx
4의 배수의 합: xxxx
3 또는 4의 배수의 합: xxxx

 

문제) 대문자로 구성된 문자열을 입력받고 나서
소문자로 변경한 다음 출력.
실행 예)
문자열 입력(대문자)?
입력한 문자:
소문자로 변환:





WRITTEN BY
빨강꼬마

,

8. 논리 연산자 && || !
-> 결과가 true, false로 리턴.


조건1 && 조건2 -> AND 연산자. 조건1과 조건2의 true, false에 따라서 최종적인 true, false를 리턴
                          동시에 true일때만 최종 true가 됨. false가 하나 있으면 무조건 false를 리턴


조건1 || 조건2 -> OR 연산자. 조건1과 조건2의 true, false에 따라서 최종적인 true, false를 리턴
                          동시에 false일때만 최종 false가 됨. true가 하나 있으면 무조건 true를 리턴.


(! (조건) ) -> NOT 연산자. 조건의 true, false를 반대로 리턴







자료형


1. 정수형


byte -> 1바이트, 표현범위: -128 ~ 127

short -> 2바이트, -32768 ~ 32767

int -> 4바이트(32비트), -2,147,483,648 ∼ 2,147,483,647.  (암기)

long -> 8바이트. 접미사 L표기 필요.


10진수 -> 0 ~ 9 조합

2진수 -> 0, 1 조합

16진수 -> 0 ~ 9 ~ A ~ F 조합



Wrapper 클래스 (기본자료형에 대한 클래스 표현)

byte -> Byte

short -> Short

int -> Integer

long -> Long


Integer.parseInt() -> 형 변환 메소드

Integer.MAX_VALUE -> int 자료형의 최대값을 돌려주는 상수

Integer.MIN_VALUE -> int 자료형의 최소값을 돌려주는 상수






문제)) 임의의 수를 입력 받아서 2진수, 10진수, 16진수 표현을 출력.
실행예)
10진수 입력(0~2147483647)?
2진수: xxxxxxxx
10진수: xxxxxxxx
16진수: xxxxxxxx






2. 문자형과 문자열형


char -> 문자형. 기본자료형. 'A'. ASCII코드로 저장됨.
String -> 문자열형. 참조형. "ABCD". 


char ch1 = 'AB'; // 오류
char ch2 = 'A';  // 성공


String st1 = "AB"; // 성공


ASCII코드중에서 문자 0은 48, 9는 57
ASCII코드중에서 문자 A는 65, Z는 90
ASCII코드중에서 문자 a는 97, z는 122


char과 int 자료형은 서로 호환이 가능한 범위를 가진다.


char ch3 = 65; //성공. 'A'가 입력됨.


System.out.printf("%d %n", 65); // 65
System.out.printf("%c %n", 65); // A


String str = "TEST";
System.out.printf("%c %n", str.charAt(0)); //문자열이 저장된 변수명.charAt(문자열위치값) 즉, 여기서는 T 리턴
System.out.printf("%c %n", str.charAt(1));
System.out.printf("%c %n", str.charAt(2));
System.out.printf("%c %n", str.charAt(3));








문제) 대문자로 구성된 4글자짜리 문자열을 입력받고 나서, 소문자로 변경한 다음 출력.
실행 예)
문자열 입력(4자, 대문자)?TEST
입력된 문자열 : TEST
소문자로 변환 : test






자료의 형 변환


1. 자료의 형이 일치하지 않는 경우 원하는 자료형으로 변환할 수 있어야 한다.

2. 묵시적 형변환, 명시적 형 변환
묵시적 형 변환 -> 자동으로 변환시켜 주는 것. 데이터가 원래의 값을 유지하는 것이 가능. 작은 데이터를 큰 자료형에 넣는 경우에 주로 발생.
명시적 형 변환 -> 특정 명령 수행을 통해서 강제적으로 변환을 시키는 것. 데이터가 원래의 값을 유지하지 못하는 경우도 발생.





형 변환의 대표적인 예

문자열형 -> 숫자형, 숫자형 -> 문자열형


int 변수 = Integer.parseInt(문자열형);
double 변수 = Double.parseDouble(문자열형);


String 변수 = String.valueof(정수형);
String 변수 = String.valueof(실수형);


String 변수 = Integer.toString(정수형);
String 변수 = Integer.toBinaryString(정수형);
String 변수 = Integer.toHexString(정수형);


String 변수 = String.format("%d", 정수형);
String 변수 = String.format("%f", 실수형);


char 변수 = 문자열형변수명.charAt(인덱스);






if문


1. 주어진 조건에 따라 분기 방향을 정하기 위하여 사용하는 제어문
2. 기본형식


//조건이 만족되는 경우(true인 경우)만 실행문 실행

if (조건) {

// 실행문;

}


//조건이 만족되는 경우(true인 경우)는 실행문1 실행

//조건이 만족되는 않는 경우(true인 경우)는 실행문2 실행

if (조건) {

// 실행문1;

} else {

// 실행문2;

}


사용 가능 방법

if (조건) {

//실행문1;

} else if (조건2) {

//실행문2;

} else {

//실행문3;

}

-> 다른방법으로 표기하면

if (조건) {

//실행문1;

} else {

if (조건2) {

//실행문2;

} else {

//실행문3;

}




//if, else 구문은 한번만 표기, else if (조건)은 추가 가능.

if (조건) {

//실행문1;

} else if (조건2) {

//실행문2;

} else if (조건3) {

//실행문3;

} else {

//실행문4;

}

-> 위와 같은 상황은 다른 표현으로 사용하기도 합니다. 다만, else 즉 실행문4가 없음.

if (조건1) {

// 실행문1;

}

if (조건2) {

// 실행문2;

}

if (조건3) {

// 실행문3;

}




문제) 세 개의 숫자 중에서 가장 큰 숫자 구하기. 단, if문 사용.
실행 예)
숫자1?XX
숫자2?YY
숫자3?ZZ
입력 받은 숫자 : XX, YY, ZZ
가장 큰 숫자 :  ZZ



문제) 임의의 수를 입력 받아서 짝수, 홀수로 구분해서 출력.
실행 예)
임의의 정수(0 이상)? 
입력받은 숫자 :
구분 : 






문제) 임의의 수 를 입력 받아서 3의 배수, 4의 배수로 구분해서 출력.
실행 예)
임의의 정수(3 또는 4의 배수)?
입력받은 숫자 :
구분 : 3의 배수

혹은

임의의 정수(3 또는 4의 배수)?
입력받은 숫자 :
구분 : 4의 배수

혹은

임의의 정수(3 또는 4의 배수)?
입력받은 숫자 :
구분 : 3의 배수 또는 4의 배수


WRITTEN BY
빨강꼬마

,

변수



1. 변수는 기억공간에 대한 별칭. 자료형 지정 필수.

-> 별수는 데이터를 저장하기 위한 공간이므로 사전에 미리 준비되어 있어야 한다.


2. 변수명은 식별자 작성 규칙에 맞춰서 작성.

자료형 변수 = 데이터;

자료형 변수 = 구문;


3. 지역 변수와 멤버 변수로 구분. 자동 초기화 지원 여부가 다르다.

지역 변수는 메소드 내부에 선언된 변수.

멤버 변수는 클래스 차원에 선언된 변수.



//자료형의 초기값 예제

//클래스

public class Test10 {

    

    int a; //멤버변수(클래스 안에서 선언하며, 자동초기화 지원)

    int kor, eng, mat; // int 초기값은 0

    double d;  // double 초기값은 0.000000

    char c;    // char 초기값은 '' 즉, 아무것도 없는 빈값

    boolean l; // boolean 초기값은 false

    String str; // 스트링 초기값은 null (참조형 변수 초기값은 null)

    

    //메소드(클래스 선언 후 선언하는 하위개념)

    public void test() {

        int b = 0; //지역변수(메소드 안에서 선언하며, 사용자가 직접 초기화해야함)

        int tot = 0;

        

        System.out.printf("a=%d %n", a);

        System.out.printf("kor=%d %n", kor);

        System.out.printf("b=%d %n", b);

        System.out.printf("tot=%d %n", tot);

        System.out.printf("double=%f %n", d);

        System.out.printf("char=%c %n", c);

        System.out.printf("boolean=%b %n", l);

        System.out.printf("String=%s %n", str);

    }

      

  //main 메소드 -> 프로그램의 진입점

        public static void main(String[] args) {


        Test10 obj = new Test10();

        obj.test(); // 사용자가 지정한 메소드에 실행 명령 호출 부분

}

}




//결과

a=0 

kor=0 

b=0 

tot=0 

double=0.000000 

char=

boolean=false 

String=null 





연산자

◆ 연산자의 종류 ◆

 산술 연산자

 + - * / %

 부호 연산자

 + -

 대입 연산자 (주로 많이 쓰이는 연산자)

 = 복합대입연산자 (+= -= *= /= %=)

 관계 연산자 (주로 많이 쓰이는 연산자)

 > >= < <= instanceof

 등가 연산자

 == != 

 증감 연산자

 ++ --

 논리 연산자

 && || !

 조건 연산자

 ? :

 비트 연산자 (잘 안쓰임)

 & | ^ ~ << >> >>>




1. 산술 연산자 + * * / %


* 곱하기 연산자

/ 나누기 연산자 (몫 연산 가능)

% 나머지 연산자


"예를 들어, 990원에서 500원의 갯수는?" 을 구하려면,

몫 연산을 수행해야 되는데 이때는 나누기 연산에서 정수 나누기 정수 연산을 수행하면 몫으로 정수가 나오는 것을 이용하여 몫을 구할 수 있음.
나누기 연산에서 정수 나누기 실수는 실수임. 즉,

990 / 500 -> 1 (몫)

990 / 500.0 -> 1.98 (나누기)


500원을 뺀 나머지 금액은 아래와 같이 구할 수 있다.

990 % 500 -> 490 (나머지)


정수 값이 저장된 변수 / 정수 값이 저장된 변수 -> 정수 결과 (몫)

정수 값이 저장된 변수 / (double)정수 값이 저장된 변수 -> 실수 결과 (나누기) //(double)은 캐스트 연산자라고 부름




문제) 거스름돈을 환폐단위로 구분해서 출력.
실행예)
금액(10~1000)? 990
총액 : 990원
오백원 1개, 백원 4개, 오십원 1개, 십원 4개





3. 증감 연산자 ++ --


데이터++ -> 데이터는 상수이므로 연산자 사용 불가


변수++ -> 변수는 현재 저장된 값에 대해서 +1 연산을 수행한 후 기존의 값을 덮어쓰기함

변수1++ -> 변수 = 변수1 + 1 과 같은 연산. 변수값을 먼저 사용하고, 더하기 연산은 나중에 함.

++변수1 -> 변수1 = 변수 + 1 과 같은 연산. 더하기 연산을 먼저 수행하고, 변수값을 나중에 사용함.



증감연산자 예

// 클래스

public class Test12 {

    

    //main 메소드. 프로그램 시작점.

    public static void main (String [] args){

        

        //지역 변수. 사용자 직접 초기화필수

        int a = 0;

        

//증감 연산자는 변수의 값을 1씩 증가시킨다.

        System.out.printf("%d %n", a++);

        System.out.printf("%d %n", a);

        System.out.printf("%d %n", ++a);

        System.out.printf("%d %n", (++a + ++a));

        System.out.printf("%d %n", (a++ + a++));

System.out.printf("%d %n", a);

    }

}


//결과

6





4.대입 연산자 = 복합대입연산자


자료형 변수 = 데이터; // 데이터를 변수에 대입시킨다.

자료형 변수 = 구문;   // 구문의 결과 값인 데이터를 변수에 대입시킨다.


자료형 변수 += 데이터;  //-> 자료형 변수 = 변수 + 데이터 를 의미함.

자료형 변수 -= 데이터;  //-> 자료형 변수 = 변수 - 데이터 를 의미함.

자료형 변수 *= 데이터;

자료형 변수 /= 데이터;

자료형 변수 %= 데이터;




5. 관계 연산자 > >= < <= instanceof

-> 결과값은 true, false만 리턴.


a > b     a의 값이 b보다 큰지 확인해주는 연산자. 

a >= b    a의 값이 b보다 크거나 같은지 확인해주는 연산자. 


예제는 조건 연산자 문제와 함께 확인가능.



6. 조건 연산자(삼항연산자) ? :


자료형 변수 = (조건)? 값1 : 값2;

-> 조건의 결과가 true이면 값1, false이면 값2를 리턴.




문제) 두 개의 숫자 중에서 가장 큰 숫자 구하기.

실행 예)

숫자1? X

숫자2? Y

입력 받은 숫자: X, Y

가장 큰 숫자: X



문제) 세 개의 숫자 중에서 가장 큰 숫자 구하기.

실행예문)

숫자1? X

숫자2? Y

숫자3? Z

입력 받은 숫자: X, Y, Z

가장 큰 숫자: X




문제) 세 개의 숫자 중에서 가장 작은 숫자 구하기.

숫자1? X

숫자2? Y

숫자3? Z

입력 받은 숫자: X, Y, Z

가장 작은 숫자: X






7. 등가 연산자 == !=

-> 결과값은 true, false를 리턴.
-> 기본자료형인 경우에만 정상적으로 결과출력가능.


변수 == 데이터 -> 변수의 값이 데이터와 같은지 확인.

변수 != 데이터 -> 변수의 값이 데이터와 같지 않은지 확인.



참조형(String..)인 경우는 == 연산으로 비교 불가. equals() 메소드를 이용했을때만 참조형의 값 비교가 가능함.
참조형은 기본 자료형과는 달리 메모리 내부적으로 참조주소값을 사용하기 때문에 등가 연산자가 사용이 되지 않는 것임.
(equals()는 참조주소값이 아닌 실제 진짜 데이터를 비교하는 메소드)


잠깐!!!    if 구문에 대해


if (조건) {

//조건이 참인 경우 실행할 부분

}else{

//조건이 거짓인 경우 실행할 부분

}




등가연산자의 사용방법 예

import java.io.*;


public class Test16 {

    public static void main (String [] args) throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        

        System.out.print("비밀번호(숫자만 입력 가능)?");

        String password = br.readLine();

        

        /*

        //비교연산을 수행하기 위해서 양쪽의 데이터 타입(자료형)을 일치시켜야 한다.

        if(Integer.parseInt(password) == 1234){

            System.out.println("암호가 맞습니다.");

        }else{

            System.out.println("암호가 틀렸습니다.");

        }

        */

        

        //문자열 자료형을 비교하는 올바른 방법.

        if(password.equals("1234")){

            System.out.println("암호가 맞습니다.");

        }else{

            System.out.println("암호가 틀렸습니다.");

        }

    }

    

}


//결과

비밀번호(숫자만 입력 가능)?1234

암호가 맞습니다.





tips. 메소드에 대한 짧은 설명


Integer 클래스에서 Integer.parseInt(**)에서 parseInt(**)는 클래스의 하위 멤버중 하나인 메소드



WRITTEN BY
빨강꼬마

,

CMD HERE 레지스트리 등록 

 - 가고자 하는 폴더에서 우클릭메뉴를 통해 CMD 디렉토리 바로 이동


cmdhere.reg





참고


- 넷빈에서 한 프로젝트내에 두개 이상의 main이 있을 때 특정 .java파일을 실행하기 위해서는 shift + F6 단축키를 사용한다.

- 넷빈에서는 import를 자동으로 하려면 Alt+Enter키를 이용함.

- 키보드에서 받는 데이터는 무조건 String 일수밖에 없음

- 실수형을 계산할때는

int + int = int

int + double = double

형으로 출력되는 것을 기억하여 예를 들어 3을 나누어 주어야 하고 결과값이 실수가 나올수도 있을 경우라고 가정하면

3을 3.0으로 표기하여 코딩하면 올바른 값이 출력될 수 있다.




넷빈 다운로드 및 설치


1. http://www.oracle.com에서 넷빈(NetBeans IDE)다운로드

2. 넷빈에서는 자바 소스코드 작성을 위해서 프로젝트 단위로 생성.

1. New project > Categories: Java > Projects: Java Application
2. Project Name: 프로젝트 이름 입력 > Project Location: 위치지정
3. Create Main Class: 클래스 이름 입력
4. 끝!
5. 편집창에서 자바 소스 코드 입력
6. Run > Run Project (F6)





자바 기본 입출력


1. 표준 출력

프로그램 목적: 외부 데이터 입력 -> 내부적인 가공(연산) -> 결과 출력


표준 출력 스트림인 System.out 필드 -> PrintStream 자료형 반환

PrintStream 클래스의 하위 메소드인 println() 메소드 이용해서 데이터 출력.


예를 들어서,

System.out.println("메세지");

System.out.println(123);


-- 첫글자가 대문자인 단어는 클래스

-- 모든글자가 소문자인 단어는 키워드

-- 데이터 타입형은 클래스도 있고, 키워드도 있고....



println()과 printf()메소드를 자주 사용.

-- ln은 자동줄바꿈.

-- f는 포맷의 의미로 결과 출력시 서식과 함께 출력하고 줄바꿈을 자동으로 하지 않음.


System.out.printf("%s %n","메세지"); -- %s 는 문자 %d 는 숫자 라는 데이터의 서식을 지정

System.out.printf("%d %n",123);      -- %n 은 줄내림



//서식 지정의 예

public class Test05 {


    public static void main(String[] args) {

        System.out.println("hello, java world!");

        

        System.out.printf("%s %n","Hello, Java World!");

        System.out.printf("%s %s %s %n", "Kim", "Hyun", "Wook"); // 서식수에 맞추어 데이터수도 동일하게 

        

        System.out.printf("%d + %d = %d %n", 10, 20, (10+20)); // (x, ....) 안에 x에서는 데이터타입과 함께 화면에

                                                                                     // 그대로 출력할 내용도 함께 직접 쓸수 있음.

        System.out.printf("%d - %d = %d %n", 10, 20, (10-20));

        System.out.printf("%d * %d = %d %n", 10, 20, (10*20));

        System.out.printf("%d / %d = %d %n", 10, 20, (10/20)); // 연산결과가 0이 나오게 됨

        System.out.printf("%d / %.1f = %.1f %n", 10, 20.0, (10/20.0)); // 연산결과가 0.5가 나오게 됨.

    }

}


//결과

hello, java world!

Hello, Java World! 

Kim Hyun Wook 

10 + 20 = 30 

10 - 20 = -10 

10 * 20 = 200 

10 / 20 = 0 

10 / 20.0 = 0.5 




2. 자료형

-> 컴퓨터 내부에서 자료를 취급하는 방법.

-> 기본자료형과 참조형으로 나눈다.


▶ 기본 자료형은 크기가 고정적이고, stack 메모리에서 관리된다. 또한, 요청시 바로 데이터를 받을 수 있다.

- 기본자료형 - 정수형: byte, short, int, long (대표는 int)

                - 실수형: float, double (대표는 double)

- 논리형: boolean

- 문자형: char


-> 문자열은 String 클래스 자료형이다. 문자열은 "ABC"



▶ 참조형은 크기가 가변적이고, heap 메모리에서 관리된다. 또한, 요청시 데이터를 바로 받는 것이 아니라 참조값을 받게된다. 참조값은 실제 데이터를 찾을 수 있는 주소값이다.

- 참조형(가변형) - 배열 참조형

- 클래스 참조형: System, Object, String

- 인터페이스 참조형


메모리형식

Stack: 데이터를 바로 가져올수 있음.(복사의 개념. 원본은 남음). 기본자료형이 저장되는 공간

Heap: 데이터를 바로 가져올수 없으나, 가상의 값(참조값)을 가져올수 있다.(복사의 개념. 원본은 남음) 참조형이 저장되는 공간




3. 표준 입력

-> 키보드로부터 문자열(String 클래스 자료형)(enter를 입력할때까지 입력되는 문자들)을 입력 받을 때 사용

// String strData;    ->   strData로 선언된 변수에 대한 자료형 정의 구문

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String strData = br.readLine();  // 최상단 String strData; 구문을 없애고 strData 변수 앞에 String으로 써줘도 오케이


즉, 자료형 변수 = 데이터;

자료형 변수 = 외부 데이터 입력 구문;

자료형 변수;

변수 = 데이터;

동일하다는 의미임.


-> 변수의 자료형과 데이터의 자료형은 정확하게 일치하는 것이 권장하는 방법.

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader; // import java.io.*; 로 세줄을 하나로 처리할 수 있다.

클래스 선언{

public static void main (String [] args) throws IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String 변수명 = br.readline();

프로그램 코딩소스~~~ 

.....

}

}


◆ 형광색 부분의 의미 

입력데이터를 받기위해(readline()) 항상 같이 사용해야는 부분으로, 

반드시 import와 throws 구문이 필요함.




//입력부터 처리, 출력 과정을 같이 실행하는 예   //Test06.java

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Test06 {

    public static void main(String [] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("이름:");

        String strData = br.readLine();

        

        //처리

        String message = String.format("당신의 이름은 %s입니다.", strData);

        

        //출력

        System.out.println(message);

                

    }

}



//결과

이름:kimhw

당신의 이름은 kimhw입니다.






잘못된 산술연산의 예

import java.io.*;


public class Test07 {

    public static void main(String [] args) throws IOException {

       

        //입력

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("국어:");

        String kor = br.readLine();

        

        System.out.print("영어:");

        String eng = br.readLine();

        

        System.out.print("수학:");

        String mat = br.readLine();

                

        //처리

        //총점=국어+영어+수학;

        String tot = kor + eng + mat ;

        

        //출력

        System.out.printf("입력된 데이터는 %s, %s, %s입니다.%n", kor, eng, mat);

        System.out.printf("총점은 %s 입니다.%n", tot);        

        

        

    }

}



//결과

국어:100

영어:90

수학:80

입력된 데이터는 100, 90, 80입니다.

총점은 1009080 입니다.


원인.

변수인 kor, eng, mat의 자료형은 String인 상대에서 + 산술이 이루어 졌기 때문에 "100", "90", "80"으로 컴퓨터가 인식하여

위와 같은 결과가 출력된 것이므로, Integer.parseInt(변수명) 을 통해 int 형으로 변환하여 처리해야 한다.



Integer.parseInt("숫자모양");

>> 스트링형인 것을 숫자로 형변환 시킬수 있음





입력된 숫자 데이터를 형변환하여 숫자로 바꾸는 과정(올바른 산술연산의 예)

-> 외부에서 입력된 데이터는 모두 자료형이 문자열형(String)이므로 필요시 숫자(int)로 변환하려면 Integer.parseInt()메소드를 이용해야 한다.


import java.io.*;


public class Test08 {

    public static void main(String [] args) throws IOException {

                        

        //입력

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("국어:");

        String kor = br.readLine();

        

        System.out.print("영어:");

        String eng = br.readLine();

        

        System.out.print("수학:");

        String mat = br.readLine();

                

        //처리

        //총점=국어+영어+수학;

        

        int tot = Integer.parseInt(kor) + Integer.parseInt(eng) + Integer.parseInt(mat);      

        

        

        //출력

        System.out.printf("입력된 데이터는 %s, %s, %s입니다.%n", kor, eng, mat);

        System.out.printf("총점은 %d 입니다.%n", tot);

                

    }

}




//결과

국어:100

영어:90

수학:80

입력된 데이터는 100, 90, 80입니다.

총점은 270 입니다.






문제) Test08 소스에서 평균 계산해서 출력하는 과정 추가






문제) 현재 원-달러 환율은 1달러에 1119원입니다.

특정 달러 금액을 입력하면 원화금액을 출력하는 프로그램 작성


실행 예)

달러 금액? 10

10 달러 -> 11190원





WRITTEN BY
빨강꼬마

,

- java se 설치


 

자바 환경 설정(setup, install)

1. JDK 7.0 설치

1. http://www.oracle.com에서 jdk-7u7-windows-i586.exe 다운로드
2. 자바 실행 환경 및 개발 환경에 대한 프로그램 설치과정
3. JDK 설치 확인
4. C:\Program Files\Java\jdk1.7.0_07
5. C:\Program Files\Java\jre7

 


2. Path 지정

1. 자바 컴파일에 필요한 프로그램을 쉽게 찾을 수 있도록 설정.
2. 내컴퓨터 - 속성 - 고급 - 환경변수 - 시스템변수의 path 편집 - 경로 (C:\Program Files\Java\jdk1.7.0_07\bin) 추가 (; 구분자 사용)
3. path 지정 확인
4. cmd 내에서 javac 입력

 

3. javac.exe 와 java.exe 파일 확인

1. 자바 컴파일 및 실행에 필요한 프로그램

 

4. 확장자에 따른 분류

1.  .java:    소스코드      -> 편집기를 통해서만 확인이 가능
                                       편집기는 메모장, 워드패드, 에디트플러스, 이클립스(이클립스를 가장추천)
2.  .class: 자바실행파일


 

첫 번째 예제 작성

1. 탐색기에서 Test01.java 파일을 생성

1. 파일이름은 첫글자를 대문자로 표기한 영숫자로 작성
2. 확장자는 .java로 표기

 

2. 메모장으로 Test01.java 파일을 열기

 

3. 아래 코드 작성

public class Test01 {                                              -- public: 접근지정자, class: 클래스 선언, 
        public static void main(String[] args) {               -- main: 프로그램 진입점(시작점) // main 하나의 예약어이지만 main은 항상
                                                                                                                                  public static void 와 함께 사용되므로 함께 암기
              System.out.println("Hello, Java World!");
        }
}


4. 저장

 

5. 명령 프롬프트에서 위 파일이 저장된 위치로 이동

 

6. 아래 명령을 이용해서 컴파일 및 실행

1. 컴파일 및 실행 명령
 
D:> javac Test01.java                                   -- 컴파일
D:> java Test01                                            -- 소스파일(.java)을 javac 파일로 컨버팅한 결과물인 .class 파일을 java파일로 실행
   > 결과는 Hello, Java World! 메세지 출력


 

프로그램 전용 글꼴 설치

-> 나눔고딕코딩 글꼴 


 

자바 프로그램 구성

1. 기본 형식

 -- [] 안에 있는 것은 생략 가능한것.

[import 패키지명]
[접근지정자] class 클래스명 {
        [멤버 변수 선언;]
        [접근 지정자][반환자료형] 메소드명([인자리스트]) {
                  // 프로그램 코드;
        }
        public static void main(String[] args) {
                 // 프로그램 코드;
        }
}

 

2. 자바 프로그램은 클래스(class)로 구성된다.
   물리적으로 저장하는 경우에도 클래스이름.java 형식으로 저장해야 한다.

잘못된 자바 프로그램 작성 예

public class Test02 {
        public static void main(String[] args){
        }
}

-> test02.java로 저장함. 클래스 이름과 파일 이름을 서로 다르게 저장

 

 

3. 주석
>>프로그램 내부에 설명을 추가하는 것. 실행하는 과정과는 아무런 상관이 없음.

// 한줄주석
/* 범위 주석 */

주석단 소스 코드 예

//클래스 선언
public class Test01 {
        // 메인 메소드 선언
        public static void main(String[] args) {
                // 콘솔창에 메세지 출력
                System.out.println("Hello, Java World!");
        }
}

 


4. 키워드
>> 이미 문법이 전해진 단어(예약어)


public, class, static, void, main 등등등....

if, for, while, new, this, super, protected, private, try, catch, finally, throw, thorws, boolean, byte, short, int, long, char, float, double, true, false, null, switch, default, case, do, break, continuem, return, extends, implement, package, import.. 등등 아주 많음~~

 

5. main() 메소드

public class Test03 {
        // main() 메소드가 없는 클래스는 실행이 되지 않는다.
        public static void test() {
                System.out.println("main이 없는 클래스");
        }
}

 

--> 실행결과:

D:> java Test03
오류: Test03 클래스에서 기본 메소드를 찾을 수 없습니다. 다음 형식으로 기본 메
드를 정의하십시오.
   public static void main(String[] args)

 

--> 메인 메소드를 추가해서 수정함

public class Test03 {
        // main() 메소드가 없는 클래스는 실행이 되지 않는다.
        public static void test() {
                System.out.println("main이 없는 클래스");
        }
        // main() 메소드는 클래스 내부 아무곳이나 추가가능.
        public static void main(String [] args) {
                System.out.println("main메소드 추가됨");
        }
}


WRITTEN BY
빨강꼬마

,