신용권님의 ''이것이 자바다'' 공부 기록
책을 보면서 내용을 정리했습니다. 이것이 자바다 커뮤니티 : https://cafe.naver.com/thisisjava
조건문 : if, switch
반복문 : for, while, do-while
제어문의 중괄호 내부에 다른 제어문 작성 가능 (다양한 흐름 발생 가능)
private static void ifTest() {
int score = 100;
// if문
if(score >= 90) {
System.out.println("합");
}
// 3항 연산자
System.out.println(score >= 90 ? "합" : "");
}
간단한 if문 같은 경우 3항 연산자로 간단히 표현 가능
private static void ifElseTest() {
int score = 100;
// if-else문
if (score >= 60) {
// 조건 결과가 참인 경우 실행
System.out.println("합");
} else {
// 조건 결과가 거짓인 경우 실행
System.out.println("불합");
}
// 3항 연산자
System.out.println(score >= 60 ? "합" : "불합");
}
if-else문도 간단한 조건식이라면 3항 연산자로 표현가능
private static void ifElseIfElse() {
int score = 100;
char grade;
if(score >= 90) {
grade = 'A';
}
else if (score >=80) {
grade = 'B';
}
else if (score >=70) {
grade = 'C';
}
else if (score >=60) {
grade = 'D';
}
else {
grade = 'F';
}
System.out.println("your grade is " + grade);
}
복수의 조건식 중 만족하는 조건문만 실행한다.
private static void ifElseIfElse() {
int score = 100;
char grade;
if (score >= 90) {
grade = 'A';
if (score >= 95) {
grade = '+';
} else {
grade = '-';
}
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else if (score >= 60) {
grade = 'D';
} else {
grade = 'F';
}
System.out.println("your grade is " + grade);
}
if문 안에 if문을 사용하여 중첩 if문을 사용할 수 있으므로 코드 실행 흐름을 이해하는 것이 중요하다.
private static void ifDiceExample() {
int num = (int) (Math.random() * 6) + 1;
// 홀짝 구분
String result;
if (num % 2 == 1) {
result = "홀수입니다.";
} else {
result = "짝수입니다.";
}
System.out.println(num + " " + result);
// 3항 연산자
System.out.println(num + " " + (num % 2 == 1 ? "홀수입니다." : "짝수입니다."));
}
package com.kosta.day02;
public class SwitchTest {
public static void main(String[] args) {
int score = (int)(Math.random() * 101);
String grade;
switch(score/10) {
case 10:
grade = "A+";
break;
case 9:
grade = "A";
break;
case 8:
grade = "B";
break;
case 7:
grade = "C";
break;
case 6:
grade = "D";
break;
default:
grade = "F";
break;
}
System.out.println("your grade is " + grade);
}
}
switch문은 변수나 연산식의 값에 따라 실행문 선택할 때 사용한다. break는 해당 조건문을 중지시킨다.
반복문 종류 : for, while, do-while
private static void forTest() {
int sum = 0;
for(int i = 1; i< 100; i++) {
sum += 1;
}
System.out.println(sum);
}
반복 횟수를 알고 있을 때 많이 사용한다. 위 예제는 1부터 100까지의 합을 나타내는 반복문이다.
private static void whileTest() {
int sum = 0;
while (sum < 99) {
sum += 1;
}
System.out.println(sum);
}
조건에 따라 반복을 계속 진행할지 결정할 때 사용한다.
private static void doWhileTest() {
int sum = 0;
do {
sum += 1;
}while(sum < 99);
System.out.println(sum);
}
조건 따라 반복을 계속할지 결정할 때 사용하는 것은 while문과 동일하다. 다른 점은 무조건 중괄호 {} 블록을 한 번 실행 후, 조건을 검사하여 반복을 결정한다.
for, while, do-while문 종료하는 구문이다. 대개 if문과 함께 사용하여 if 조건식에 따라 for문과 while문을 종료할 때 사용한다.
private static void doWhileSum() {
// 1~10까지 더하기
int sum = 0;
int i = 1;
do {
sum += i;
i++;
}while(i <= 9);
System.out.println(sum);
}
private static void whileSum() {
// 1~10까지 더하기
int sum = 0;
int i = 1;
while(i <= 9) {
sum += i;
i++;
}
System.out.println(sum);
}
private static void forSum() {
// 1~10까지 더하기
int sum = 0;
for(int i = 0; i < 10; i++) {
sum += i;
}
System.out.println(sum);
}
package com.kosta.day02;
public class ForTest2 {
public static void main(String[] args) {
AA:for(int i = 2; i <= 9; i++) {
System.out.println(i + "-----------");
//if(i == 4) break;
for(int j = 1; j <= 9; j++) {
//if(i == 4) break;
if(i == 4) break AA;
System.out.println(i + "*" + j);
}
}
System.out.println("For End");
}
}
break는 가장 가까운 반목문을 중지하는데, 중첩반복문을 한번에 종료하려면 Label을 활용한다.
for, while, do-while문에서 사용하며 for문에서는 증감식으로 이동하고 while과 do-while문에서는 조건식으로 이동한다.
private static void test2() {
for(int i = 1; i <= 10; i++) {
if(i == 3) {
continue; //아래문장들을 무시하고 반복문은 계속 수행
}
System.out.println(i);
}
}
continue문 아래문장들은 무시하고 반복문은 계속 수행한다.
import java.util.Scanner;
// java.utill 패키지에 있는 Scanner 클래스 사용 가능
// java.lang 패키지에 들어있는 class는 언제나 사용 가능
// 다른 패키지에 들어있는 class들은 import하고 사용 가능
public static void main(String[] args) {
// System.out : 표준출력(모니터)
// System.in : 표준입력(키보드)
// Scanner class : 표준입출력을 쉽게 하도록 도와주는 클래스
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
inputArgumentSum(num);
sc.close();
}
표준 입출력을 도와주는 클래스로 사용자가 입력한 값을 활용할 수 있다.
package com.kosta.day02;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
method1();
}
private static void method1() {
Scanner sc = new Scanner(System.in);
System.out.print("이름>>");
String name = sc.next();
System.out.print("나이>>");
int age = sc.nextInt();
System.out.println(name + " " + age);
}
}
package com.kosta.day02;
import java.util.Scanner;
public class WhileKeyControlExample {
public static void main(String[] args) {
boolean run = true;
int speed = 0;
int keycode = 0;
Scanner sc = new Scanner(System.in);
while(run) {
System.out.println("---------");
System.out.println("1. 증속");
System.out.println("2. 감속");
System.out.println("3. 중지");
System.out.println("---------");
System.out.print("선택>");
keycode = sc.nextInt();
if(keycode == 1) {
speed++;
}else if(keycode == 2) {
speed--;
}else if(keycode == 3) {
run = false;
}
System.out.println("현재속도:" + speed);
}
System.out.println("Program terminate");
}
}
package com.kosta.day02;
import java.util.Scanner;
public class LeapYear {
public static void main(String[] args) {
// 년, 월에 따른 월의 말일 출력
Scanner sc = new Scanner(System.in);
System.out.println("년 월을 입력하시오(ex:2000 2) >>");
int year = sc.nextInt();
int month = sc.nextInt();
sc.close();
// 4의 배수이고 100의 배수가 아니면 윤년
// 100의 배수이면서 400의 배수인 해는 윤년
// 윤년이면 2월은 29일까지, 아니면 28일까지
// 1, 3, 5, 7, 8, 10, 12 -> 31
// 4, 6, 11 -> 30
int day = 31;
if(month == 2) {
if(year % 4 == 0) {
if(year % 100 == 0 && year % 400 != 0) {
day = 29;
}
}else {
day = 28;
}
}else if(month == 4 || month == 6 || month == 11) {
day = 30;
}
System.out.println(year + "년 " + month + "월의 말일은 " + day + "일입니다.");
}
}
private static void switchTest(int year, int month) {
int day = 31;
switch (month) {
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 4 == 0 && year % 400 == 0) { // ||보다 &&가 우선순위가 먼저임
day = 29;
} else {
day = 28;
}
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
}
System.out.println(year + "년 " + month + "월의 말일은 " + day + "일입니다.");
}
private static void sumTest() {
Scanner sc = new Scanner(System.in);
System.out.print("숫자를 입력하시오: ");
int num = sc.nextInt();
sc.close();
int start = 1;
int sum = 0;
if (num % 2 == 0) {
start = 0;
}
for (int i = start; i <= num; i += 2) {
sum += i;
}
System.out.println("결과 값 : " + sum);
}
private static void hokeyGraphics(char cell, int size, boolean isRect) {
if (isRect) {
for (int row = 0; row < size; row++) {
for (int col = 0; col < size; col++) {
System.out.print(cell);
}
System.out.println(); //개행
}
} else {
for (int row = 1; row <= size; row++) {
for (int col = 1; col <= row; col++) {
System.out.print(cell);
}
System.out.println(); //개행
}
}
}
private static void inverseTriangle() {
Scanner sc = new Scanner(System.in);
System.out.print("직각 역삼각형을 출력할 줄 수: ");
int num = sc.nextInt();
sc.close();
for(int row = 1; row <= num; row++) {
for(int col = 1; col <= num+1-row; col++) {
System.out.print("*");
}
System.out.println();
}
}
private static void printPrime() {
System.out.print(2 + " ");
AA:for (int i = 3; i < 50; i++) {
for (int j = 2; j < i; j++) {
if (i % j == 0) continue AA;
}
System.out.print(i + " ");
}
}
private static void factorialTest() {
Scanner sc = new Scanner(System.in);
System.out.print("1보다 크고 10보다 작은 정수를 입력하세요. : ");
int num = sc.nextInt();
sc.close();
if(num > 10) {
System.out.println("10보다 작은 수를 입력하세요.");
return;
}
int result = 1;
for(int i = 1; i <= num; i++) {
result *= i;
}
System.out.println(result);
}
package com.kosta.day02;
public class 최대공약수 {
public static void main(String[] args) {
gcd(2, 5);
gcd(5, 15);
gcd(250, 30);
}
private static void gcd(int a, int b) {
int result = 1;
while(result > 0) {
result = a % b;
a = b;
b = result;
}
System.out.println(a);
}
유클리드 호제법을 활용하여 풀이한다.