국비지원학원/Java

22일차

초코맛 2018. 11. 21. 01:29
반응형
<Java SE>
*제어문
-조건문
-반복문
-분기문



*제어문
  • 프로그램의 순차적인 흐름을 변경할수 있는 문장들             <언어가 달라도 문법만 바뀔뿐 정의가 바뀌진 않는다.
  • 조건문, 반복문, 분기문
field class 클래스 {
         local public static void main (String[] args){             //<main mathod가들어있는 클래스를 보고 java application이라고 한다.
         }
}
  • <프로그램은 연산과 제어의 혼합
  • 조건문 : if, switch~case
  • 반복문 : for, while, do
  • 분기문 : break, continue, return
  • <AL_UTF-8 character set /Mysql은 UTF-8?이 아니니까 나왔겠지 euckr

-조건문
-if
  • 자바에 존재하는 모든값을 비교할수 있다.
  • if : 모든값 비교할수 있다.    <객체, 문자열값, 문자값, 등등
  •       =>정수, 실수, 문자, boolean, 문자열, 객체 다~~
  • <상황제어시에 주로 사용하게 된다.
  • 조건에 맞을 때 실행될 코드를 작성하고 실행하게 만드는 문장(상황제어)   <한문장일수도 여러문장일수도 
  • if(단일 if), if~else(if~else문), 다중 if     3가지로 사용       <(문법은다르지만 흐름은 같다.)
  • 관계연산자로 여러조건 판별할수도 있다.
    -단일 if
  • 조건에 맞는 경우에만 코드가 실행되어야 할때
  • 문법) if (조건식) {
  •          조건에 맞을때 수행할 문장들;
  •             ...
  •          }


 
//java
if (조건식) {
         조건에 맞을때 수행할 문장들;
            ...
 }
//PL/SQL
if 조건식 then
    ...
end if;
//Python
if 조건식;
     수행 코드;
//아마도

  • if 는 플로우 차트를 그려서 보게 되는데 만국공통어 처럼 플로우차트 하나보고 다양한 언어로의 코딩이 가능하다.
  • 좀있다가, gliffy 라는 프로그램이 플로우차트 만드는 어플리케이션이 있는데 깔면 유료라서 윈도우에 크롬으로 추가하여 윈도우에서 무료로..야매사용 
  • if ex)


 
<java>

class 클래스 {
    public static void main (String[] args){
    int i = 5;
    if(i<0){
        i = -i;
    }
    System.out.println(i);
}
<오라클>

declare
    i number;
begin
    if i <0 then
         i:=-i;
    end if;
    dbms.output.put_line(i);
end;
/
  • eclipse 실행)
  • 나중엔 플러그인이 255자 넘어가는게 있어서 그거깔기 전까진 전처럼 백업/255자 넘어가면 백업이 안된다?
  • 이클립스 열고 컨트롤 w로 class다닫고 새 패키지 만들기
  • TestIfTest <= 이렇게 단어 연결시에 첫글자 대문자/나머지 소문자 => 낙타체
  • gliffy 실행)
  • co/ beebee6656@gmail.com으로 가입(크롬 웹으로 추가해서 사용)
  • Flow chart)
  • 메소드 호출이 안돼고, 복잡한 코드는 그릴수 없다. 태생적 한계
  • UI그릴수도 있지만 무료인 오븐을 가지고 할예정..

*주석 (Coment)
  • <주석을 걸면 컴파일러가 해석을 안한다.
  • <우리가 실행하는 컴파일러는 javac.exe 인데, 실행시 클래스명.class가 되어 bytecode에는 주석이 생기지 않느다. 소스코드에만!
  • 주석은 compiler가 해석하지 않는다.
  •              =>byte code에는 주석이 생성되지 않는다. (class파일에는 없다는 말)
  • 코드의 부연설명을 붙일때(자세하게 적어야), 코드의 실행을 막을때(디버그용)
  • (일주일만 지나도 까먹게 되어서, 다른사람이 유지보수를 하게 될떄 개발은 SI가 유지보수는 SM이 하게 될떄)
  • 자바의 주석은 3가지
  • 주석의 형태
    • //한줄주석 단축키  : ctrl+/
    • /*
    • 여러줄
    • 주석
    • 단축키 : ctrl+shift+/
    • */
    • /**
    • *java Doc 주석
    • *닥주석인 경우 javadoc.exe를 사용하여 API Document를 생성할때 사용
    • *클래스명에 마우스를 올리면 설명해준다
    • *단축키 : alt+shift+j 
    • */

 


  • if ex)
