[ITWILL : java]Scanner라이브러리와 equals()를 이용한 사칙연산계산기, if문과 switch문 변환 예시, 반복문과 break

ITWILL학원 : 3강 JAVA BY 윤미영강사

1. Scanner 라이브러리

기능 : 키보드로부터 데이터를 받아온다.
java.util 패키기에 있는 중요한 라이브러리이므로 사용법은 암기필수.

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
//1. 선언
import java.util.Scanner;
// import라는 예약어는
// 단축키는 ctrl + shift + O 누르면 자동으로 import 생성됨

Scanner sc = new Scanner(System.in);
// 의미는 나는 이제부터 스캐너라이브러리를 변수명(ex: sc)이라는 이름으로 불러서 사용하겠다는 의미
// System.in 자바의 표준입력으로 키보드를 의미한다. 즉 키보드로부터 데이터를 받아오겠다라는 의미

System.out.println("단어를 입력하세요");


//2. 변수 s에 저장
String s = sc.next();
// 콘솔창에 입력한 것들이 변수 s에 저장된다.


//3. 출력
System.out.println(s);


//4. 예시
System.out.println("이름을 입력해주세요");
String s = sc.next();

System.out.println("연락처를 -없이 입력해주세요");
int i = sc.nextInt();

System.out.println("입력하신 "+ s +"님의 휴대폰번호 0"+ i +" 가 맞습니까?");

다른 명령어들은 아래와 같다

1
2
3
4
5
6
7
8
sc.nextInt()
//키보드로부터 정수데이터를 가지고 옴

sc.next()
//키보드로부터 string(한단어)를 가지고 옴

sc.nextLine()
//키보드로부터 string(공백을 포함한 한줄전체)를 가지고 옴

2. Scanner 라이브러리를 이용한 사칙연산계산기 만들기

처음 떠오른 코드는 아래와 같다.

1
2
3
4
5
6
7
8
Scanner sc = new Scanner(System.in);
System.out.println("원하는 사칙연산 수식을 입력하세요");
int data1 = sc.nextInt();
String operator = sc.next();
int convertOper = int(operator);
int data2= sc.nextInt();

System.out.println("입력하신 " + data1 + operator + data2 +"의 값은 "+ (data1 + convertOper+ data2)+"입니다")

그런데 string으로 연산자를 받으니까 연산이 되지않으니까 int로 형을 바꿀려고했는데 Cannot cast from String to int 에러가 났다.

사칙연산자들의 데이터타입이 무엇인지 구글링했는데 그래도 잘 모르겠어서
강사님께 여쭈어보니 string을 int로 받아도 해결할 수 없다고 한다.

if문을 써서 equals()를 쓰는게 낫다고 했다
equals()를 어떻게 쓰는지 찾아본 뒤 바로 적용해보았다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Scanner sc = new Scanner(System.in);
System.out.println("원하는 사칙연산 수식을 입력하세요");
int data1 = sc.nextInt();
String operator = sc.next();
int data2= sc.nextInt();

if("+".equals(operator)){
System.out.println("입력하신 " + data1 + operator + data2 +"의 값은 "+ (data1 + data2)+"입니다");
}else if("-".equals(operator)){
System.out.println("입력하신 " + data1 + operator + data2 +"의 값은 "+ (data1 - data2)+"입니다");
}else if("*".equals(operator)){
System.out.println("입력하신 " + data1 + operator + data2 +"의 값은 "+ (data1 * data2)+"입니다");
}else if("/".equals(operator)){
System.out.println("입력하신 " + data1 + operator + data2 +"의 값은 "+ (data1 / data2)+"입니다");
}else{
System.out.println("또 잘못입력함? 다시 입력해주세요")
}

작동 잘된다! 역시 가르쳐주는 사람이 있으니까 좋다
switch문으로 바꾸어보자

1
2
3
4
5
6
7
8
9
10
11
switch(operator){
case "+" : System.out.println("덧셈결과는 " + (data1+data2));
break;
case "-" : System.out.println("뺄샘결과는 " + (data1-data2));
break;
case "*" : System.out.println("곱셈결과는 " + (data1*data2));
break;
case "/" : System.out.println("나눗셈결과는 " + (data1/data2));
break;
default : System.out.println("또 잘못입력함? 다시 입력해주세요");
}

3. 제어문 종류

  • 조건문
    • if(조건문)
    • switch(값)
  • 반복문
    • for(반복횟수)
    • while(조건식)

4. 조건문 : Switch문

정수식안에는 변수, 숫자, 문자, 조건들이 들어갈 수 있다.
case안의 값에는 and연산자, Boolean, 실수는 아예 들어갈 수 없다.
break;문이 없을 경우 다음 break;를 찾을때까지 모든 문장을 실행한다.
default문은 가장 마지막 작업으로 위의 case 이외의 값인 경우 default문은이 출력되고 Switch문은 끝난다

