오픈프레임워크_Day03
###################################
1. 이론 및 정보
평소에 IT트랜드에 대해서 공부를해라
필요한 사이트에 들어가서 확인
-----------------------------------
자료구조,알고리즘 이재규?
쉬운책을 봐라
우리나라에 있을 꺼면 대학원에 가라
-----------------------------------
상수가 영어로 쓰일때
- constant = 변수(기억장소)
- literal = 순수한 데이터 값
-----------------------------------
연산자(Operator) - 아래는 연산 순서대로 , () 괄호가 우선순위가 제일 높음
1. 종류
1) 산술연산자
*, /, %, +, -, ++, -- (증감연산자,단항연산자)
2) 비교연산자 (결과값이 true, false 논리값)
<, >, <=, >=, ==, !=
3) 논리연산자 (반드시 논리값만 사용해야한다, 단락회로기능이 있음(불필요한 일 안함,끊음))
&&(and 연산자), ||(or 연산자), !(not 연산자,toggle 연산자)
-----------------------------------------------------------------------------------
i j i && j(모두가 참일때 만 참) i || j(하나만 참이어도 참) !i
T T T T F
T F F T F
F T F T T
F F F F T
-----------------------------------------------------------------------------------
비트연산자(성능에 유리하다)
&(and), |(or), ^(xor,exclusive-OR 배타적 연산자,간단한 암호화에 쓰임)
<<, >>, ~
i j i^j
-------------------
T T F
T F T
F T T
F F F
4) 대입(치환)연산자
=, +=, -=, *=, |=,....
2. 캐스팅연산자(강제 형변환 연산자)
1) 문법
= (데이터 형식)변수
2) 종류
- 암시적(묵시적) 캐스팅 (자동)
- 명시적 캐스팅 (직접)
3. 삼항 연산자
1) 문법
조건식 ? 참 : 거짓
-----------------------------------
제어문(Control Statement)
1. 종류
1) 조건문
- if
- switch
2) 반복문
- while
- do while
- for
2. if
1) if(조건식) ->조건이 거짓일때 처리를 못함
문장;
1) if(조건식){
문장;
문장;
...
}
2) if(조건식)
문장;
else
문장;
2) if(조건식){
문장;
문장;
...
}else{
문장;
문장;
...
}
-----------------------------------
-----------------------------------
-----------------------------------
###################################
2. 설정 및 그 밖에
소스와 실행파일을 따로 구분해야 한다.
-----------------------------------
cmd - del *.bak
-----------------------------------
day02 폴더 만들고 오늘 할 모든 소스코드를 담음
day02에 src, bin(or class) 폴더를 만듬
*.java는 ~\day02\src에 저장, *.class는 ~\day02\class에 저장
-----------------------------------
javac OpTest04.java -d F:\study\java\day02\src\class - 절대 경로(위치가 고정)
javac OpTest04.java -d ..\class - 상대 경로(위치가 내 위치에 따라 다름)
움직이기 귀찮아서 아래와 같이 함
F:\study\java\day02\class>javac ..\src\OpTest04.java -d ..\class
F:\study\java\day02\class>java OpTest04
-----------------------------------
*** Build Tool
ANT
====
1. 자동화
-----
http://ant.apache.org/
download - binary - apache-ant-1.9.4-bin.zip
환경변수
시스템 변수 새로 추가
이름 : ANT_HOME
변수 : F:\study\apache-ant-1.9.4
Path에 ;%ANT_HOME%\bin 추가
-----------------------------------
tools jar 문제 해결 방법
시스템 변수 새로 추가
이름 : CLASSPATH
변수 : .;%JAVA_HOME%\lib\tools.jar
-----------------------------------
build.xml을 이용해서 ant를 사용
~\study\day02\build.xml 만듬
-----------------------------------
시작태그와 끝태그 , 두개를 합쳐서 element라고 함
<target>
</target>
-----------------------------------
cmd로 build.xml이 있는 곳을 가서
ant build or ant
가능
-----------------------------------
EditPlus에서 간단하게 실행시켜 보는 방법
메뉴 - 도구 - 사용자 도구 구성
그룹 별로 여러 언어 설정이 가능
Group 1 을 자바SE 로 이름 바꿈
추가 - 프로그램
제목 : 컴파일
명령 : C:\Program Files\Java\jdk1.8.0_40\bin\javac.exe
인수 : $(FileName) -d ..\class
디렉토리 : $(FileDir)
동작 : 출력 내용 캡쳐
추가 - 프로그램
제목 : 실행
명령 : C:\Program Files\Java\jdk1.8.0_40\bin\java.exe
인수 : -cp ..\class $(FileNameNoExt)
디렉토리 : $(FileDir)
동작 : 없음
-cp는 클래스패스
-----------------------------------
콘솔 입력을 두번 받는게 안되는 이유?(InputTest.java)
buffer - 시스템이 필요로 하는 저장공간
아래 그림은 입력 버퍼
↓ ↓ ↓ 포인터
____________________
|a |b |엔터키 | 버퍼
____________________
이런상황(데이터를 키보드로 입력 받아서 버퍼에 저장되는 상황)
에서 다시 입력이 안되는
이유는 포인터가 엔터키를 가리키고
그래서 엔터키를 실행해서
두번째 입력받을 기회가 사라짐
해결방법
1. 포인터를 이동 (최소 두칸 이동해야함, 2byte)
2. 엔터키를 지운다
자바는 1번 방법 밖에 못함
c언어는 둘다 가능
-----------------------------------
-----------------------------------
-----------------------------------
###################################
3. 소스코드
public class OpTest4 {
public static void main(String[] args) {
double d1 = 2.0, d2 = 3.5;
//int i = (int)d1 + (int)d2;
int i = (int)(d1 + d2); //명시적
System.out.println(i);
d1 = i; //묵시적, 작은 것을 큰 그릇에 넣어서 동작함
System.out.println(d1);
//byte b = i; //안됨
byte b = (byte)i;
System.out.println("b : "+b);
b = 100;
//**************************************************************
//b = b + 5;
//b + 5를 계산하기 위한 저장공간이 int(디폴트로)이기 때문에 문제
//**************************************************************
//b = (byte)(b+5);
b+=5; //복합치환 연산자는 캐스팅 기능이 내장되어 있음!!!!!!!!!!
//b = b + 5 와 같은 표현을 자제!!!!!!!
System.out.println("b : "+b);
//float f = 3.14;//3.14는 정수부와 실수부를 따로 저장해 놓음
//실수형은 디폴트가 double이라 3.14 그대로 쓰면 안됨
float f = 3.14F; //float f = (float)3.14;
//f = f + (float)2.5;
f = f + 2.5F;
System.out.println("f : "+f);
long lo = 1000;
//b = (byte)lo; //범위 초과
i = (int)lo;
System.out.println("i : "+i);
//lo = 10000000000;
lo = 10000000000L; //숫자 뒤에 L,F는 대소문자 둘다 가능
System.out.println("lo : "+lo);
i = 'a';
System.out.println("i : "+i);
char c = 98;
System.out.println("c : "+c);
//삼항연산자
int x = 100;
char result = x > 10 ? 'T' : 'F';
System.out.println("result : "+result);
}
}
-----------------------------------
~\study\day02\build.xml
<?xml version="1.0" encoding="euc-kr"?>
<project name="day02" default="run" basedir=".">
<property name="main" value="OpTest4" />
<!--시작 태그와 끝 태그가 비어 있으면 <name></name> 대신 <name /> 가능-->
<target name="compile">
<javac srcdir="src" destdir="class" />
<!--./src ./class 도 가능 -->
</target>
<target name="run" depends="compile">
<!-- depends는 해당 기능을 먼저하라는 의미-->
<java classname="${main}">
<!--클래스 네임은 계속 바뀌어서 변수로 선언-->
<classpath>
<pathelement path = "class" />
<!--나중에 배움 -->
</classpath>
</java>
</target>
</project>
-----------------------------------
public class InputTest {
public static void main(String[] args) throws java.io.IOException{
//입력장치의 기본은 키보드
//출력장치의 기본은 모니터
/*
System.out.print("한 문자 입력 : ");
int input = java.lang.System.in.read();//read는 아스키코드값이 나옴
System.out.println("당신이 입력한 문자는 : "+(char)input+" 입니다.");
*/
System.out.print("숫자 입력 : ");
int input = java.lang.System.in.read() - 48;//read는 아스키코드값이 나옴
//48은 아스키코드 '0'
System.out.println("당신이 입력한 숫자는 : "+input+" 입니다.");
}
}
public class InputTest {
public static void main(String[] args) throws java.io.IOException{
//입력장치의 기본은 키보드
//출력장치의 기본은 모니터
System.out.print("한 문자 입력 : ");
int input = java.lang.System.in.read();//read는 아스키코드값이 나옴
System.out.println("당신이 입력한 문자는 : "+(char)input+" 입니다.");
System.in.skip(2);
System.out.print("숫자 입력 : ");
input = java.lang.System.in.read() - 48;//read는 아스키코드값이 나옴
//48은 아스키코드 '0'
System.out.println("당신이 입력한 숫자는 : "+input+" 입니다.");
//입력을 두번 받는게 안되는 이유?
}
}
-----------------------------------
public class IfTest1 {
public static void main(String[] args) throws java.io.IOException{
System.out.print("데이터 입력 : ");
int num = System.in.read() - 48;
if((num % 2) == 0)
System.out.println("짝수입니다.");
else//if((num % 2) != 0)
System.out.println("홀수입니다.");
}
}
-----------------------------------
-----------------------------------
###################################
4. 과제
입력받은 데이터 값이 'A', 'B', 'C' 이면
"정답입니다"라고 출력하고 그 외 값이
입력되면 "오답입니다"라고 출력하시오
두번째 문법만 이용
public class IfTest1 {
public static void main(String[] args) throws java.io.IOException{
System.out.print("데이터 입력 : ");
int num = System.in.read();
if( (num == 'A') || (num == 'B') || (num == 'C') )
System.out.println("정답입니다");
else
System.out.println("오답입니다");
}
}
-----------------------------------
입력받은 값이 문자이면 "문자"라고 출력
아니면 "Other"이라고 출력
두번째 문법만 이용
public class IfTest1 {
public static void main(String[] args) throws java.io.IOException{
System.out.print("데이터 입력 : ");
int num = System.in.read();
if( ((num <= 'z') && (num >= 'a' )) || ((num <= 'Z') && (num >= 'A')) )
System.out.println("문자");
else
System.out.println("Other");
}
}
-----------------------------------
연산자만 알면 풀 수 있는 문제들
리터를 갤런으로 바꿔보자.
두 개의 double 변수를 이용하여 각각 갤런과 리터값으로 저장하고
갤런값에 해당하는 리터값으로 바꿔보자.
예) double gallon = 3.4, liter = 5.4;
갤런값을 리터값으로 변환하면 얼마?
리터값을 갤런값으로 변환하면 얼마?
1 갤런 = 3.785412 리터라고 가정
public class IfTest1 {
public static void main(String[] args) {
double gallon = 3.4, liter = 5.4;
System.out.println("갤런값을 리터값으로 변환하면 얼마? "+ gallon * 3.785412 +"리터");
System.out.println("리터값을 갤런값으로 변환하면 얼마? "+ liter / 3.785412 +"갤런");
}
}
-----------------------------------
연산자만 알면 풀 수 있는 문제들
달의 중력은 지구의 17%정도 된다.
달에서의 당신의 체중은 얼마인지 출력하시오.
public class IfTest1 {
public static void main(String[] args) {
System.out.println("달에서 저의 몸무게 는 "+ 75 * 0.17 +" 입니다");
}
}
-----------------------------------
연산자만 알면 풀 수 있는 문제들
번개가 얼마나 먼 곳에서 발생했나?(거리 구하기)
번개소리를 들은 사람이 번개가 치는 곳에서부터 몇 피트
떨어져 있는가를 계산하라.
(소리는 공기중을 약 1,100피트/초의 속도로 진행한다.
번개를 본 시간과 천둥소리를 들은 시간사이는 7.2초라고 가정)
public class IfTest1 {
public static void main(String[] args) {
System.out.println("번개가 얼마나 먼 곳에서 발생했나? : "+ 1100 * 7.2 +"피트");
}
}
###################################
###################################
###################################
###################################