728x90

 

스캐너(Scanner)

Scanner sc = new Scanner(System.in);

System.in : 컴퓨터 자체 표준입출력

          키보드 입력값을 받아오기 위한 명령어. 키보드 한정.

System.out : 콘솔(결과 나오는 창. 이 중 하나의 도구가 모니터) 에다 출력하기 위한 표준출력

 

 

문자

nextLine() : 문자/문자열을 받아옴

   -다른 next는 값만 가져오지만 얘만 줄바꿈도 같이 버퍼에서 끌어온다

next() : : 문자/문자열을 받아옴

 

숫자

nextInt() : 정수 int 받아옴

nextlong() : 정수 long 받아옴

netxFloat() : 실수타입 float 받아옴

nextDouble() : 실수타입 double 받아옴

 

키보드 입력이 들어오면 값을 받아 버퍼(Buffer) 임시저장공간에 잠깐 저장됨

nextLine()은 받아온 값(값\n(줄바꿈))을 전체 다 인식 -버퍼에는 값이 안남음. 값을 전체 다 인식해서 넘기기기에.

next()는 받아온 값(값\n) 중 실제 데이터만 인식 -딱 값만 가지고간다 -버퍼에는 \n(줄바꿈)이 남아있음

 

 

스캐너 사용시, 입력도 안했는데 값이 넘어가는 이유

콘솔창에서 address가 입력이 안됨

System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
int age2 = sc2.nextInt();

System.out.print("주소를 입력하세요 : ");
String address2 = sc2.nextLine();**	// 결과값에서 address가 입력이 안됨

System.out.println(name2+"("+age2+")"+"님이 사시는 곳은 "+address2+"입니다.");

키보드 입력 강건강 엔터치면 강건강\n까지 입력됨

버퍼 공간에 강건강\n까지 입력됨

nextLine()은 강건강\n 전체를 다 가지고가서 버퍼에 남는게 없음

String name = sc.nextLine();의 넥스트 라인에 강건강\n이 들어가있는 상태

.nexline()에서 변수 name으로 넘어갈 때 강건강만 넘어가고 \n는 짤려서 안넘어감

 

해결방법 3가지

  1. 주소를 next()로 받아오기
  2. nextLine()을 추가하기
  3. 엔터가 남지 않도록 나이를 받을 때, nextLine() 받은 후 parsing하기

 

해결방법1

Scanner sc2 = new Scanner(System.in);
System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
int age2 = sc2.nextInt();
System.out.print("주소를 입력하세요 : ");
String address2 = sc2.**next();**

해결방법2

Scanner sc2 = new Scanner(System.in);
System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
int age2 = sc2.nextInt();
**sc2.nextLine();** // 중간에 넥스트라인 추가로 \\n의 찌꺼끼를 패스시킴 
System.out.print("주소를 입력하세요 : ");
String address2 = sc2.nextLine();
System.out.printf("%s(%d)님이 사시는 곳은 %s입니다.", name2, age2, address2);

 

해결방법3

parsing : 문자열을 데이터타입 기본형(primitive) 으로 바꾸는 것

Scanner sc2 = new Scanner(System.in);
System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
String strAge = sc2.nextLine();
int age2 = Integer.parseInt(strAge); // (strAge)를 parsing 하고 나온 것을 변수에 넣어야함
System.out.print("주소를 입력하세요 : ");
String address2 = sc2.nextLine();

 

728x90
반응형
728x90

데이터 형변환

 

1.형변환

문자열과 숫자의 +연산

문자열과 숫자가 연산하면 str화된다

<button onclick="testPlus();">문자열과 숫자의 +연산</button>
<script>
  function testPlus(){
    var test1 = 7 + 7;          // 14
    var test2 = 7 + '7';        // 77
    var test3 = '7' + 7;        // 77
    var test4 = '7' + '7';      // 77
    var test5 = 7 + 7 + '7';    // 147
    var test6 = 7 + '7' + 7;    // 777
    var test7 = '7' + 7 + 7;    // 777

    console.log(test1);
    console.log(test2);
    console.log(test3);
    console.log(test4);
    console.log(test5);
    console.log(test6);
    console.log(test7);
    // 자바와 문자열+string의 로직 동일
		// 콘솔창 결과에서 글씨색이
    // 숫자나 불린값의 살짝 푸른빛
    // str은 검은색

		// 강제 형변환 : Number(), parseInt(), parseFloat()...
    console.log(test2 + 1);                 // 771
    console.log(Number(test2) + 1);        // 78 // 문자이기에 형변환 필요
    console.log(parseInt(test2) + 2);       // 79
    console.log(parseFloat(test2) + 3);     // 80
  }
