D:\java>del *.class //모든 클래스파일 지우기
D:\java>rmdir /s /q target // 안에 내용물있는 폴더 강제로 지우기
D:\java>mkdir target
D:\java>rmdir target // 내용물 없을 때 폴더 지워짐
*run.bat 배치파일을 생성.
파일 안의 내용
@echo off
cls //cmd 창을 깨끗하게.
/p 명령어로 입력을 받아 name에 대입하겠다.
set /p name=클래스명?
echo 입력하신 클래스명은 %name%
//이 라인을 추가함으로써 이미 생성되었던 target 속 파일들을 지우고 새로 그때그때 생성한다.
rmdir /s /q target
(지우지 않으면 target이 이미 있다고 뜬다)
mkdir target //클래스파일을 넣을 폴더 생성
//클래스 파일을 target 디렉토리에 컴파일하여 저장하라.
javac -d target %name%.java
cd target //target 폴더로 이동
java %name%
cd ..
run.bat 을 실행한다 = 이클립스의 실행버튼을 누르는 것과 같다.
배치파일에서는 a = 100 변수를 선언하지 않고 바로 값을 줄 수 있다.
변수명 호출시엔 %a%
cmd에서 무한루프 중단 - > ctrl + c
조건문
: else 문이 있다는 것은 반드시 실행을 보장.
if ~ else 문의 경우.
만약 if에만 temp를 초기화하여 실행하면 오류가 난다.
else문이 없고 if문만 있는 상황에서 temp를 초기화하여 출력하려해도, 오류가 난다.
하지만 else는 실행을 보장하기 때문에 temp를 출력하는 부분에서 오류가 나지 않는다.
else = 1개 실행
public static void main(String[] args) {
int su = 1;
int temp;
System.out.println("befor if...");
if(su < 10) {
System.out.println("true 실행");
temp = 1234;
} else {
System.out.println("false 실행");
temp = 4321;
}
System.out.println("after if..." + temp); //조건이 참이므로 temp에는 1234가 출력된다.
}
}
: 0~1개 실행 , 조건을 만족하지 않기에 검사. 실행을 보장하는 것이 아니기때문에 여러개가 올 수 있다.
그냥 if문이 2개인 것과 else if 문을 넣어주는 것은 실행이 다르다.
if 문 2개의 경우 조건이 2개 다 참이면 2개 모두 실행한다.
else if문은 if의 조건이 false이면 else if의 조건을 검사하는 것이다.
그러나 if 조건, else if 조건 모두 참이면 if만 실행하고 빠져나간다. (else 조건은 검사도 하지 x)
else if 여러개일 경우 조건에 만족하는 else if문만 실행하고 빠져나간다.
public static void main(String[] args){
int su =11;
System.out.println("befor if...");
if(su > 1) {
System.out.println("1. true ");
} else if(su > 10) {
System.out.println("2. false ");
}
System.out.println("after if...");
//출력은 if의 조건이 참이므로 if문만 실행하고 빠져나가기 때문에 true가 나오게 된다.
}
}
✏️ quiz
Q1. 짝수 or 홀수?
Q2. 음수 or 양수?
Q3. 3의 배수?
public static void main(String[] args) {
int su = 5;
if (su % 2 == 0) {
System.out.println(su + " = 짝수");
}
if (su % 2 !=0){
System.out.println(su + " = 홀수");
}
if (su % 3 == 0) {
System.out.println(su + " = 3의 배수");
}
if (su % 3 != 0) {
System.out.println(su + " = 3의 배수가 아니다");
}
if (su >= 0) {
System.out.println(su + " = 양수");
}
if (su < 0) {
System.out.println(su + " = 음수");
}
}
}
다른 방식
if(su > 0) {
System.out.println(su + " = 양수");
} else if (su < 0) {
System.out.println(su + " = 음수");
} else {System.out.println("0입니다.");}
if (su >= 0) {
if (su == 0) {System.out.println("0입니다.");}
else {System.out.println("양수");}
} else {System.out.println("음수");}
public static void main(String[] args){
int su;
if(true){su=1;} //조건문에 써있지만 true니까 반드시 실행할 것이기 때문에 문제가 없다.
System.out.println(su); //그러므로 1출력
}
public static void main(String[] args){
int su;
int temp=4;
//변수는 값이 변하는 것. 때문에 컴파일 입장에선 반드시 true라는 보장을 받지 못한다.
//temp 값이 바뀔 수 있기 때문에 false가 될 수도 있는 것. 그렇기 때문에 컴파일 오류가 난다.
if(temp>3){su=1;} //su가 초기화되지 않았다는 오류 출력
System.out.println(su);
}
컴파일 단계에서 오류가 난다는 것은 진행이 안된 상태인 것이다. (실행을 아직 안한 것)
그 상태에서 컴파일러가 보기에 temp라는 변수의 값은 언제든지 변할 수 있다고 본다. (내가 바꿀 수 있으니까)
자바는 변수 초기화가 안돼있으면 메모리 스캐닝을 방지하기 위해 막는다. 그러므로 su 출력시 오류가 난다.
int su;
int temp=4;
temp=1;
if(temp>3){su=1;}
//else를 쓰면 실행성이 보장된다. 1을 출력.
else{su=1;}
System.out.println(su);
단, if 문이나 else 문이나 초기화 코드는 있어야 한다. 초기화 값은 달라도 되지만 초기화가 없으면 오류.
int su;
int temp=1;
if(temp>0){su=2;}
else{su=2;}
if(su==0){System.out.println("0입니다");}
if(su==1){System.out.println("1입니다");}
if(su==2){System.out.println("2입니다");}
if(su==3){System.out.println("3입니다");}
System.out.println("----------------------");
if(su==0){System.out.println("0입니다");}
if(su>0){
if(su<2){System.out.println("1입니다");}
}
if(su>1){
if(su<3){System.out.println("2입니다");}
}
if(su>2){
if(su<4){System.out.println("3입니다");}
}
바꾼 코드
if(su==0){System.out.println("0입니다");}
if(su>0 && su<2){
System.out.println("1입니다");
}
if(su>1 && su<3){
System.out.println("2입니다");
}
if(su>2 && su<4){
System.out.println("3입니다");
}
else if로 변형
if(su==0){System.out.println("0입니다");}
else if(su<2){
System.out.println("1입니다");
}else if(su<3){
System.out.println("2입니다");
}else if(su<4){
System.out.println("3입니다");
}
/*switch(값- 반드시 실제값)
default - 필수가 아닌 선택 (else의 역할)
break - 주의
case값 - 반드시 값, 값들의 타입이 일치해야한다. ex) switch(su의 값도 일치해야 한다)
*/
Q1. 짝수 or 홀수?
Q2. 음수 or 양수?
Q3. 3의 배수?
int su = 5;
su = su % 2;
switch(su) {
case 0: System.out.println("짝수입니다.");
break;
case 1: System.out.println("홀수입니다.");
break;
}
su = su % 3;
switch(su) {
case 0: System.out.println("3의 배수입니다.");
break;
default: System.out.println("3의 배수가 아닙니다.");
break;
}
result = (su*2+1)%2;
//어떤수던지 2를 곱하는순간 짝수. 거기에 +1을 하면 홀수.
//홀수로 만들면 나머지가 1,-1로 나오기에 양수 음수를 표현하기 쉬워진다.
switch(result) {
case 1: System.out.println("양수입니다.");
break;
case -1: System.out.println("음수입니다.");
break;
default: System.out.println();
반복문
: 중복된 것을 모아서 반복시킨다.
for(초기화; 조건문; 증감){
반복할문장;
}
초기화 ->조건문(true) ->반복할문장 ->증감 ->조건(true) ->반복할문장 ->증감 ->조건(false) ->end
for(int i=0; i<5; i++){
int su; //su는 }를 만나는순간 빠져나가면서 없어짐,반복으로 다시 들어갈때 또 선언 하고 생성하기 때문에 오류가 없다.
su=3;
System.out.println("출력" + su);
}
//위 코드는 비효율적. 변수 선언을 계속해서 공간을 확보하고 쓰고 지우고를 반복하고 있기 때문에.
while(조건문){반복할문장;}
public static void main(String[] args){
while문을 for문의 형태로 이해하기.
int j=0; //초기값
while(j<5){ //조건
System.out.println("j="+j); //반복할문장
j++; //증감
}
}
}
✏️ 구구단 7단만 출력하기
//for문
public static void main(String[] args){
int i;
for(i=1; i<=9; i++){
System.out.println("7x" + i + "=" + 7*i);
}
}
//while문
public static void main(String[] args){
int su=0;
while(su++<9){ //조건 비교하고 +1 증가
System.out.println("7x" + su + "=" + 7*su);
su++;
}
}
:while문과의 차이점은 조건과 상관없이 한번은 실행을 보장한다는 것이다.
주의 - while(); 조건 뒤에 세미콜론이 붙는다.
do{
반복할문장;
}while(조건);