1
2
3
4
5
6
7
8
9
switch( 정수식 ){ //숫자,문자
case 값 : 출력값1;
break;
case 값 : 출력값2;
break;
case 값 : 출력값3;
break;
default : 출력값4;
}

예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

switch(season){
case "spring" :
System.out.println("봄 사랑 벚꽃 말고 by 아이유");
break;
case "summner" :
System.out.println("party by 소녀시대");
break;
case "autumn" :
case "fall" :
System.out.println("11:11 by 태연");
break;
case "winter" :
System.out.println("Santa tell me by Ariana grande");
break;

default : System.out.println("잘못입력하셨거나 스페..펠..ㄹ..잉 틀리셨나봐요?");
}

5. 조건문 : switch문과 if문 비교

임의의 노래방 점수를 터미널에 입력하면 점수대별로 아래 문구를 출력하고싶다.

100점의 문구 : 실화냐? 가수다! 가수가 나타났다!

80 ~ 99점의 문구 : 노래실력이 아주 좋으신데요~

40 ~ 79점의 문구 : 매력이~ 넘쳐요

40점미만의 문구 : 노ㄹ..아니 박수실력이 나날이 늘어가네요!
그외의 점수들 : 잘못된 숫자를 입력하셨습니다.다시 입력해주세요

  1. if일때

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Scanner sc = new Scanner(System.in);
    System.out.println("점수를 입력하세요");
    int inputScore = sc.nextInt(10);

    if (inputScore == 100){
    System.out.println("WOW " + inputScore + "점 실화냐? 가수다! 가수가 나타났다!");
    }else if(inputScore >= 80 && inputScore < 100 ){
    System.out.println(inputScore + "점! 노래실력이 아주 좋으신데요~");
    }else if(inputScore >= 40 && inputScore < 80 ){
    System.out.println("내 노래 점수는 " + inputScore + "점! 매력이~ 넘쳐요");
    }else if(inputScore < 40 && inputScore >= 0){
    System.out.println(inputScore + "점! 노ㄹ..아니 박수실력이 나날이 늘어가네요!");
    }else{
    System.out.println("잘못된 숫자를 입력하셨습니다.다시 입력해주세요");
    }
  2. switch일때

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    switch(inputScore/10){
    case 10 :
    System.out.println("100점 실화냐? 가수다! 가수가 나타났다!");
    break;
    case 9 :
    case 8 :
    System.out.println("노래실력이 아주 좋으신데요~");
    break;
    case 7 :
    case 6 :
    case 5 :
    ystem.out.println("매력이~ 넘쳐요");
    break;
    case 4 :
    case 3 :
    case 2 :
    case 1 :
    System.out.println("노ㄹ..아니 박수실력이 나날이 늘어가네요!");
    break;
    default :
    System.out.println("잘못된 숫자를 입력하셨습니다.다시 입력해주세요");
    }

6. 반복문 : for문

for문의 기본은 아래와 같다

1
2
3
for(int i=0; 조건식; 증감식){
출력값
}

간단한 예시를 보면서 어떻게 컴파일이 되는지 순서를 보자

1
2
3
for(int i=1; i<10; i++){
System.out.println("Hi");
}
  1. 조건문 확인 : i는 1이고 10보다 작다 ->true
  2. 괄호안의 코드출력
  3. 증감식 확인 : 이제 i는 2
  4. 조건문 확인 : i는 2이고 10보다 작다 ->true
  5. 괄호안의 코드출력
  6. 증감식 확인 : 이제 i는 2
  7. 계속반복
  8. 조건문 확인 : i는 10이고 10보다 작다 -> false
  9. for문 종료

7. 반복문 : break

반복문에서 break를 사용하면 반복문이 바로 종료된다.

구구단 3단 예시를 들어보자

1
2
3
4
5
6
7
8
int multiply;
int result;
multiply = 3;
for(int x=1; x<=9; x++){
result = multiply * x;
System.out.print(result + ",");
}
//출력값 : 3,6,9,12,15,18,21,24,27,

출력값의 마지막 컴마를 없애고 싶다.
어떻게 하면 좋을까? if와 break를 사용해보자.

1
2
3
4
5
6
7
8
9
10
11
12
int multiply;
int result;
multiply = 3;
for(int x=1; x<=9; x++){
result = multiply * x;
if(x==9){
System.out.println(result);
break;
}
System.out.print(result + ",");
}
//출력값 : 3,6,9,12,15,18,21,24,27

break를 입력하면 if조건이 만족되는 순간 바로 반복문이 종료된다
아래 예시는 구구단 3단 나타내지만 if조건문을 5까지 입력했다
3*5까지 진행하는 구구단이다.

1
2
3
4
5
6
7
8
9
10
11
12
int multiply;
int result;
multiply = 3;
for(int x=1; x<=9; x++){
result = multiply * x;
if(x==5){
System.out.println(result);
break;
}
System.out.print(result + ",");
}
//출력값 : 3,6,9,12,15

x가 6,7,8,9가 남았지만 if조건을 만족하고 break때문에 반복문이 종료된다.