20211226 - JAVA 1~3회차 강의 복습

20211226 - JAVA 1~3회차 강의 복습

어디에서나 사용할 수 있게 패스 설정

내PC > 속성 > 고급 시스템 설정 > 환경 변수 > 시스템 변수 > Path 편집

C:\~\bin 경로 새로만들기로 등록

자바는 대소문자를 구별한다.

1 2 3 4 5 6 7 8 class Hello { public static void main( String [] args) { System . out . println ( "Hello World" ); //ln 개행한다는 의미(출력하고 줄바꿈) } } Colored by Color Scripter cs

1 2 3 4 5 6 7 class Good { public static void main( String [] args) { System . out . println ( "Good" ); } } Colored by Color Scripter cs

위 기본 구조 외우기

기본 구조 class Hello {} //Hello는 클래스 이름, 대문자로 시작하는게 암묵적 룰

main 메소드는 반드시 필요

메소드 앞에 반환하는 형을 명시해야 한다.

public static void main: 반환하지 않음을 의미

String 문자열 클래스

메모장 저장 시 ANSI로 저장해야 윈도우에서 안 깨진다.

dir 목록보기 명령 이 붙지 않은 건 그냥 파일

. 현재 디렉토리

.. 상위 디렉토리

//점 한개, 두개는 무조건 나옴

cd. 현재 디렉토리로 위치를 바꾸는 명령

cd.. 상위

cd \ 한번에 최상위 드라이브로 가기

cd c:\1215\Day1 한번에 원하는 곳으로 갈 수 있는 절대경로

javac Hello.java 컴파일러로 이 파일을 연다. > class파일이 생김

cd 1215 cd Day1

중요한 부분: 데이터타입(자료형), 가독성

읽기 좋은 코드가 좋은 코드(들여쓰기, 띄어쓰기)

명령어 println > print : 개행하지 않는다.

.java 파일 내용이 바뀌면 cmd에서 컴파일도 새로 해줘야 반영된다.

cmd 위, 아래 화살표로 이전 명령어를 기억한다

1 2 3 4 5 6 7 8

9

10 class JavaAdd { public static void main( String [] args) { System . out . println ( 2 + 3 ); //5로 출력 System . out . println ( "2+3" ); //2+3 그대로 출력 System . out . println ( 2+3+"Hello" ); //5Hello

System . out . println ( "Hello"+2+3 ); //Hello23

} } Colored by Color Scripter cs

2+3+"Hello" > 왼쪽->오른쪽 순으로 연산

2+3까지 연산하고 자료형이 달라서 연산 불가 > 그대로 출력

"Hello"+2+3 > 가장 왼쪽부터 계속 연산 불가하여 그대로 출력 > Hello23

For 반복문을 배우기 위해 변수를 먼저 알아야 한다.

int 정수(소수점이 없는 숫자)를 저장하는 자료형

= 대입연산자

1 2 3 4 5 6 7 8 9 10 class Variable { public static void main( String [] args) { int num = 10 ; //선언 System . out . println (num); //10 num = 100 ; System . out . println (num); //100 } } Colored by Color Scripter cs

1 int i = 10, j = 20; cs

동일한 중괄호 안에서 동일한 이름의 변수를 선언할 수 없다.

자료형이 동일할 경우 한 줄에서 한번에 선언 가능

1 2 3 4 5 6 7 8 9 10 11 class HiRep { public static void main( String [] args) { int i = 0 ; for (i = 0 ;i < 3 ;i = i + 1 ) { System . out . println (i + "Hi" ); } } } Colored by Color Scripter cs

대입연산자는 연산자 우선 순위가 가장 낮다.

1부터 100까지 더하기

1. 더할 수를 구하기 > 변수 i

2. 구한 수를 더하기 > 변수 sum

1 2 3 4 5 6 7 8 9 10 11 12 class Add100 { public static void main( String [] args) { int i = 0 , sum = 0 ; for (i = 1 ;i < = 100 ;i = i + 1 ) { sum = sum + i; System . out . println ( "i=" + i + " sum=" + sum); } } } Colored by Color Scripter cs

1. 1부터 100까지의 합

1 2 3 4 5 6 7 8 9 10 11 12 class Add100 { public static void main( String [] args) { int i = 0 , sum = 0 ; for (i = 1 ;i < = 100 ;i = i + 1 ) { sum = sum + i; System . out . println ( "i=" + i + " sum=" + sum); } } } Colored by Color Scripter cs

2. 1부터 100까지의 짝수의 합

1 2 3 4 5 6 7 8 9 10 11 12 class AddEven100 { public static void main( String [] args) { int i = 0 , sum = 0 ; for (i = 2 ;i < = 100 ;i = i + 2 ) { sum = sum + i; System . out . println (sum); } } } Colored by Color Scripter cs 3. 1부터 100까지의 4의 배수의 갯수

1 2 3 4 5 6 7 8 9 10 11 12 class Multi4 { 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 (sum + "개" ); } } } Colored by Color Scripter cs 4. 7의 배수의 합이 최초로 1000을 넘는 수가 몇번째 항인지

5. 5!

1 2 3 4 5 6 7 8 9 10 11 12 class Fac { 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 + "! " + fac); } } } Colored by Color Scripter cs

