첫 수업

정혅·2024년 2월 5일

더 조은 아카데미

목록 보기
1/76

JDK설치/cmd 이용한 컴파일 /반복문 for/while


JDK 21다운로드 및 설정

  • X64 MSI 다운

  • 파일 탐색기 > 내 pc + 우클릭 후 속성 > 고급 시스템 설정 > 환경변수 > PATH에서 편집 > jdk-21 파일 경로(위치) 붙여서 넣기


단축키

  • win + e = 파일 탐색기

  • ctrl + shift + n = 새 폴더

    수업에서는 javastudy > java>Day1

    나는 class > code>Day1

  • 메모장 단축키 : ctrl + s 저장/ctrl + n 새로운 파일 생성

  • F2 = 파일 탐색기에서 이름 변경

cmd

  • 목록 보는 명령어 = dir

  • . = 현재 디렉토리

  • .. = 상위 디렉토리

  • cd = change directory

cd . 을 치면 현재 디렉토리로 변경

cd ..을 치면 한단계 위에 있는 상위 디렉토리로 변경

cmd 에서 dir 파일 이름 키면 하위 파일들 나와야되는데 왜 안나오는지// (이유는 최상위 디렉토리로 이동하지 않아서 )

  • cd \ = 최상위 디렉토리

  • jdk는 혅안에 있는게 아니기 때문에 최상위 디렉토리로 이동 후에 찾아줘야한다.

  • 오류가 나면 cmd에 표현된다.

    • 에러메시지를 확인하면 어느 줄이 잘못되었는지 꺽새로도 표시가 되므로 항상 읽어보기

    • 수정 후에는 다시 컴파일 후 출력 해야한다.

Hello World 만들어보기

  • 메모에 class 변수 {} 생성해서 c:class\code\Day1에 ctrl +s 저장/ ctrl + n은 새로 생성

    저장할때 tx---t가 아닌 모든 파일로 설정해서 이름.java로 저장해야한다.

  • cmd에서 javac(컴파일 시키는 명령어)를 이용해 확인할 수 있는데

    ex)" javac Hello.java " 를 작성하면 파일탐색기에서 Hello.class가 생성된것을 눈으로 볼 수 있다.

class 이름은 Good이라고 하고 파일 명은 Nice라고 저장한 후 Nice로 컴파일하면 Class 파일은 class이름인 Good class가 생성된다.

위 사진에 보면 Nice.java를 입력했는데 탐색기를 확인하면 파일 안 변수명인 Good .class가 생성된것이 보인다.

노트에 hello world 출력해서 만들기

  1. 메모장을 이용해서 .java를 만든다.(cmd에 notepad치면 )

    class Hello
    {
        public static void main(String[]args)
        {
            System.out.println("Hello World");
        }
    }
  2. 파일에 저장한다.꼭 .java로 저장해야한다*(.txt안됌)

  3. cmd를 켜서 상위 디렉토리로 변경해서 파일을 저장한 곳까지 이동시킨 후 저장한 파일명(=변수명)을 컴파일해준다

    파일을 저장한 곳까지 이동할때는 'cd'를 꼭 사용해주기!

    cd c:class\code\Day1 (몇단어만 작성하고 tap키 누르면 자동으로 첫번째 파일 나오게해준다.)

    컴파일 하는 명령어는 javac 파일명.java, 출력하는 명령어 java

  4. 컴파일 후 java라는 명령어를 이용해 println안에 쓴 문장을 출력 해준다. (java Hello)

연습) 컴파일 후 HyunJi라는 문장 출력하기

  1. 메모장을 이용해 .java를 만든다

  2. 파일을 저장한다

  3. cmd를 켜 상위 디렉토리 > 메모장을 저장한 디렉토리로 이동한다.

  4. 메모장을 컴파일한다.

  5. 문장을 출력한다.

메모장에 쓴 문장

    class New
{
    public static void main(String[]args)
    {
        System.out.println("Hi, my name is HyunJi");
    }
}

println - 줄 바꿈

print = 줄 바꿈 x ,이어져서

cmd에 컴파일 시키는 문장

키보드 화살표 위, 아래 해보면 최근에 작성했던 문장들이 자동으로 완성된다.


잠깐 보는 형변환

  • 문자열 +int 는 자료형이 다르기 때문에 정수가 자동으로 문자열로 형변환된다.

    "Hello" + 3 = X / "Hello" + "3" 으로 형변환

    "Hello" + 5 + 3 > Hello53 이렇게 출력


기본 개념

  1. 변수

    • 제일 위 몰아서 선언하는 것이 제일 좋음 (소스코드 파악 용이)

    • 소문자로 시작

int num

변수 변수명

  • 클래스 이름은 대문자(암묵적 약속) But 숫자로 시작할 수는 X

  • 변수는 소문자로 시작한다

클래스, 변수등 은 모두 식별자 라고 한다.

이 식별자들은 숫자로 시작할 수 없고 _, $를 제외한 특수기호는 사용할 수 없다.

int num = 5

  • 프로그래밍 에서는 = 왼쪽값에 대입된다는 의미
