스캐너

자바에서 키보드 입력값을 받는 스캐너 클래스가 있습니다. 정수, 실수, 문자열을 받아올 수 있습니다.

import java.util.Scanner;

Scanner sc = new Scanner(System.in);

https://blog.kakaocdn.net/dn/dkfIIE/btq4Hw1XPOy/EA20DLk8lWIGpnebSKzo81/img.png

자동 완성(sc 입력 후 ctrl + enter)후 Scanner 클릭

예시를 통해서 스캐너에 익숙해져 봅시다. 분모, 분자를 입력 후 나눈 값을 출력하는 코드입니다.

Scanner sc = new Scanner(System.in);
    	System.out.println("분자가 될 숫자값을 입력하시오 : ");
    	int i1 = sc.nextInt();
    	System.out.println("분모가 될 숫자값을 입력하시오 : 	");
    	int i2 = sc.nextInt();
    	while (i2 == 0) {
    		System.out.println("0이 아닌 값을 입력해주세요");
    		i2 = sc.nextInt();
    	} 
    	System.out.println((double)i1 / i2);

조건문

선택하고자 할 때 사용하는 문이다. 자바에서 조건문은 if와 switch문 두 가지 뿐입니다. 대부분의 상황에서 if문을 사용하며, 경우의 수가 많은 경우 switch를 사용하기도 합니다. 모든 switch문은 if문으로 변경이 가능하지만, if문은 switch문으로 변경할 수 없는 경우가 많습니다.

if 문

if 문은 조건식의 결과가 true일 때 실행되는 조건문입니다. if문의 조건을 만족하지 못하는 경우 실행되지 않습니다. 당연히 조건식의 결과는 boolean이어야 합니다.

if문은 if, if-else, if-else if의 세가지의 형태가 있습니다. 조건식 만족시 수행될 문장이 한 줄 일 때는 중괄호 없이 코드를 입력해도 실행이 됩니다.

public class Ex01 {
	public static void main(String[] args) {
		int money = 25000;
		if(money >= 20000) {//true
			System.out.println("택시 ㄱㄱ");
		}
		System.out.println("조건문 끝나서 실행");
		
    System.out.println("=============");
		money = 19500;
		if(money >= 20000) {//false
			System.out.println("택시 ㄱㄱ");
		}
		System.out.println("조건문 끝나서 실행");
		//if 조건 맞지 않는 경우 실행되지 않는다.	
	}
}
//		택시 ㄱㄱ
//		조건문 끝나서 실행
//		=============
//		조건문 끝나서 실행
public class Ex02 { 
    int[] scores = {95,65,70,90,85};
		for(int score : scores) {
			if(score >=90) {
				System.out.println('A');
			}
			else if (score >= 80) {
				System.out.println('B');
			}
			else if (score >= 70) {
				System.out.println('C');
			}
			else System.out.println("fail");
		}
//		A
//		fail
//		C
//		A
//		B  
}


중첩 if문

중첩 if문은 if문 안에 또 다른 if문을 중첩해서 넣을 수 있습니다. 중첩의 제한은 없습니다.

public class Ex03 {
	public static void main(String[] args) {
		int[] scores = {100, 95, 90, 80, 98, 99};
		String[] grade = new String[6];
		for(int i=0;i<6;i++) {
			if( scores[i] >=90) {
				grade[i] = "A";
				if (scores[i] >= 98) {
					grade[i] += "+";
				} else if (scores[i] < 94) {
					grade[i] += "-";
				}
			}
			else if(scores[i] >= 80) {
				grade[i] = "B";
				if (scores[i] >= 88) {
					grade[i] += "+";
				} else if (scores[i] < 84) {
					grade[i] += "-";
				}
			}
				
			else grade[i] = "C"; 		
		}

		for(String s : grade) {
			System.out.println(s);
		}
	}

}
}

점수에 따라 학점을 부여하는 코드입니다. 코드를 순서대로 설명하면, 90점 이상에 A를, 80점 이상에 B를 그리고 나머지 학생에게 C를 뿌리는 코드입니다. 여기에 중첩 if문을 추가하여 A학점 중 98점 이상이면 +를 추가하고 94점 미만에게는 -를 추가합니다. B학점에도 마찬가지로 +와 -를 부여합니다.


