유쨈미 2024. 4. 2. 16:44

1. Scanner란?

사용자로부터 입력을 받을 수 있도록 도와주는 표준 입력장치이다.

Scannersc=newScanner(System.in); 객체를 생성하면

import java.util.Scanner; 가 상단에 자동 생성된다.

(java.util 패키지에 포함되어 있어 java.util을 import를 해줘야 사용할 수 있다.)

 

💡 Scanner 메소드

메서드 반환타입 예시 설명
next() String String sp = sc.next(); 다음 토큰을 찾고, 그것을 String으로 반환함.
토큰은 기본적으로 공백 문자로 구분된다.
nextInt() Int int one = sc.nextInt(); 입력에서 다음 토큰을 찾되,
그 토큰을 정수(int)로 파싱하여 반환함.
 

[Java/자바] Scanner 클래스 (입력받기)

Scanner 클래스란? Scanner란 사용자로 부터 입력을 받을 수 있도록 도와주는 것으로, 간단한 예시를 보자면, 사용자가 게임에 로그인하기 위해, 아이디와 비밀번호를 입력하는 것과 같습니다. Scanner

hstory0208.tistory.com

이 외에도 더 많은 메소드가 있다.

출처 : Hyun/Log

 

💻 Scanner.in

System.out.println("뭔가를 하다가....");
// args 매개변수를 통해 값 얻기
System.out.println(args.length);
System.out.println("args : " + args[0]);	// 여러개 중에 index 0번째 출력
		
System.out.println();
// 프로그램 진행 도중에 키보드로 값 받기
Scanner sc = new Scanner(System.in);		// 표준 입력장치(키보드)로 값 얻기
System.out.print("이름 입력: ");
String irum = sc.next();			// 콘솔에 값 입력
System.out.println("나이 입력: ");
int nai = sc.nextInt();
System.out.println("이름은 " + irum + ", 나이는" + nai + "살");

💻 예제 코드01 윤년 구하기

int year, month, days=28;
String msg = "평년";
Scanner sc = new Scanner(System.in);
System.out.println("년도 입력: ");
year = sc.nextInt();
System.out.println("월 입력: ");
month = sc.nextInt();
// year = 2024;
// month = 2;
if(month < 1 || month > 12) {
	System.out.println("월은 1 ~ 12 사이만 허용");	 // 입력자료 오류 검사
	System.exit(0); 				 // 프로그램의 강제 종료
}

2. Swich문

좀 더 정형화된 문법으로 값에 따라 여러 방향으로 분기하는 경우에 사용한다.

길게 늘어진 if문에 비해 코드가 짧고 의미 파악이 쉽다.

 

💻 예제 코드01

int nai = 29;
	nai = nai / 10 * 10;			// 곱하기와 나누기는 우선순위가 같으므로 왼쪽 먼저 계산
	// System.err.println(nai);
		
switch (nai) {
case 20:
	System.err.println("20대");
	break;					// 20대여도 밑으로 쭉 값이 출력되기 때문에 break문으로 값에 따른 탈출을 유도
case 30:
	System.err.println("30대");
	System.err.println("만세");
	break;
default:
	System.err.println("기타");
	break;					// 선택적
}

2️⃣ 예제 코드02

String jik = "청소부";			// 문자열이 들어올 수도 있다.
switch (jik) {
case "대리":
	System.err.println("대리");
	break;
case "과장":
	System.err.println("과장 만세");
	break;
case "부장":
	System.err.println("부장 만만세");
	System.err.println("하하하");
	break;
default:
	System.err.println("기타 직원");
}

💻 예제 코드03 난수 출력

System.out.println(Math.random());		  	  // 랜덤결과값(소수)
// int time = (int)(Math.random() * 10);		// 10을 곱하여 소수점을 옮기고 int화 함으로서 소수점 밑에를 다 버린다.
int time = (int)(Math.random() * 4) + 8;	  // 8 ~ 11 사이의 정수 얻기
System.out.println(time);
		
switch (time) {
case 8:
	System.out.println("학원 가자");
	break;
case 9:
	System.out.println("인사 하자");
	System.out.println("복습 하자");
	break;
case 10:
	System.out.println("문제 풀자");
	break;
default:
	System.out.println("명상 시간");
	}
}