테스트 손코딩 할때 헷갈린 부분:

for(i=0;i<=100;i=i+1)이라고 했을 때 +증가하고 시작하는 게 아니라

i=0 먼저 적용되고 다음 회차부터 +증가되는 것,

sum 덧셈 cnt 횟수 의미 신경써서 문제 분석하기

JAVA 주석

1 //, /*여러줄*/ cs

12/15 문제. 7의 배수의 합이 최초로 1000을 넘는 수가 몇번째 항인지

1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Add7 { public static void main( String [] args) { int i = 7 , sum = 0 , cnt = 0 ; for (i = 7 ;sum < = 1000 ;i = i + 7 ) { sum = sum + i; cnt = cnt + 1 ; System . out . println ( "count=" + cnt + " i=" + i + " sum=" + sum); } } } Colored by Color Scripter cs

while 반복문

~하는 동안에

for은 초기값;조건;증감이 있지만, while은 조건만 있다.

1 2 3 4 5 6 7 8 9 10 11 12 class Test1 //Test1 클래스 { public static void main( String [] args) { int i = 0 ; while (i < 3 ) //조건이 참이면 출력 { System . out . println (i + "hi" ); i = i + 1 ; //이런 조건이 없으면 i = 0이므로 무한반복 } } } Colored by Color Scripter cs

while 반복문 실습 문제

1. 1부터 100까지의 합

1 2 3 4 5 6 7 8 9 10 11 12 13 class Add { public static void main( String [] args) { int i = 1 , sum = 0 ; while (i < = 100 ) { sum = sum + i; System . out . println (sum); i = i + 1 ; } } } Colored by Color Scripter cs

2. 1부터 100까지의 짝수의 합3. 1부터 100까지의 4의 배수의 갯수

1 2 3 4 5 6 7 8 9 10 11 12 13 class Add2 { public static void main( String [] args) { int i = 2 , sum = 0 ; while (i < = 100 ) { sum = sum + i; System . out . println (sum); i = i + 2 ; } } } Colored by Color Scripter cs

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 class WAdd7 { public static void main( String [] args) { int i = 7 , sum = 0 , cnt = 1 ; while (sum < = 1000 ) { sum = sum + i; System . out . println ( "cnt=" + cnt + "sum=" + sum + "i=" + i); i = i + 7 ; cnt = cnt + 1 ; } } } Colored by Color Scripter cs

5. 5!

1 2 3 4 5 6 7 8 9 10 11 12 13 class Five { public static void main( String [] args) { int i = 1 , sum = 1 ; while (i < = 5 ) { sum = sum * i; System . out . println ( "cnt=" + i + "sum=" + sum); i = i + 1 ; } } } Colored by Color Scripter cs

증감과 출력 순서 주의하기!

위->아래 순차적으로 실행된다.

자료형 boolean -> true, false 두가지 값을 가지고 있다.

== 동일한가, != 서로 다른가

