개발 한번 해블로그
[Java] 9. 사고력 키우기 2탄 본문
이전 게시물에서는 연산자에 대해서 알아봤다면 오늘은 명령문에 대해서 알아보자
명령문에 의해 왜 사고력이 필요한지 뼈저리게 느끼게 될 것이다. 물론 명령문뿐만 아니라 나머지도 ^^,,,
✋ 잠깐! 명령문 설명 전에 키보드로부터 데이터를 입력받는 방법부터 알아보자✋
Scanner scan = new Scanner(System.in);
요고는 키보드(우리가 진짜 손으로 뚝딱거리는) 장치로부터 자바가 데이터를 읽는 것을 의미한다. 코드를 짜고 우리가 직접 데이터를 넣으면 출력해주는 것이다.
- int num=scan.nextInt(); → 정수 입력
- float num=scan.nextFloat(); → 실수 입력
- double num=scan.nextFloat(); → 실수 입력
- String str=scan.next(); → 공백 앞까지의 문자열 입력
- ex) Hello World! 입력 시 Hello 까지만 출력
- String str=scan.nextLine(); → 공백 상관없이 엔터까지의 문자열 입력
- ex) Hello World! 입력 시 Hello World! 까지 출력
또 한가지 중요한 점은, import java.util.Scanner라고 기재해야 한다. 아니면 < Scanner scan = new Scanner(System.in);> 를 적을 때 java.util.Scanner라고 계속 적어줘야 하기 때문에 우리는 귀찮으니까 한 번만 딱 적으면 된다. 그럼 어디에 적냐고?
이렇게 우리가 평소에 익숙하게 보이던 public class 앞, 제일 첫번째로 적어주면 된다. 그럼 끝!
<예시>
import java.util.*;
public class ScannerTest {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.print("정수를 입력하시오:");
int num=scan.nextInt();
System.out.println("num = " + num);
System.out.print("실수를 입력하시오:");
float f=scan.nextFloat();
System.out.println("f = " + f);
System.out.print("문자를 입력하시오:");
String str=scan.next();
System.out.println("str = " + str);
scan.nextLine();//버퍼비우기(스트림 비우기)
System.out.print("문자를 입력하시오:");
String str1=scan.nextLine();
System.out.println("str1 = " + str1);
scan.close();
}
}
여기서 scan.nextLine(); 이 확인되는데 이것을 버퍼 비우기(스트림 비우기)라고 한다. 이거를 안 하면 다음 str1에서 이전 str값이 나오게 된다.
그럼 이제 진짜 명령문에 대해서 알아보자!
1. 조건문 if
1) 단순 if문
- 조건식이 참이면 중괄호로 둘러 쌓인 블록 안의 문장들이 실행
- if(조건삭){문장 1;}
import java.util.Scanner;
public class IfbasicTest {
public static void main(String[] args) {
//Q. 정수 1개를 입력 받아 입력된 수가 7의 배수인지를 출력하시오
Scanner scan=new Scanner(System.in);
System.out.println("정수를 입력하세요:");
int num=scan.nextInt();
if(num%7==0){
System.out.println(num + "은 7의 배수입니다");
}
//Q. 나이를 입력 받아 19세 이상이면 성인임을 출력하는 코드
System.out.println("나이 :");
int age=scan.nextInt();
if(age>=19){
System.out.println(age + "살은 성인입니다");
}
System.out.println("종료");
}
}
2) 블록 if문
- if의 조건식이 참이면 조건식 바로 다음의 블록이 실행되고, 거짓이면 else문 다음의 블록이 실행
- if(조건문){문장1;}else{문장2;} → 문장 1은 조건식이 참일 때, 문장 2는 조건식이 거짓일 때
import java.util.Scanner;
public class IfElseTest {
public static void main(String[] args) {
int x=10;
if(x>=0){
System.out.println("0 or 양수");
}else {
System.out.println("음수");
}
//Q. 정수 1개를 입력 받아 짝수인지 홀수인지를 판단하는 코드
Scanner sc=new Scanner(System.in);
System.out.println("정수를 입력하세요 :");
int num=sc.nextInt();
if(num%2==0) {
System.out.println("짝수입니다");
}else{
System.out.println("홀수입니다");
}
//Q. 입력받은 수가 12의 배수인지를 출력하는 코드를 작성하세요
System.out.println("정수를 입력하세요 :");
int su=sc.nextInt();
if(su%12==0){
System.out.println("12의 배수입니다");
}else {
System.out.println("12의 배수가 아닙니다");
}
}
}
3) 다중 if문
- if문 안의 문장이 또 다른 if문인 경우(if-else문을 포함)
- if(조건문){문장1;}else if(조건){문장2;}else{문장3;}
import java.util.Scanner;
public class IfElseIfTest {
public static void main(String[] args) {
Scanner abc = new Scanner(System.in);
System.out.println("점수를 입력하시오");
int score = abc.nextInt();
if (score >= 00 && score <= 100) {
if (score >= 90) {
System.out.println("A반");
} else if (score >= 85) {
System.out.println("B반");
} else if (score >= 80 && score < 85) {
System.out.println("C반");
} else {
System.out.println("불합격");
}
} else {
System.out.println("유효한 점수가 아닙니다");
}
2. 선택문 switch-case
- 주로 다중 선택에 사용하는데, 다중 if문보다 간결
- 대신, 사용 영역이 if-else에 비해 제한적
- switch(수식){ case 상수 : 문장 1; break; case 상수2: 문장 2; break; default;}
- 여기서 break란 탈출을 의미한다. 즉, 수식이 상수 1과 일치하면 case 1을 실행하고 break로 탈출!
- default는 수식과 상수가 일치하는게 없을 때 default 문장으로 넘어가는 것!
import java.util.Scanner;
public class SwitchTest2 {
public static void main(String[] args) {
//Q. 요일에 해당하는 운동을 출력
Scanner day=new Scanner(System.in);
System.out.println("요일을 입력하세요");
String str=day.nextLine();
switch(str){
case "sunday" :
System.out.println("야구하기");
break;
case "monday" :
System.out.println("농구하기");
break;
case "tuesday" :
case "wednesday" :
System.out.println("수영하기");
break;
default:
System.out.println("휴식");
}
}
}
- 여기서 sunday를 입력하면 야구하기가 출력되면서 끝이나고 상수에 없는 friday를 입력하면 휴식이 출력되며 종료된다!
3. 반복문
1) for, foreach
- 일반적으로 반복하는 횟수가 정해진 경우에 사용
- 초기식, 조건식, 증감식으로 구성되고 세미콜론(;)으로 구분. 여기서 초기식은 처음 한번만 수행되고 이후 조건식 → 반복한 문장 → 증감식이 반복적으로 수행
- for문 형식 : for(초기식 ; 조건식; 증감식){반복한 문장;}
- foreach문 : for(변수:컬렉션){반복할 문장;}
- 여기서 컬렉션은 컬렉션에 저장된 데이터를 하나씩 꺼내와서 더이상 사용할 데이터가 없을때까지 반복
public class ForLoopTest {
public static void main(String[] args) {
//Q. int[] numbers={1,2,3,4,5,6,7,8,9,10}; 배열 원소를 향상된 for문으로 출력
int[] numbers={1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
for(int su : numbers ){
System.out.println(su);
}
}
}
2) 이중 for문
- 반복문안에 또 다른 반복문이 오는 경우를 중첩 반복이라고 함
- for( ; ; ){for( ; ; ){ }}
public class LoopLoopTest {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
for (int j = 2; j < 10 ; j++) {
System.out.print(j+"x"+i+"="+(j*i)+"\t");
}
System.out.println();
}
}
}
그럼 이런 식으로 나오는데 나같은 초짜가 무작정 따라하면 배열을 분명히 i부터 썼는데 왜 j가 앞으로 왔더라,, 하는 어처구니 없는 의문을 가지게 된다.
System.out.print(j+"x"+i+"="+(j*i)+"\t"); 를 보면 내가 j, 즉 열이 앞으로 오게 작성했기 때문이다 ^^;;;;!
3-1) while
- 먼저 조건식을 검사하고 반복할 문장을 실행
- 조건식을 먼저 검사하므로 거짓이면 바로 종료 될 수도 있음
- 초기식;while(조건식){반복할 문장; 증감식;}
public class WhileLoopTest {
public static void main(String[] args) {
//0~5까지 출력
int i=0;
while(i<=5){
System.out.println(i);
i++;
}
3-2) do~while
- 반복한 문장을 실행한 수에 조건식 검사
- 반복문 내에 있는 문장을 최소한 한 번 실행하고자 할 때 유용
- 주의사항은 반드시 마지막에 세미콜론(;)을 써야한다
- 초기식; do{반복할 문장; 증감식;} while(조건식);
public class WhileLoopTest {
public static void main(String[] args) {
//0~5까지 출력
int i=0;
while(i<=5){
System.out.println(i);
i++;
}
//int[] numbers={1,2,3,4,5,6,7,8,9,10} 주어진 배열의 모든 원소 출력
int[] numbers={1,2,3,4,5,6,7,8,9,10};
i=0;//여기서는 앞에 int i=0;을 썼기때문에 다시 초기화 시켜줘야해서 int빼고 i=0임을 선언
while(i<numbers.length){
System.out.println(numbers[i]);
i++;
}
//do while 문
i=1;
do{
System.out.println(i);
i++;
}while(i<=5);
}
}
여기서 앞에 while 예시를 같이 작성했다. while에서 이미 int i=0;이라고 썼기때문에 다시 초기화 시켜줘야해서 int를 뺀 i=0임을 선언해야한다. 초기화를 안하면 에러남!
4. 제어문
- 반복문과 함께 사용하며 break와 continue를 만나면서 흐름을 바꾸는 것
1) break
- 현재 사용 중인 반복문을 중단하고 제어를 반복문 바깥으로 이동
2) continue
- 현재 수행 중인 반복문에서 현재 조건 값에 대한 처리를 중단하고, 다음 조건값에 대한 처리를 수행
public class BreakContinueTest {
public static void main(String[] args) {
//Q. char[] c={'s','h','u','t','d','o','w','n'}; 위 배열의 값을 출력 중
// 'o'라는 문자를 만나면 반복 중단
char[] c={'s','h','u','t','d','o','w','n'};
for(int i=0 ; i<c.length ; i++){
if(c[i]=='o') break;
System.out.print(c[i]);
}
//Q. 1~10까지의 수 중 3의 배수의 개수를 구하여 출력
int count=0;
for (int i = 1; i < 10 ; i++) {
if(i%3!=0) continue;
count++;
}
System.out.println(count);
}
}
여기서 int count=0;을 한 이유는 1에서부터 10까지 3의 배수라는 조건이 충족될 때마다 count를 증가시켜 최종적으로 그 조건을 만족하는 개수를 알 수 있는 것이다. 만약, int count=1;을 했다면 1+3(1~10까지 3의 배수가 3개)라서 결과값이 4로 출력, int count=2로 했다면 2+3이라서 결과값이 5로 출력된다.
하나씩 따라하면서 이해한 것처럼 느껴지지만 간단한 코테를 하면 내가 이걸 어디 써먹어야하는지,, 어떻게 사용해야하는지 아무리 떠오르지 않는다 ㅎㅎ,, 이래서 사고력이 필요한거다,,, 벌써 뇌가 굳은 것 같아서 걱정인데,, 일단 원리를 다시 복습하고 어떻게 사용할지 좀 더 고민해봐야겠다..
일단 좋은 소식은 제구케 모두 재계약 완료로 티원은 롤드컵 우승 멤버로 24시즌 로스터 확정이다...!💘🙏🙏🙏🙏
꼬감도 티원으로 다시 돌아왔고,,내년에도 함께하자,,! 죽어도 너네 못보낸다,,
'Java' 카테고리의 다른 글
[Java] 11. 클래스로 객체 모델링 (2) | 2023.11.29 |
---|---|
[Java] 10. 메서드와 변수의 관계 이해 (4) | 2023.11.27 |
[Java] 8. 내 나이 2X살, 사고력을 키워보자 (0) | 2023.11.22 |
[Java] 7. 배열(Array) (4) | 2023.11.20 |
[Java] 6. i am 만들어요 사용자정의 자료형 (0) | 2023.11.17 |