package day1119; //패키지가 들어갔고 퍼블릭이 클래스에  붙었다.자바닥 만들때 퍼블릭 안붙은건 안나온다.
//닥주석에는 넣어야 한다. 줄바꿈
/**
* 조건문의 사용
* 단일 if문 : 조건에 맞는 경우에만 코들를 실행해야할때.
* 문법) if (조건식) {
*              조건에 맞을때 수행 문장들...;
*      }
* 자바닥= 닥주석(alt shift j)
* 이걸로 나중에 닥을 만들게 된다?doc?
*
* @author owner
*/
public class TestIf {
     
     //Constant : 변수를 상수처럼 사용할때.(값을 변경하지 못하는  변수) 바뀌지 않아야 하는값들
     public static final int FLAG_VALUE = 1250;
     public static final int FLAG_CNT = 20;
     //constant명은 대문자!!블럭잡고 ctrl shift x 대문자~!
     //ctrl shift y 소문자
     public static void main(String[] args) {
/*
           int i = 10;
           if (i < 0) {//단일 if ex
                i = -i;
           } // end if
           System.out.println("i= " + i);
*/
           //이름을 입력받아 이름이 이재찬이면 이름을 출력하기전에  반장을 출력하고 그렇지 않다면 이름만 출력
           //입력받는것이기 때문에 Run의 화살표 configuration  눌러서 Argument값 입력
           if (args[0].equals("이재찬")) {
                System.out.print("반장 ");            
           }//end if
           System.out.println(args[0]);
           
           //숫자형태의 문자열을 정수로 변환하고 싶을때 Parse  double도있고 long도있고 여러매소드 존재
           int i = Integer.parseInt(args[1]);
           int j = Integer.parseInt(args[2]);
           
           System.out.println(i+" + "+j +" = "+(i+j));
           
           //args[3]을 입력받아 그수가 20이내라면 1250과 입력수를  곱하여 출력하고
           //그렇지 않으면 20보다 크다면 1250에 10%를 더한 값과  입력수를 곱하여 출력.
//         int ii = Integer.parseInt(args[3]);
//         if (ii<=20) {
//              System.out.println("args[3]은 20이내 " +  ii*1250);
//         }
//         if (ii>20) {
//              System.out.println("args[3]은 20외 " +  (1250+(1250*0.1))*ii);
//         }
//         //무조건 정수일땐 캐스팅~!
//         //자바는 형에대해서 오라클보다 엄격
           
           //답)
           //<기준값은 constant => 상수 => 필드에 선언
           //java day1119.TestIf 문자열 정수 정수 정수   <타고들어오는 args가 문자열이라 비교가 되지 않는다.
           //                     0   1  1  3
           int input_value = Integer.parseInt(args[3]);
           int sum = TestIf.FLAG_VALUE;
           
           if(input_value>TestIf.FLAG_CNT) {
                sum = (int)(TestIf.FLAG_VALUE +  TestIf.FLAG_VALUE* 0.1);
                //0.1은 8byte의 자리로 다른 값들마저도  8byte의  double로 다바뀌어 연산이 되어 casting해줌
           }//end if
           System.out.println(sum*input_value);
           
     }// main
}// class
<ctrl F11 코드실행
<ctrl shift f 정리 main method 안에서만..? 나중엔 난리난다.
<==는 참조형과 기본형이 다른결과?
<args[0] equals("비교할 문자열")    여러개발자가 같이보는거니까     문자열 비교
<args[0] == "이재찬" 으로 썼다.
<자바에서 입력되는 문자열을 정슈ㅜ로바꿀때는 IntergerMethod에 ParseInt

<ctrl+spacebar로 바로 원하는단어 찾을수 있고, 자주쓰이는것도 알수있다.>

 

<gliffy_Test>

 



-if~else
  • 둘중 하나의 코드가 반드시 실행되어야 할때
  • 문법)
if (조건식) {
    조건이 맞을때 수행코드;
    ...
}else {
    조건이 맞지 않을때 수행코드;
    ...
}
  • <어느쪽도 한줄이면 괄호 생략가능하지만 가독성측면에서 넣는게 좋다.
  • if는 실행되어야할 코드가 한줄이라면 { } 를 생략할수 있다.
  • ex)