1 2 3 4 5 6 7 8 9 10 11 12 13 class Boo { public static void main( String [] args) { boolean result; result = 5 > 3 ; System . out . println (result); //true 출력 System . out . println ( true ); //true 출력 System . out . println ( 5 < 3 ); //false 출력 System . out . println ( 5 = = 3 ); //false 출력 System . out . println ( 5 ! = 3 ); //true 출력 } } Colored by Color Scripter cs

final int MAX = 5; // final을 붙이면 변수를 상수로 만들어준다, symbolic constant라고 한다.

MAX = 10; // 컴파일에러 발생

프로그래밍 시 암묵적인 룰: 변수 이름이 전체 대문자면 상수를 의미

복합대입연산자

i +=2; //i = i + 2;

i -= 2; //i = i - 2;

i *= 2; //i = i * 2;

i /= 2; //i = i / 2;

i %= 2; //i = i % 2; 나머지 연산자(정수에만 있는 개념)

증감연산자

i++; //i+1

i--; //i-1

단독 사용 시 위치는 앞뒤 상관없다(변수 본인의 값은 위치 상관없이 바뀐다)

대입연산자와 함께 사용 할 경우 상관있다.

result1 = ++num1; //증가한 값이 대입된다.

result2 = num2++; //증가하기 전의 값이 대입된다.

1 2 3 4 5 6 7 8 9 class Sens { public static void main( String [] args) { int num1 = 10 ; System . out . println (num1 + + ); //10 System . out . println (num1); //11 } } Colored by Color Scripter cs

System.out.println(num1++);

변수 값 변경을 따로 선언(num1 = num1++;)하지 않아도 출력한 값이 변수에 저장된다.

예를 들어 System.out.println(num1=num1+2); 으로 출력만 해도 num1 값이 변경되어 있다.

for/while 반복문과 중괄호

중괄호를 지워도 컴파일은 되지만 단 한문장만 for/while에 소속된 문장으로 인식된다.

1 2 3 4 5 6 7 8 9 10 class For1 { public static void main( String [] args) { int i = 0 ; for (i = 0 ;i < 3 ;i + + ) System . out . println ( "hi" ); //세번 출력 System . out . println ( "good" ); //한번 출력 } } Colored by Color Scripter cs

1 2 3 4 5 6 7 8 9 10 class While1 { public static void main( String [] args) { int i = 0 ; while (i < 3 ) System . out . println ( "hi" ); //무한대 출력 i + + ; } } Colored by Color Scripter cs

for/while 반복문과 세미콜론

for/while문의 조건은 true여부를 판단하는 것

int i = 0;

for(;i<3;i++) //for문 내에서 선언문을 지워도 컴파일 가능

for(;j<3;) //증감문 지워도 컴파일 가능, 무한 반복하게 됨, while문과 동일해진다.

for(;;) //컴파일 가능, turu로 인식된다, 무한 반복하게 됨

for() //컴파일 불가능

while(turu) //무한루프

while(false) //한번도 진행되지 않는다

while() //컴파일 불가능

do while 반복문

for 반복문과 while 반복문은 선체크 반복문, 조건을 만족해야 수행한다.

do while문은 후체크 반복문

1 2 3 4 5 6 7 8 9 10 class DoWhile { public static void main( String [] args) { int i = 10 ; do { System . out . println ( "Hi" ); } while (i < 3 ); } } Colored by Color Scripter cs

조건을 만족하든/안하든 무조건 한번은 실행된다.

}while(i<3); 세미콜론 붙여줘야 하는 점 주의!

1 2 3 4 5 6 7 8 9 10 11 class DoWhile { public static void main( String [] args) { int i = 0 ; do { System . out . println ( "Hi" ); i + + ; } while (i < 3 ); } } Colored by Color Scripter cs

do while 반복문 실습 문제

1. 1부터 100까지의 합

1 2 3 4 5 6 7 8 9 10 11 12 class DoWhile1 { public static void main( String [] args) { int i = 1 , sum = 0 ; do { sum += i; System . out . println ( "sum=" + sum + "i=" + i); i + + ; } while (i < = 100 ); } } Colored by Color Scripter cs

2. 1부터 100까지의 짝수의 합

1 2 3 4 5 6 7 8 9 10 11 12 class DoWhile2 { public static void main( String [] args) { int i = 2 , sum = 0 ; do { sum += i; System . out . println ( "sum=" + sum + "i=" + i); i = i + 2 ; } while (i < = 100 ); } } Colored by Color Scripter cs

3. 1부터 100까지의 4의 배수의 갯수

1 2 3 4 5 6 7 8 9 10 11 12 class DoWhile3 { public static void main( String [] args) { int i = 4 , cnt = 0 ; do { cnt += 1 ; System . out . println ( "cnt=" + cnt + "i=" + i); i += 4 ; } while (i < = 100 ); } } Colored by Color Scripter cs

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

1 2 3 4 5 6 7 8 9 10 11 12 13 class DoWhile4 { public static void main( String [] args) { int i = 7 , cnt = 0 , sum = 0 ; do { cnt += 1 ; sum += i; System . out . println ( "cnt=" + cnt + "sum=" + sum + "i=" + i); i += 7 ; } while (sum < = 1000 ); } } Colored by Color Scripter cs

5. 5!

1 2 3 4 5 6 7 8 9 10 11 12 class DoWhile5 { public static void main( String [] args) { int i = 1 , fac = 1 ; do { fac * = i; System . out . println ( "fac=" + fac + "i=" + i); i + + ; } while (i < = 5 ); } } Colored by Color Scripter cs

<손코딩 test 중요한 부분>

프로그램 짜다보면 무한루프를 돌려야 하는 상황이 많다

while(true)

Symbolic constant

final int MAX = 5;

if(조건){} -> 조건이 참이면 실행

else{} -> 조건이 거짓이면 실행

else는 단독으로 사용 불가하며 if가 바로 앞에 사용되어야 한다.

if - else if - else 순으로 사용 가능

if, else if -> 각 조건이 참이면 실행

else if 또한 단독으로 사용 불가하며 if가 바로 앞에 사용되어야 한다.

else: 위에 조건들이 '모두' 거짓이면 실행

java 사용자로부터 입력받기

import java.util.Scanner;

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import java.util. Scanner ; class SCTest { public static void main( String [] args) { Scanner sc = new Scanner ( System . in ); //sc는 만든 변수이름, 사용자로부터 값을 입력받을 수 있다. int num1 = 0 , num2 = 0 ; System . out . println ( "첫 번째 숫자 입력: " ); num1 = sc.nextInt(); //Int 인트 System . out . println ( "두 번째 숫자 입력: " ); num2 = sc.nextInt(); System . out . println ( "당신이 입력한 두 숫자는 " + num1 + "와(과) " + num2 + "입니다." ); } } Colored by Color Scripter cs

예제: 임의의 두 수를 입력받아 큰 수를 출력하시오. 두 수가 서로 같으면 같다고 출력

세 경우 모두 if로만 짤 수도 있지만 else를 활용하여 짜면 실행횟수를 줄일 수 있어서 효율적

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import java.util. Scanner ; class SCt1 { public static void main( String [] args) { Scanner sc = new Scanner ( System . in ); int num1 = 0 , num2 = 0 ; System . out . println ( "첫 번째 숫자 입력: " ); num1 = sc.nextInt(); System . out . println ( "두 번째 숫자 입력: " ); num2 = sc.nextInt(); if (num1 > num2) { System . out . println (num1 + "과(와) " + num2 + " 중 더 큰 수는 " + num1 + "입니다." ); } else if (num1 = = num2) { System . out . println ( "입력한 수는 " + num1 + "과(와) " + num2 + "(으)로 동일합니다." ); } else { System . out . println (num1 + "과(와) " + num2 + " 중 더 큰 수는 " + num2 + "입니다." ); } } } Colored by Color Scripter cs

내 코드에서 아쉬운 부분: if, else if, else에서 속한 실행문이 한줄이므로 중괄호 생략 가능

for(int i=1;i<=100;i++)

if(i%4==0) cnt++;

for(int i=4;i<=100;i+=4)

cnt++;

후자가 더 효율적인 코드. if문이 가장 과부화를 유발한다.

Swap 예제

1 2 3 4 5 6 7 8 9 10 11 12 13 class Swap { public static void main( String [] args) { int num1 = 10 , num2 = 5 ; System . out . println (num1 + " " + num2); //10 5 int num = 0 ; num = num1; num1 = num2; num2 = num; System . out . println (num1 + " " + num2); //5 10 } } Colored by Color Scripter cs

내 코드에서 아쉬운 부분: temp 임시로 많이 쓰는 변수이름 템포러리! 변수이름도 의미있게 짓기

예제: 임의의 5개 숫자를 입력받아 오름차순으로 나열하기(점점 커지게)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 import java.util. Scanner ; class OrderA { public static void main( String [] args) { Scanner sc = new Scanner ( System . in ); int num1 = 0 , num2 = 0 , num3 = 0 , num4 = 0 , num5 = 0 ; System . out . println ( "첫 번째 숫자 입력: " ); num1 = sc.nextInt(); System . out . println ( "두 번째 숫자 입력: " ); num2 = sc.nextInt(); System . out . println ( "세 번째 숫자 입력: " ); num3 = sc.nextInt(); System . out . println ( "네 번째 숫자 입력: " ); num4 = sc.nextInt(); System . out . println ( "다섯 번째 숫자 입력: " ); num5 = sc.nextInt(); int temp = 0 ; if (num1 > num2) { temp = num1; num1 = num2; num2 = temp; } if (num1 > num3) { temp = num1; num1 = num3; num3 = temp; } if (num1 > num4) { temp = num1; num1 = num4; num4 = temp; } if (num1 > num5) { temp = num1; num1 = num5; num5 = temp; } System . out . print ("오름차순 정렬: " + num1 + ", "); if (num2 > num3) { temp = num2; num2 = num3; num3 = temp; } if (num2 > num4) { temp = num2; num2 = num4; num4 = temp; } if (num2 > num5) { temp = num2; num2 = num5; num5 = temp; } System . out . print (num2 + ", "); if (num3 > num4) { temp = num3; num3 = num4; num4 = temp; } if (num3 > num5) { temp = num3; num3 = num5; num5 = temp; } System . out . print (num3 + ", "); if (num4 > num5) { temp = num4; num4 = num5; num5 = temp; } System . out . print (num4 + ", " + num5); } } Colored by Color Scripter cs

내 코드에서 아쉬운 부분: 하나하나 따로 출력할 필요 없이 마지막에 한꺼번에 출력해도 됐음!

규칙성을 가지고 있다 -> 반복문을 적용시킬 수 있다.

반복문을 적용시키기 위해서는 동일한 이름의 변수가 필요 -> 하나의 이름으로 묶을 수 있는게 없을까 -> 배열

continue와 break

반복문 안에서 흐름을 임의로 변경시킬 때 쓸 수 있다.

반복문 밖에서 사용할 수 없다. -> 컴파일 불가

1 2 3 4 5 6 7 8 9 10 11 12 13 class Break { public static void main( String [] args) { int i = 0 ; for (i = 0 ;i < 10 ;i + + ) { if (i > 5 ) break ; System . out . println ( "Hello" ); } System . out . println ( "i=" + i); //6일때 빠져나왔으니 6출력 } } Colored by Color Scripter cs

continue을 만나는 순간 반복문의 가장 위로 간다

1 2 3 4 5 6 7 8 9 10 11 12 13 class Conti { public static void main( String [] args) { int i = 0 ; for (i = 0 ;i < 10 ;i + + ) { if (i > 5 ) continue ; System . out . println ( "Hello" ); } System . out . println ( "i=" + i); //10일때 빠져나왔으니 10출력 } } Colored by Color Scripter cs

1 2 3 4 5 6 7 8 9 10 11 12 13 class Conti { public static void main( String [] args) { int i = 0 ; while (i < 10 ) { if (i > 5 ) continue ; System . out . println ( "Hello" ); i + + ; //밑에있으면 무한 반복이 되고, continue위에 있어야 빠져나올 수 있다. } } } Colored by Color Scripter cs

continue와 break 예제

예제1. for(i=1;true;i++)으로 설정하고 1+2+3+... 순차적으로 더했을 때 최초로 5000을 넘는 수를 break를 통해 구현

1 2 3 4 5 6 7 8 9 10 11 12 13 class Break1 { public static void main( String [] args) { int i = 0 , sum = 0 ; for (i = 1 ; true ;i + + ) { sum + = i; if (sum > 5000 ) break ; } System . out . println ( "i=" + i + " sum=" + sum); } } Colored by Color Scripter cs

예제2. 1부터 20까지 출력을 하는데 2의 배수와 3의 배수는 출력하지 않기 continue 이용

1 2 3 4 5 6 7 8 9 10 11 12 13 class Conti1 { public static void main( String [] args) { int i = 0 ; for (i = 1 ;i < = 20 ;i + + ) { if (i% 2 = = 0 ) continue ; if (i% 3 = = 0 ) continue ; System . out . println (i); } } } Colored by Color Scripter cs

예제3. 5의 배수이자 7의 배수인 가장 작은 수 break

1 2 3 4 5 6 7 8 9 10 11 12 13 class Break2 { public static void main( String [] args) { int i = 0 ; for (i = 1 ;;i + + ) { if (i% 5 = = 0 ) if (i% 7 = = 0 ) break ; } System . out . println (i); } } Colored by Color Scripter cs

예제4. 100 이하의 자연수 중에 5의 배수이자 7의 배수인 정수를 전부 출력하고, 그 수를 세어보는 프로그램 continue

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Conti2 { public static void main( String [] args) { int i = 0 , temp = 0 , cnt = 0 ; for (i = 35 ;i < = 100 ;i + + ) { if (i% 5 = = 0 ) { if (i% 7 ! = 0 ) continue ; System . out . println ( "100 이하 5의 배수이자 7의 배수: " + i); cnt + = 1 ; } } System . out . println ( "총 개수: " + cnt); } } Colored by Color Scripter cs

from http://960603.tistory.com/335 by ccl(A) rewrite - 2021-12-27 01:27:43