</script>

2.강제 형변환

강제 형변환 : Number(), parseInt(), parseFloat()...

// 강제 형변환 : Number(), parseInt(), parseFloat()...
    console.log(test2 + 1);
    console.log(Number (test2) + 1);        // 78 // 문자기에 형변환 필요
    console.log(parseInt(test2) + 2);       // 79
    console.log(parseFloat(test2) + 3);     // 80

 

C.연산자

다른 연산자들은 자바와 비슷한게 많음

자바와는 다른 연산자

 

===와 !==

=== : 값과 자료형 둘 다 일치하는지 비교 !== : 값과 자료형 둘 다 일치하지 않는지 확인할 때 사용

<button onclick="opTest();">확인하기</button>
<script>
    function opTest(){
        var check1 = 1;
        var check2 = '1';

        console.log('check1 == 1 :' + (check1 == 1));       // check1 == 1 :true
        console.log('check1 == "1" :'  + (check1 == '1'));  // check1 == "1" :true
        console.log('check2 == 1 : ' + (check2 == 1));      // check2 == 1 :true
        console.log('check2 == "1" : ' + (check2 == '1'));  // check2 == "1" :true
        // 값을 비교할 때, 위처럼 숫자로 변환 가능한 문자를 숫자랑 비교하면 true로 인지해줌
        // 어느정도 허용적인거지 나중에 철저히 해야 에러발생x // 애매해서 안하는걸 추천
        // JS에서는 비교를 순수 값으로 함. 주소값으로 비교하지 않음
}        
</script>

==과 === 차이

== 연산자를 이용하여 서로 다른 유형의 두 변수의 [값] 비교

==='는 엄격한 비교를 하는 것으로 알려져 있다 ([값 & 자료형] -> true)

// == 비교
console.log('check1 == 1 :' + (check1 == 1));       // check1 == 1 :true
console.log('check1 == "1" :'  + (check1 == '1'));  // check1 == "1" :true
console.log('check2 == 1 : ' + (check2 == 1));      // check2 == 1 :true
console.log('check2 == "1" : ' + (check2 == '1'));  // check2 == "1" :true
// 값을 비교할 때, 위처럼 숫자로 변환 가능한 문자를 숫자랑 비교하면 true로 인지해줌
// 어느정도 허용적인거지 나중에 철저히 해야 에러발생x // 애매해서 안하는걸 추천
// JS에서는 비교를 순수 값으로 함. 주소값으로 비교하지 않음
// === 비교 
console.log('check1 === 1 :' + (check1 === 1));       // check1 == 1 :true
console.log('check1 === "1" :'  + (check1 === '1'));  // check1 == "1" :false
console.log('check2 === 1 : ' + (check2 === 1));      // check2 == 1 :false
console.log('check2 === "1" : ' + (check2 === '1'));  // check2 == "1" :true

추가자료

https://velog.io/@filoscoder/-와-의-차이-oak1091tes

 

 

728x90
반응형
728x90

 

Scanner란?

화면으로부터 데이터를 입력받는 기능을 제공하는 ‘클래스’

 

1)import문 추가

    - import java.util.*;

 

 

2)Scanner객체의 생성

    - Scanner scanner = new Scanner(System.in)

    - System.in : 화면입력한다는 의미

 

 

3)Scanner객체를 사용

int num = scanner.nextInt();       // 화면에서 입력받은 정수를 num에 저장
String input scanner.nextLine();   // 화면에서 입력받은 내용을 input에 저장.
                                   // nextLine은 한 행을 읽어서 문자로 변환
int num = Integer.parseInt(input); // 문자열(input)을 숫자(num)로 변환

   

     

<실습>

import java.util.*;

public class Ch2_14_Scanner {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		int num2 = sc.nextInt();
		int num3 = sc.nextInt();
		System.out.println(num);
		System.out.println(num2);
		System.out.println(num3); // 가로로 공백한칸 띄우고 입력가능
// 입력값 100 200 300
// 결과값
// 100
// 200
// 300

Integer.parseInt()

nextLine() : 라인 단위로 값 입력받기 가능

 

728x90
반응형

+ Recent posts