package day1119;
/**
* if~else : 둘중 하나의 코드를 실행해야할 때 사용
* 문법) if (조건식){
*         조건에 맞을 때 수행할 문장; 들...
*      } else{
*         조건에 맞지 않을때 수행할 문장들;
*      }
*      
* @author owner
*/
public class TestIfElse {
     public static void main(String[] args) {
           int i = 16;
           //변수에 존재하는 수가 음수인지 양수인지를 판단  
           System.out.print(i+"는(은) ");
           if (i < 0) {
                System.out.println("음수");
           }else {
                System.out.println("양수");           
           }//end if
           //변수에 존재하는 수가 홀수인지 짝수인지를 판단
           //수행하는 행수가 1행 이라면 중괄호{}는 생략할수  있습니다.
           if(i%2==0) {
                System.out.println("짝수");
                //System.out.println("홀수우우우ㅜㅇ");//이자리에  적게되면 괄호가 없어 벗어남 else를 끊어서 Error
           } else {
                System.out.println("홀수");
           }//end if
           //System.out.println("홀수우우우ㅜㅇ");//괄호없으면  한줄만 else의 수행코드
           
           
           //입력하는 수가 3의 배수라면 "짝"을 출력하고 그렇지  않다면 입력한 수를 출력하세요.
           int a = Integer.parseInt(args[0]);
           if (a%3 == 0) {
                System.out.println("짝");
           } else {
                System.out.println(a);
           }//end if
     }//main
}//class



-다중 if (else~if)
  • 연관된 여러 조건을 비교할 때
  • 문법)
if (조건식) {
    조건에 맞을때 수행문장;
} else if (조건식){
    조건에 맞을때 수행문장;
} else {
    모든 조건이 맞지 않을때 수행문장;
}
  • 마지막 else는 생략 가능

 
  • ex) 0~100사이 값인지 판단

 
  • ex)
package day1119;
/**
* else~if : 연관된 여러 조건을 비교할 때.
* 문법) if(조건식){
*         조건에 맞을때 수행 문장;
*      } else if(조건식) {
*         조건에 맞을때 수행 문장;
*      }
*      } else if(조건식) {
*         조건에 맞을때 수행 문장;
*      }
*      } else if(조건식) {
*         조건에 맞을때 수행 문장;
*      }
*            .
*            .
*      }else {
*         모든 조건에 맞지 않을 때 수행 문장;
*      }
*      //br>이라는건 document에서 줄띄움
* @author owner
*/
public class TestElseIF {
     public static void main(String[] args) {
           //입력받은수가 홀수인지 짝수인지
           int i = Integer.parseInt(args[0]);
           
           System.out.print(i+ "는(은)");
           if(i<0) {
                System.out.println("0보다 작아서 실패");
           }else if(i>100) {
                System.out.println("100보다 커서 실패");
           }else {
                System.out.println("입력 성공");
           }//end else
           
           
           //이름을 입력받아 "이재찬"이면 반장을 "이봉현, 박영민,  김정운, 오영근" 이면 조장을
           //그렇지 않으면 "평민"을 이름앞에 출력 하세요. "직책  이름"
           if(args[1].equals("이재찬")) {
                System.out.print("반장 ");
           } else if(args[1].equals("이봉현")){
                System.out.print("조장 ");
           } else if(args[1].equals("박영민")){
                System.out.print("조장 ");
           } else if(args[1].equals("김정운")){
                System.out.print("조장 ");
           } else if(args[1].equals("오영근")){
                System.out.print("조장 ");
           } else {
                System.out.print("평민 ");
           }//end else
           System.out.println(args[1] + "님 안녕하세요.");
           
//else  if(args[1].equals("이봉현"))||(args[1].equals("박영민"))||
          //(args[1].equals("김정운"))||(args[1].equals("오영근")) {
           //문자열은 equals만 가능..같다만
           
           
           //태어난 해(1995)를 입력받아 띠(12) 구하기
           //11-양, 10-말, 9-뱀, 8-용, 7-토끼, 6-호랑이, 5-소,  4-쥐, 3-돼지, 2-개, 1-닭, 0-원숭이
           int b = Integer.parseInt(args[2]);
           System.out.print(b+"년도의 띠는(은) ");
           if (b%12==0) {
                System.out.println("원숭이");
           } else if (b%12==1) {
                System.out.println("닭");
           } else if (b%12==2) {
                System.out.println("개");
           } else if (b%12==3) {
                System.out.println("돼지");
           } else if (b%12==4) {
                System.out.println("쥐");
           } else if (b%12==5) {
                System.out.println("소");
           } else if (b%12==6) {
                System.out.println("호랑이");
           } else if (b%12==7) {
                System.out.println("토끼");
           } else if (b%12==8) {
                System.out.println("용");
           } else if (b%12==9) {
                System.out.println("뱀");
           } else if (b%12==10) {
                System.out.println("말");
           } else if (b%12==11) {
                System.out.println("양");
           }
     }//main
}//class

