JAVA PROGRAMMING 실습 02. 표준 입출력 및 수식과...
Transcript of JAVA PROGRAMMING 실습 02. 표준 입출력 및 수식과...
2015학년도 2학기
자바의 기본 구조 ?
class HelloJava{ public static void main(String argv[]){ system.out.println(“hello,Java ~”){ } }
#하나 하나 뜯어 살펴봅시다! public class HelloJava{
}
public static void main(String[] args){ System.out.println(“Hello Java!!”); } 메서드 정의
클래스 정의
#시작을 알리는 main !
pubilc : 누구나 접근 가능하도록 하기 위한 예약어
static : 클래스만 존재하면 메서드를 바로 실행할 수 있도록 함
void : 리턴 값이 존재하지 않음
main : 메서드의 이름
String[] args : 메서드에 값을 받아오는 전달 인자
public static void main(String[] args)
@ 컴파일과 실행 # 컴파일 : 소스 코드로부터 CPU가 이해할 수 있는 기계어를 만들어내는 일 Java 컴파일 : 프로그래머가 생성한 자바 소스코드를 번역하여 자바가
상머신(JVM)이 해석할 수 있는 중간코드인 바이트 코드를 생성 # 실행 : 자바 가상머신이 자바 바이트코드를 해독하여 실행
컴파일 방법 : javac [옵션] HelloJava.java
실행방법 : java Hellojava
인텔 CPU + 리눅스
Apple 사의 MAC PC
C/C++ 응용 프로그램
실행 실행되지 않음
실행되지 않음
인텔 CPU를 가진 리눅스 환경에서 개발
플랫폼 = 하드웨어 플랫폼 + 운영체제 플랫폼
프로그램의 플랫폼 호환성 없는 이유 • 기계어가 CPU마다 다름 • 운영체제마다 API 다름 • 운영체제마다 실행파일 형식 다름
인텔 CPU + 윈도우 노트북
인텔 CPU + 리눅스
Apple 사의 MAC PC
자바 응용 프로그램
실행 실행
실행
Write Once !!
Run Everywhere!!
자바 가상 기계
자바 가상 기계
자바 가상 기계
인텔 CPU + 윈도우 노트북
컴파일~실행까지의 과정..
javac HelloJava.java
java HelloJava
HelloJava.class
소스 프로그램 자바 컴파일러
실행할 바이트코드 자바 인터프리터
바이트 코드
@ 식별자 ??? 클래스 이름, 메서드 이름, 변수 등과 같은 이름 @ 식별자 명명 규칙 1. 알파벳, 아라비아 숫자,_(언더바),$ 사용 가능 단, 식별자의 첫 글자는 숫자 사용 불가능 2. 예약어는 사용 금지 3. 변수 이름의 길이는 제한 없음 4. 유니코드 문자도 변수 이름 사용 가능 5. 대/소문자 구별 예) name과 NAME는 다른 변수
※참고 헝가리안 표기법, 카멜 표기법, 파스칼 표기법
@자바 자료형의 종류
기본 자료형
논리형
숫자형 정수형
boolean
byte
short int
long
실수형 float
double
참조 자료형 String, 클래스 , 배열, 인터페이스
문자형 char
# 기본형 : 변수 자체가 값을 가짐 # 참조형 : 변수 자체가 값을 가진 영역의 주소만 가짐
@ 정수형
byte (8bits, -128 ~ 127)
short(16bit, -32,768~32,767)
int (32bit, -2³¹ ~ 2³¹ - 1 )
long (64bit, -2⁶³ ~ 2⁶³ - 1 )
예 ) long la =2147483648L;
@ 논리형 boolean(1bit, true / false) 예) boolean ox=true;
@ 실수형 float (32bits, 유효자리 : 7) 예) float f_num = 120.123f; double (32bit, 유효자리 : 15)
@ 문자형
char (16bit, 0~65,535)
예) char ca;
ca=‘a’; ca=‘자’; ca=97;
ca=‘\n’; ca=‘\t’; ca=44032;
cf. “a”는 스트링형 상수
@형 변환
byte short int long
float
double
char
1. 광역화 형 변환 : 적은 데이터형을 큰 데이터형으로 변환하는 것 컴파일러가 자동으로 변환시켜 수행 원래 값의 근사치라도 보장 2. 협소화 형 변환 : 큰 데이터형으로 변환할 때 cast 연산자 사용(값 앞 괄호안에 변환되는 형) 강제적으로 변환 -> 정보를 잃어버릴 수 있음 예 : int a = (int) 3.5
@ 변수 ? : 프로그램 수행 중 값을 저장할 수 있는 기억 공간 - 반드시 선언 후 사용 @ 변수 선언 - 사용되기 전에 선언. - 데이터형 변수이름; 예) byte b; int age, grade; long la = 2147483648L; double total=384.2; 출력 : System.out.println(total);
@ 상수 : 변하지 않는 수 - 실행 중 변화하지 않는 값을 나타내는 것 - 정수형 상수, 실수형 상수, 문자형 상수, 논리형 상수 - 사용하기 전에 선언 되어야함. (관례적으로 대문자사용) - 변수가 아닌 상수임을 나타내기 위해 final 키워드 사용
@문자열 상수 - 쌍 따옴표 안에 있는 문자들의 나열 - 예) “Seoul, Korea 135-720” “자바 프로그래밍”
@ 연산자의 종류 종류 기능 연산자
산 술 연산자
사칙연산 + , - , * , / , %
증 감 연산자
피연사자의 값 증감 ++ / --
관 계 연산자
두 항의 비교 후 참 거짓 판단 => , >= , < , <=, == ,!=
논 리 연산자
하나 이상의 항을 평가 후 참 거짓 판단
& , && , | , || , ^ , !
비 트 연산자
자료를 bit단위로 계산 >> ,<< ,>>> , & , | ,^ , ~
배 정 연산자
계산한 결과를 변수에 할당 후 저장
+=, -=, *=, /=, %=, &=, |=, ^=,<<=, >>=, >>>=
3항 조건 연산자 간단한 if_then_else의 경우 (조건식) ? 연산식1 : 연산식 2
출력을 위한 메서드의 종류 메서드 설 명
println(내용) LN은 LiNe의 약자로 내용 출력 후 자동개행
print(내용) 마지막 출력한 문자 뒤에 다음 내용을 출력
printf(“형식지정자”,내용) 형식 지정자에 맞게 내용 출력
@입력을 위한 Scanner 클래스 # 입력문 사용 # 사용 방법 import java.util.Scanner; Scanner scan = new Scanner(System.in);
scan.next();
String next() String nextLine() int nextInt() double nextDouble()
import java.util.Scanner;
두 연산을 논리적으로 처리(True나 False를 반환)
예) a = (10 >=5 && 20 <=25); b = (10 < 10 || 20 == 20); c = (10 != 10); cf. if((a != 0) & (b / 0 < 1)) vs if ((a ==1) && ((b=c) <1))
A B A&B
A&&B A|B A||B
A^B !A
F F F F F T
F T F T T T
T F F T T F
T T T T F F
@ 프로그램 속도를 향상시키는 비트 연산자 - 피 연산자는 반드시 정수형 - 연산 결과 = 정수형 !!!!
A B A&B A|B A^B !A
0 0 0 0 0 1
0 1 0 1 1 1
1 0 0 1 1 0
1 1 1 1 0 0
Shift 연산자 : >> , << , >>>
계산 해보기
x = 2 y =15 z = 13 a = 40
Think.. : “& , | , ^”는 비트연산자..? 논리 연산자 ..?
1) x = 10 & 7
1010 & 0111 ---------- x = 0010
2) y= 10 | 7
1010 | 0111 ---------- y = 1111
3) z= 10 ^ 7
1010 ^ 0111 ---------- z = 1101
4) a = 10 <<2
1010 101000 <<2 ------------- a = 101000
@ 간단한 if_then_else의 경우 사용
예) int num1 = 10, num2 = 20;
a = (num1 > 5? 10 : 20)
b = (num2 > 10? 10 : 20)
구분 연산자 기능 사용 예
조건 ? 값1 : 값2 조건이 참이면 값 1
거짓이면 값 2 x > 20 ? 30 : 5
@ if 문 조건 연산식의 논리 값에 따라 실행 여부 결정 @ if문의 형태
@ if (조건식) <조건식이 참 일때 처리문장>; @ if (조건식) <조건식이 참일때 처리문장>;
else <조건식이 거짓일 때 처리문장>;
@ if (조건식1) 문1; else if (조건식2) 문2; else if (조건식3){
문3; 문4; } else 문 5;
if (score >= 90) grade = ‘A’; else if (score >= 80) grade = ‘B’; else if (score >= 70) grade = ‘C’; else grade = ‘F’;
@ if문 실습 ~~!!
조건 #최대값은 max에 최소값은 min에 저장 #두 정수 값이 같을 경우 먼저 입력된 수가 max, 나중에 입력된 수가 min 값에 저장.
@ switch 문 switch문 ()안의 내용을 평가하여 해당되는 case문을 수행 해당되는 case가 없는 경우 default를 수행 @ switch 문의 형태 (수식 결과값은 int형이나 char형 값) switch(수식 or 변수){ case 값1 : 문1; break; case 값2 : 문2; break; : default : 문n; }
@ switch문 예제 char grade=‘A’; int aCount=0, bCount=0, cCount=0; int dCount=0, fCount=0; switch(grade){ case 'A': aCount++; break; case 'B': bCount++; break; case 'C': cCount++; break; case 'D': dCount++; break; default: fCount++; }
@ 위의 switch문 예제를 if문으로 변경.. char grade=‘A’; int aCount=0, bCount=0, cCount=0; int dCount=0, fCount=0; //switch문 -> if문으로 변경 if (grade==‘A’) aCount++; else if (grade ==‘B’) bCount++; else if (grade ==‘C’) cCount++; else if (grade ==‘D’) dCount++; else fCount++;
@ switch문 실습해보기 조건 ) - 월은 입력 받지 않음 - 그 달의 날짜에서의 요일만 계산 - 요일은 숫자로 입력 받음(일 ~ 토 -> 0~6)
@골격 프로그램