// random값 (학원 가자, 인사 하자, 복습 하자, 문제 풀자, 명상 시간)

💻 예제 코드04 if문 + Swicht문 윤년 구하기

// 윤년 체크해서 윤년이면 2월에 29를 준다.
// 4의 배수이고 100의 배수가 아니거나 400의 배수
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
	days = 29;
	msg = "윤년";
}
		
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
    days = 31;
    break;
case 4:
case 6:
case 9:
case 11:
	days = 30;
	break;
// case 2:
	// break
    }
    System.out.println(year + "년 " + month + "월은 " + days + " " + msg);
  }
}

3. for문 (반복문)

프로그램의 흐름을 바꾸는 역할을 하는 문장들을 '제어문'이라고 하며, 제어문에는 조건문과 반복문이 있다.

 

for문의 구조

for(초기식;조건식;증감식) {
    조건이 참일 동안만 반복;
}

for문은 조건식이 참인 동안 괄호 안의 문장들을 반복하다가 거짓이 되면 반복문을 벗어난다.

처음에 초기값(변수에 최초의 값을 저장)을 실행하며, 조건식에 참일 동안 괄호 안에 문장들을 반복 실행한다.

 

💻 예제 코드 01

int a;
// for(int a = 1; a <= 5; a = a + 1) {		// a = 1로 초기화. 조건만큼(5이하까지) 반복. a + 1씩 증감
// for(a = 1; a <= 5; a = a + 1) {
// for(a = 1; a <= 5; a += 1) {

int sum = 0; 					// 누적 기억장소

for (a = 1; a <= 7; a++) {
	System.out.println("a : " + a); 	// 참이면 실행
	sum += a;
}

// a : 1
// a : 2
// ...
// a : 7

아, 참고로 for 안의 값에 손을 대면 안 된다.

루프의 행동이 예측하기 어려워지고, 코드의 가독성과 유지보수성이 떨어지기 때문이다.

 

💻 예제 코드02

System.out.println("반복문 수행 후 a : " + a); 	// 거짓이면 실행
System.out.println("합은 " + sum);

for (int i = 65; i <= 90; i++) {
	System.out.print((char) i + " ");
}
System.out.println();
for (int i = 'A'; i <= 'Z'; i++) {
	System.out.print(i + " ");
}
System.out.println();
for (int i = 10; i > 1; i -= 2) {
	System.out.print(i + " ");
}

System.out.println();
for (int ytn = 0, tvn = 5; ytn <= 5; ytn++, tvn++) {
	System.out.print(ytn + "," + tvn + ":");
}

// 반복문 수행 후 a : 8
// 합은 28

 

 📌 참고

int aa = 1; 			// 여기에 값을 쓰면
for (; aa <= 5; aa++) { 	// 초기화식에 세미콜론만 냅둬도 됨.
	System.out.print(aa + " ");
}

4. 다중 for문

💻 예제 코드01

for (int m = 1; m <= 3; m++) {
	System.out.println("m =" + m);
	for (int n = 1; n <= 4; n++) {
		System.out.print("n :" + n + " ");
	}
		System.out.println();
}

// m =1
// n :1 n :2 n :3 n :4 
// m =2
// n :1 n :2 n :3 n :4 
// m =3
// n :1 n :2 n :3 n :4

💻 예제 코드02

for (char i = 65; i <= 90; i++) {
	System.out.print(i + " : ");
	for (char j = i; j <= 'Z'; j++) { // char i = 65(A) = j >> A ~ Z 도장찍기
		System.out.print(j);
	}
	System.out.println();
}

// A : ABCDEFGHIJKLMNOPQRSTUVWXYZ
// B : BCDEFGHIJKLMNOPQRSTUVWXYZ
// C : CDEFGHIJKLMNOPQRSTUVWXYZ
// D : DEFGHIJKLMNOPQRSTUVWXYZ
// ...
// W : WXYZ
// X : XYZ
// Y : YZ
// Z : Z

Scanner의 활용법은 어느 정도 알겠는데 for문 if문은 아직 어떻게 코드를 짜야하는지 헷갈린다..

아직 수업 들은 지 며칠 안 돼서 그런지는 모르겠지만 지금도 그렇고 앞으로도 내가 어떠한 부분이

취약한지 파악해서 보완하는 것을 습관화해야겠다.