on
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