-Switch~case

 
  • <자바 버전에 따라 다르긴한데
  • 일치하는 정수를 비교할때 주로 사용.
  • JDK1.7 이상, 에서부터 (일치하는) 문자열도 비교할수 있게됨.   <JDK 는 Java Development ket의 약어
  • 문법)
switch (변수명) {
    case 상수 : 수행할 문장;
    case 상수 : 수행할 문장;
    case 상수 : ...
        .
        .
    default : 일치하는 상수가 없을때 수행할 문장;
}
  • <변수에는 정수를 저장할수 있는 변수가 온다. (byte, short, int, long)...이지만 long은 정수를 저장하긴하지만 쓸수 없다. + char +(JDK1.7부터 String)
  • <option으로 break문 사용.
  • <일치하는 것을 찾아서 거기서부터 수행해서 아래까지 쭉탄다... 
  • <break; 라는건 분기문인데, 반복문, 조건문 빠져나갈때 사용.  만나면 나감.
  • break 분기문을 사용
  • =>switch~case, for, while, do~while을 빠져나갈때 사용.         <오라클에서의 exit와 같다.
  • <딱 떨어지는 정수 비교시 if 보다 빠르다 
  • <태생적으로 범위는 물어보기 힘들다. 코딩량이 많아짐
  • <default도 옵션???
  • case는 입력되는 변수(의 데이터타입)에 따라 다른 범위를 가진다.
  • ex)
package day1119;
/**
* switch~case : 정수를 비교할 때.(JDK1.7에서부터는 문자열도  비교가능)
* 문법) switch(변수명 {
*         case 상수 : 수행문장;
*         case 상수 : 수행문장;
*                 .
*                 .
*         default : 일치하는 상수가 없을 때 수행문장;
*      }
* @author owner
*/
public class TestSwitchCase {
     public static void main(String[] args) {
           //String i = "1";    //JDK1.7에서부터 사용가능
           //long은 넣을수 없다.int로 변환되는 형만 가능
           //char '1'은 유니코드 45가 나와 default로 간다.
           //String 일때는 case 상수에도 다 쌍따옴표!
           //컴파일러의 버전을 바꿀수있다 프로젝에서 오른쪽
           int i = 0;
           
           //switch에 입력되는 변수의 데이터형은 byte, short,  int, char, String
           switch(i) {     
           //case는 입력되는 변수에 따라 다른 범위를 가진다.
           //signed value 인것...
           case 0:System.out.println("새벽");    //0인경우 다출력
           case 1:System.out.println("아침");    //1인경우  점심저녁새벽
           case 32767:System.out.println("점심");     //2인경우  저녁 새벽
           default : System.out.println("저녁");      //3~이상은  다 새벽
           }//end switch
     }//main
}//class
<Flow Chart>

 


*Compiler 변경
  • 컴파일러의 버전을 바꿀수 있다. 버전을 맞추는게 매우 중요~~~
  • 프로젝에서 우클릭- 맨마지막-compiler
  • 회사에서 서버에 자바를 깔으면 한달이 걸린다 오류잡고 ~하느라고 깔기 힘듬 그래서 컴파일버전을 다양히
  • 엄청 좋은기능 ~!~!
반응형

'국비지원학원 > Java' 카테고리의 다른 글

24일차  (0) 2018.11.23
23일차  (0) 2018.11.21
21일차  (0) 2018.11.21
20일차  (0) 2018.11.18
19일차  (0) 2018.11.15