int num1 = 5, num2 = 10;
  • 자료형이 같으면 가능 / 다르면 불가능
Class Test
{
    public static void main(Strig[]args)

    int i; //지역변수 (Local Variable)
    System.out.println(i);
}

지역변수는 반드시 초기화해줘야한다.

  • 위 문장은 초기화해주지 않아 에러 난다.

반복문 for문

  • for(초기값;조건;증감) > 없어도 에러는 나지 않음 문법상 이상 X
  • for() 조건이 비어있으면 true로 인식 > 문장 진행
  • for() 괄호 안에 내용이 없어도 세미콜론;은 필수 (아니면 에러)
int i = 0;
for(i = 0; i < 3; i++)
{
    System.out.println(i + "Hi"); > 
}
}
  • for문이 진행되는 순서
  1. i = 0;

  2. i < 3

  3. for{System.out.println(i + "Hi"} > 중괄호 안에 조건문 실행

  4. i++

  5. i < 3

  6. 3번과 같이 중괄호 조건문 실행

0부터 시작해 3보다 작은 값을 출력해 2Hi 까지만 출력된다.

반복문 for 연습

int i = 0;
		for(i = 0; i < 8; i++){
			System.out.println("Score" + i);
		}

7까지 출력

반복문 for문 연습 2 - Hello 10번 출력하기

class For2{
	public static void main(String[]args){
		int i = 0;
		for(i = 0; i < 11; i++) {
			System.out.println("Hello" + i);
		}
	}
}

반복문 for문 - 누적값 알기

  1. 각 합을 구한다.

  2. 각 항을 더한다.

    • 항을 100까지 더한다.
class Test{
    public static void main(String[]args){
        int i = 0, sum = 0;
        for(i = 1; i <= 5;i++){
            sum = sum + i;
            System.out.println("i=" + i + "sum=" + sum);
        }
    }
}


for문 주의사항

for문 중괄호 생략

class T1{
	public static void main(String[]args){
		int i = 10;
		for(i = 0; i < 3; i++)
			System.out.pritnln("Hi");
		System.out.println("Bye");

	}
}
  • for문은 중괄호가 없어도 프로그램 진행 가능

    대신 for문에 있는 문장은 하나로만 인식

    그러므로 위 문장은 Hi만 3번 반복

    Bye출력 문장은 들여쓰기 해줘야함(for문이 아니기에)

for문 세미콜론 존재
class T1{
	public static void main(String[]args){
		int i = 10;
		for(i = 0; i < 3; i++);{
			System.out.pritnln("Hi");
			System.out.println("Bye");
		
         }
	}
}

퀴즈 - (이 다섯문제의 알고리즘은 같다.)

  1. 1~100까지의 합

  2. 1~100까지 짝수의 합

  3. 1~100까지 4의 배수의 개수

  4. 7의 배수의 합이 최초로 1000을 넘는 수와 그 수가 몇번째 항인지

  5. 5 4 3 2 1 이 되도록 (5!)


class Test1{
    public static void main(String[]args){
        int i = 0, sum = 0;
        for(i = 0; i <= 100; i++){
            sum = sum + i;
            System.out.println(sum);
        }
    }
}

class Test2{
    public static void main(String[]args){
        int i = 0, sum = 0;
        for(i = 2; i <= 100; i = i+2){ //짝수의 배수 초기값이 2니까 2로 초기
            sum = sum + i;
            System.out.println("i = " + i + " sum = " + sum);
        }
    }
}


class Test3{
    public static void main(String[]args){
        int i = 0, cnt = 0; 
        for(i = 4; i <=100; i= i+4){
            cnt = cnt + 1;
            System.out.println("4의 배수" + i + " 개수" + cnt);
        }
    }
}
  • 변수는 의미 있게 생성해야 한다. 개수를 구하는 것이기 때문에 count > cnt로 변수 생성


class Test4{
    public static void main(String[]args){
        int i = 0, sum = 0, cnt = 0;
        for(i = 7; sum <= 1000; i = i+7){
            sum = (sum + i);
            cnt = cnt + 1;
            System.out.println("현재 수: " + i +" / 7의 배수의 합: " + sum + " / " + count + "번째 항");
            }
        }
}
  • 배수의 합이 1000이 넘어야 하지 않기 때문에 조건을 sum에 줘야한다.

  • for (i = 7; sum > 1000; i = i +7) 이렇게 사용하면 거짓이여서 for문이 수행되지 않는다.

  • sum <= 1000 으로 변환시켜서 sum 이 1000보다 작은동안 수행할 수 있도록 변경


class Test5{
    public static void main(String[]args){
        int i = 0, fac = 1;
        for(i = 1; i <= 5; i = i + 1){
            fac= (fac * i);
            System.out.println("i= " + i + ", fac = " + fac);
        }
    } 
}
  • [5!] = 1 2 3 4 5
  • fac은 곱해져야 할 수이기 때문에 0이 아닌 1로 초기화 해줘야한다.


While문

조건이 참인동안 괄호 안 문장을 수행한다
괄호 안이 비어있으면 for과 마찬가지로 에러 발생

while은 반복의 횟수를 알 수 없으며, 특정 조건이 충족하는 한 계속 루프를 돌리고 싶은 경우에 적당하다.

  • while문 작성 방법
    초기식;
    while(조건식){
    반복할 문장;
    증감식;
    }
class Q1{
    public static void main(String[]args){
        int i = 0;
        while(i < 3){
        System.out.println(i);
        }
    }
}
  • 이 식은 무한 루프다.(증감연산자가 없기때)

    • (ctrl + c = 무한루프를 빠져나올 수 있는 단축키)

while문 주의사항

int i = 0; while( i < 3);

세미콜론을 붙이면 무한로프가 된다. 프로그램 오류 x


퀴즈 - 같은 알고리즘

  1. 1~100까지의 합

  2. 1~100까지 짝수의 합

  3. 1~100까지 4의 배수의 개수

  4. 7의 배수의 합이 최초로 1000을 넘는 수와 그 수가 몇번째 항인지

  5. 5 4 3 2 1 이 되도록 (5!)

class Q1{
	public static void main(String[]args){
		int i = 0, sum = 0;
		while(i <= 100){
			
			System.out.println("i = " + i + " sum = " + sum);
			i++;
			sum = sum + i;
		}
	}
}

[틀린 문장]

int i = 0, sum = 0;
		while(i < 100){
			i++;
			sum = sum + i;
			System.out.println("i = " + i + " sum = " + sum);
			
		}

i < 100으로 조건을 해놨지만 출력값은

i <= 100인것처럼 100까지 출력된다.

증감연산자가 syso보다 앞에 있기 때문이다.

따라서 while문은 증감연산자를 제일 마지막으로 빼놓아야한다. (for문도 증감 연산자가 마지막에 수행되기 때문에)


class Q2{
	public static void main(String[]args){
		int i = 0, sum = 0;
		while (i <= 100){
	
			System.out.println("i = " + i + " / sum = " + sum);
			i = i + 2;
			sum = sum + i;
		}
	}
}

class Q3{
	public static void main(String[]args){
		int i = 0, cnt = 0;
		while ( i <= 100){
			
			System.out.println("4의 배수: " + i + " / 개수: " + cnt);
			i = i + 4;
			cnt = cnt + 1;
		}
	}
}

class Q4{
	public static void main(String[]args){
		int i = 7, sum = 0, cnt = 0;
		while ( sum <= 1000){
			
			sum = sum + i;
			cnt = cnt + 1;
			System.out.println("i = : " + i + " / sum = " + sum + " / cnt = " + cnt);
			i = i + 7;
			
		}
	}
}

[틀린 문장]

int i = 7, sum = 0, cnt = 0;
		while ( sum <= 1000){
			
			System.out.println("i = : " + i + " / sum = " + sum + " / cnt = " + cnt);
			i = i + 7;
			sum = sum + i;
			cnt = cnt + 1;
		}

i 증감 연산자 뒤에 sum/cnt 증가값을 으면 결과값이 원하는것과 다르게 나온다.

sum/cnt는 누적값과 개수이기때문에 println전에 나와도 상관없고, 주요 변수 i는 마지막에 존재해야한다.


class Q5{
	public static void main(String[]args){
		int i = 1, multi = 1;
		while(i <= 5){
			
			multi = multi * i;
			System.out.println("i = " + i + " / multi = " + multi);
			i++;
		}
	}
}

4번 문제와 같이 주요 변수 i는 항상 마지막에!


do~while 문

먼저 실행 후 조건 확인

  • do while문 작성방법
    초기식;
    do{
    증감식;
    반복할 문장;
    }while(조건식); while문 뒤에 세미콜론!
class T1{
	public static void main(String[]args){
		int i = 10;
		do{
			System.out.println(i);
			i++;
		}while(i < 3); //일반 while문과 다르게 세미콜론
	} System.out.println("끝"); //while문장 종료 후 다은 중괄호인 문장 인식해 끝 이라는 문장 출력
}

break / continue

int i;

// break; 사용
for(i=1; i<=7; i++) {
		if(i==5) {
			break; 
		}
		System.out.println(i); //1234 > println
}
System.out.println();
		
// continue 사용	
for(i=1; i<=7; i++) {
		if(i==5) {
			continue;
		}
		System.out.println(i); //1234567 > println
}
  • break 은 만나자마자 해당 반복문을 탈출함. i의 값이 5가 되면 5를 포함한 이후 값들은 아예 출력되지 않음.

  • continue 는 반복문안에서 어떤 조건을 충족하였을때 수행문을 수행하지 않고 다시 조건을 검토하게 하는 기능을 합니다
    i의 값이 5가되어도 5를 제외한 나머지 값들은 정상적으로 출력됨.


무한루프 돌리는 방법

while(true) > 이걸 더 선호(짧아서)

for(;;)


오늘 공부한 내용은 다음날 오전 학원에서 직접 손으로 코딩해본다.

0개의 댓글