switch문

if문의 조건식과 달리, 조건식의 계산결과가 int타입의 정수와 문자열만 가능한 조건문으로 조건식의 계산결과가 일치하는 case문으로 이동 후 break문을 만날 때까지 문장들을 수행합니다. 일치하는 case문의 값이 없는 경우 default문으로 이동합니다(생략가능).

A부터 D까지 학점부여 하는 코드를 switch로 구현해보았습니다.

public class Ex06 {
	public static void main(String[] args) {
		int[] scores = {100, 95, 67, 82, 80};
		for (int score : scores) {
		switch (score / 10) {
		case 9:
		case 10:
			System.out.println("A");
			break;
		case 8:
			System.out.println("B");
			break;
		case 7:
			System.out.println("C");
			break;
		default:
			System.out.println("D");
			break;
		}
		}
	}

}


중첩 swtich문

if문 처럼 switch문도 중첩으로 거의 제한없이 사용할 수 있습니다. switch문안에 if문을 사용하는 것도 가능합니다. 아래에는 A, A+, … , C까지 학점 부여하는 코드를 if, switch를 섞어서 구현해보았습니다.

public class Ex06 {

	public static void main(String[] args) {
		int[] scores = {100, 95, 67, 82, 80};
		for (int score : scores) {
		switch (score / 10) {
		case 9:
		case 10:
			System.out.print("A");
			if (score >= 98) {
				System.out.println("+");;
			} else if (score < 94) {
				System.out.println("-");;
			} else System.out.println("");
			break;
		case 8:
			System.out.print("B");
			if (score >= 88) {
				System.out.println("+");;
			} else if (score < 84) {
				System.out.println("-");;
			} else System.out.println("");
			break;
		default:
			System.out.println("C");
			break;
		}
		}
	}

}


Math.random(랜덤 함수)

Math 클래스에 정의된 난수 발생함수로 (0, 1) 범위의 double값을 반홥합니다.

Math.random()

반복문

반복문(iteration statements)이란 프로그램 내에서 똑같은 명령문을 정한 횟수만큼 반복하여 수행하도록 제어하는 명령문으로 프로그램 내에서 반복적인 형태가 많기 때문에 가장 많이 사용되는 제어문 중 하나입니다.

  1. for 문

  2. while 문

  3. do-while 문


for문

for문은 초기식, 조건식, 증감식을 모두 가지고 있는 반복문입니다. 진행 순서는 초기식, 조건식, 중괄호 안 실행문, 증감식 순입니다.

public class Ex09 {

	public static void main(String[] args) {
    //구구단 3
		for(int i = 1; i<10; i++) {
			System.out.printf("3 x %d = %d \n", i, i * 3);
		}

    // 구구단 5
		for(int i = 1; i<10; i+=2) {
			System.out.printf("5 x %d = %d \n", i, i * 5);
		}
		
    // 1부터 100까지 합
		int sum = 0;
		for(int i = 0; i<101; i++) {
			sum += i;
		}
		System.out.println(sum);
	}

}

구구단 3부터 보면, 정수 i가 1부터 시작하며 i가 10이하이기 때문에 계속 진행합니다. 그리고 실행문이 실행되고 증감식으로 가서 i가 1이 증가합니다. 증가했지만 조건식의 조건에 맞기 때문에 다시 실행문으로 갑니다. 실행 이후 증감식으로 가서 다시 i가 1 증가하고 이 과정이 i가 10이 될 때 까지 반복됩니다. i가 10이 된 다음에는 조건식에 맞지 않기 때문에 for문이 종료됩니다.

(+) 좋은 방법은 아니지만 for문을 구현할 때 꼭 소괄호 안에 식을 적지 않는 경우도 있습니다. 아래 코드에서 확인할 수 있습니다.

public class Ex11 {

	public static void main(String[] args) {
		int i;
		for (i = 1; i < 11; i++) {
			System.out.println(i);
		}
		
		int j = 1; // 1
		for (; j < 11; j++) {//2 //4
			System.out.println(j);//3
		}
		int z = 1;    // 1
		for ( ; ; ) {
			if(z < 10) break;     //2
			System.out.println(z);//3
			z++; //4
		}
			
		
	}

}