자바프로그래밍기초 자바프로그램구조 /* * 소스파일 : Hello.java */ public class Hello { 주석문 514760-1 2017 년가을학기 9/4/2017 박경신 클래스 // main() 메소드에서실행시작 public static void main(string[] args) { // "Hello World!" 문자열화면출력 System.out.println("Hello World!");? Hello World! 주석문 메소드 자바프로그램의구조 클래스 (class): 객체 (object) 를만드는설계도 ( 템플릿 ) 자바프로그램은기본적으로클래스로구성됨 public 키워드는 Hello 클래스가다른클래스에서도사용가능함을나타냄 하나의클래스안에는여러개의메소드가포함될수있음 하나의메소드안에는여러개의문장이포함될수있음 Comments 주석문 (Comments) 프로그램에대한설명을하기위해활용되는코드의일부로컴파일시에는무시되고사용되지않음 세가지형태의주석문 /* 설명 */ /* 에서 */ 까지가주석으로서컴파일시에무시된다 여러줄에걸쳐서사용가능 // 설명 // 에서줄의끝까지무시된다 /** 설명 */ /* 설명 */ 형태의주석문이지만, 주로선언문앞에사용되어 JDK에포함된 Javadoc 프로그램을이용해서 HTML문서를만드는데활용되는주석문
Code Block 여러명령문을논리적으로결합해야할때중괄호 ({ ) 를사용하여명령문그룹을만들어표현 - 이러한명령문그룹을코드블록 (code block) 이라고함코드블록안에는변수를선언할수있고, 다른코드블록을포함할수도있음 public class Example { public static void main(string[] args) { int outer; { int inner; outer = 1; inner = 2; outer = 5; //inner = 10; 내부코드블록 // 오류 main() 메소드코드블록 Example 클래스코드블록 Statement 문장 (Statement) 은사용자가컴퓨터에게작업을지시하는코드의단위가됨 문장들은메소드안에들어있거나또는클래스내부에서변수등을정의하는데활용됨 보통프로그램의한줄이하나의문장이됨. 이때에는문장의끝은항상세미콜론 (;) 으로끝남 때로는 { 문장또는문장들 로구성되는블록문장도가능 Method public static void main(string[] args) { // "Hello World!" 문자열화면출력 System.out.println("Hello World!"); main() 자바프로그램은 main() 메소드를가지고있는클래스가반드시하나는있어야함 main() 메소드에서자바프로그램의실행이시작됨 public: 누구나이용가능 static : 정적메소드 void : 반환값 ( 결과값 ) 없음 main : 메소드이름 String[] args : 외부에서주어지는데이터를받는매개변수 ( 입력 ) JVM main() 메소드를제일먼저실행합니다.
자바프로그램구조 Hello2 예제 Hello2 예제설명 클래스 /* * 소스파일 : Hello2.java */ public class Hello2 { public static int sum(int n, int m) { return n + m; // main() 메소드에서실행시작 public static void main(string[] args) { int i = 20; int s; char a; 메소드 s = sum(i, 10); // sum() 메소드호출 a = '?'; System.out.println(a); // 문자 '?' 화면출력 System.out.println("Hello2"); // "Hello2" 문자열화면출력 System.out.println(s); // 정수 s 값화면출력? Hello2 30 메소드 클래스만들기 Hello2 이름의클래스선언 public class Hello2 { class 키워드로클래스정의 public으로선언하면다른클래스에서도접근가능 클래스본문은 { 으로시작하여 으로끝남메소드내에서선언된변수는지역변수 지역변수는메소드실행이끝나면저장 main() 메소드공간반환 public static void으로선언되어야함 public static void main(string[] args) { 메소드호출 sum() 메소드호춯 자바프로그램은 main() 메소드부터실행시작 String[] args로실행인자를전달받음멤버메소드 메소드 sum() 정의 public static int sum(int n, int m) {... 클래스에속한함수, 클래스내에서만선언 인자들의타입과변수명을, 로분리하여나열 메소드코드는 { 과 사이에작성 변수선언 변수타입과변수이름선언 int i=20; int s; char a; s = sum(i,10); // 메소드 sum() 호출 sum() 메소드의호출시변수 i 의값과정수 10 을전달 sum() 메소드의인자인 n, m 에각각 20, 10 값전달 sum() 메소드는 n 과 m 값을더한 30 리턴 변수 s 는정수 30 을전달받아저장 sum() 메소드호출과리턴 System.out.println public static int sum(int n, int m) { return n + m; // 30 리턴 int i=20; s = sum(i, 10); s 30 n 20 m 10 sum() 메소드호출 화면출력 표준출력스트림에메시지출력 System.out.println(a); // 문자? 화면출력 System.out.println("Hello2"); // "Hello2" 문자열화면출력 System.out.println(s); // 정수 s 값화면출력 표준출력스트림 System.out 의 println() 메소드호출 println() 은여러종류데이터타입출력가능 println() 은출력후다음행으로커서이동
Identifier 식별자란? 클래스, 변수, 상수, 메소드등에붙이는이름 식별자의원칙 @, #,! 와같은특수문자, 공백또는탭은식별자로사용할수없으나 _, $ 는사용가능 유니코드문자사용가능. 한글사용가능 자바언어의키워드는식별자로사용불가 식별자의첫번째문자로숫자는사용불가 _ 또는 $ 를식별자첫번째문자로사용할수있으나일반적으로잘사용하지않는다. 불린리터럴 (true, false) 과널리터럴 (null) 은식별자로사용불가 길이제한없음 대소문자구별 Test 와 test 는별개의식별자 Identifier 사용가능한예 int name; char student_id; // '_' 사용가능 void $func() { // '$' 사용가능 class Monster3 { // 숫자사용가능 int whatsyournamemynameiskitae; // 길이제한없음 // 대소문자구분. barchart와 barchart는다름 int barchart; int barchart; int 가격 ; // 한글이름사용가능 잘못된예 int 3Chapter; class if { char false; void null() { class %calc { // 숫자로사용하였기때문 // if는자바의예약어임 // false는사용불가 // null 사용불가 // '%' 는특수문자 Keywords abstract continue for new switch assert default if package synchronized boolean do goto private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile 식별자이름붙이는관례 클래스 (class) 이름 public class HelloWorld { class Vehicle { class AutoVendingMachine { 첫번째문자는대문자로시작 여러단어가복합되어있을때는각단어의첫번째문자만대문자로표시 변수 (variable), 메소드 (method) 이름 int iage; boolean bissingle; String strname; public int igetage() { // iage의 i는 int의 i를표시 // bissingle의처음 b는 boolean의 b를표시 // strname의 str은 String의 str을표시 // igetage의 i는 int의 i를표시 첫단어이후각단어의첫번째문자는대문자로시작 15 const float native super while
식별자이름붙이는관례 상수 (constant) 이름 final static double PI = 3.141592; 모든문자를대문자로표시 Constant 상수 (Constant) final 키워드사용 변하지않는문자나숫자값. 값변경불가 선언시초기값지정 종류 사용방법 예 클래스명 각단어의첫글자는대문자 StaffMember, ItemProducer 변수명, 메소드명 소문자로시작되어 2 번째단어의첫글자는대문자 width, height, payrate, accountnumber, getmonthdays() 상수상수는모든글자를대문자 MAX_NUMBER, PI 상수선언사례 final double PI = 3.141592; final int LENGTH = 20; Variable 변수 (Variable) 프로그램실행중에값을임시저장하기위한공간 변수값은프로그램수행중변경될수있음 데이터타입에서정한크기의메모리할당 반드시변수선언과값을초기화후사용 변수선언과초기화 변수의타입다음에변수이름을적어변수를선언 int radius; // 변수선언 char c1, c2, c3; // 3 개의변수를한번에선언 double weight; int radius = 10; // 변수선언및초기화 char c1 = 'a', c2 = 'b', c3 = 'c'; // 선언과동시에초기값지정 double weight = 75.56; radius = 10 * 5; // 변수에값대입 (= 연산자다음에식 ) c1 = 'r'; weight = weight + 5.0; Data Type 자바의자료형 (Data Type) 기초형 (Primitive Type) boolean char byte short int long float double 참조형 (Reference Type) class interface array Data Type Default Value byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char '\u0000' String (or any object) null boolean false
Primitive Data Types Integer Literals byte short int long (1 Byte, -128 ~ 127) (2 Bytes, -32768 ~ 32767) (4 Bytes, -2 31 ~2 31-1) (8 Bytes, -2 63 ~2 63-1) 10진수 (decimal): 14, 16, 17 8진수 (octal): 016, 018, 019 16진수 (hexadecimal): 0xe, 0x10, 0x11 2진수 (binary): 0b1100 float double (4 Bytes, -3.4E38~3.4E38) (8 Bytes, -1.7E308~1.7E308) 2 F 7 boolean char (1 Byte, true or false) (2 Bytes, Unicode) Integer Literals 정수형리터럴 : 정수직접표시 8진수 : 0으로시작하는숫자는모두 8진수 int n = 015; // 10진수로 13 16진수 : 0x로시작하는숫자는 16진수 int n = 0x15; // 10진수로 21 10진수 : 0으로시작하지않는숫자는 10진수 15, 3, 20, 55, 88 모든정수타입리터럴은 int 형으로컴파일함 long 타입리터럴은숫자뒤에 L 또는 l 을붙임 ex) 24L, 3578l Floating-Point Literals 부동소수점을갖는수직접표시 소수점을찍은실수, 지수 (exponent) 식으로표현한실수 12. 또는 12.0.1234 또는 0.1234 또는 1234E-4 숫자뒤에 f(float) 나 d(double) 을명시적으로붙이기도함 0.1234 또는 0.1234D 또는 0.1234d double 타입 0.1234f 또는 0.1234F float 타입 1234D 또는 1234d 1234.0과같으며 double 타입 1234F 또는 1234f 1234.0과같으며 float 타입 실수타입리터럴은 double 타입으로컴파일됨
Character Literals 문자는유니코드규격중에서 UTF-16 구격사용 단일인용부호 ( ) 로문자하나표현 char ch1 = ' 가 '; 'a', 'W', ' 가 ', '*', '3', '7' char ch2 = \uac00'; // ' 가 ' \ 다음에숫자는 8진수로서 0 ~ 337사이의 8진수만가능 \102 -> 문자 B 를나타내는 8 진수 \337 -> 문자 β 를나타내는 8 진수 \u 다음에 4 자리 16 진수, 2 바이트의유니코드 (Unicode) \u0041 -> 문자 'A' 의유니코드 (0041) \uae00 -> 한글문자 ' 글 ' 의유니코드 (ae00) 특수기호는 \ 로시작 \b 백스페이스 \t 탭 \n 라인피드 \f 폼피드 \r 캐리지리턴 \ 이중인용부호 \ 단일인용부호 \\ 백슬래시 25 String Literals 문자열리터럴 이중인용부호로묶어서표현 "Good", "Morning", " 자바 ", "3.19", "26", "a" 자바에서문자열은객체이므로기본타입이아님 자바에서문자열 (String) 은문자들의모임이다. 예를들어서문자열 Hello 는 H, e, l, l, o 등의 5개의유니코드문자로구성됨 문자열리터럴은 String 객체로생성됨 String 클래스가제공됨 String str1 = Welcome ; String str2 = null; System.out.println(str1); Boolean Literals 논리리터럴 true 또는 false 값표시 boolean b = true; boolean c = 10 > 0; // 10>0 이참이므로 c 값은 true 논리타입과정수타입사이의타입변환허용안됨 null null 리터럴 어떠한레퍼런스타입의값으로도사용가능 int i = null; // 기본데이터타입에는사용불가 String str = null; int i; //if ((boolean)i) { // 정수 i 를논리타입으로변환할수없음 // 컴파일에러 (i == 1) 또는 (i!= 0) 과같은논리연산을사용해야함
예제 : 변수, 상수, 리터럴사용하기 원의면적계산 public class CircleArea { public static void main(string[] args) { final double PI = 3.141592; // 원주율을상수로선언 double radius = 5.0; // 원의반지름 double circlearea = 0; // 원의면적 circlearea = radius*radius*pi; // 원의면적계산 // 원의면적을화면에출력한다. System.out.print(" 원의면적 = "); System.out.println(circleArea); 원의면적 = 78.5398 Type Conversion 자동적인형변환 (Implicit Type Conversion) 경우 원래의타입보다큰자료타입으로바뀔때 byte >> short/char >> int >> long >> float >> double 원본데이터그대로보존 자동적인형변환사례 정수타입변수 byte a; int price; price = a; 자동타입변환 바이트타입변수 long var; int n = 32555; byte b = 25; var = n; // int -> long 타입으로자동변환. // var 값은 32555 var = b; // byte -> long 타입으로자동변환 // var 값은 25 Type Conversion 자동적인형변환 피연산자중하나가 double형이면다른피연산자도 double형으로변환됨 피연산자중하나가 float형이면다른피연산자도 float형으로변환됨 피연산자중하나가 long형이면다른피연산자도 long형으로변환됨 그렇지않으면모든피연산자는 int형으로변환됨 Type Conversion 강제형변환 (Explicit Type Conversion) 개발자의의도적으로타입변환 byte a; 강제형변환방법 int price; a = (byte) price; price 정수값을 바이트타입 byte 타입으로 정수타입 강제타입변환사례 변수 강제타입변환 변수 실수타입이정수타입으로강제변환시소수점아래가버려짐 데이터손실 short var; int n = 855638017; // n의 16진수값은 0x33000001 0x33000001 n 32비트 var = (short) n; // int 타입에서 short 타입으로강제변환. var 값은 1 double d = 1.9; int n = (int)d; // n은 1이된다. 0x0001 var 16비트
예제 : 형변환 자동타입변환과강제타입변환의이해를위한예제이다. 다음소스의실행결과는무엇인가? 식과연산자 연산 : 주어진식을계산하여결과를얻어내는과정 public class TypeConversion { public static void main(string[] args) { byte b = 127; int i = 100; System.out.println(b+i); System.out.println(10/4); System.out.println(10.0/4); System.out.println((char)0x12340041); System.out.println((byte)(b+i)); System.out.println((int)2.9 + 1.8); System.out.println((int)(2.9 + 1.8)); System.out.println((int)2.9 + (int)1.8); 227 2 2.5 A -29 3.8 4 3 연산자의 연산자 종류 증감 ++ -- 산술 + - * / % 시프트 >> << >>> 비교 > < >= <= ==!= 비트 & ^ ~ 논리 &&! ^ 조건? : 대입 = *= /= += -= &= ^= = <<= >>= >>>= 34 Operator Precedence Assignment Operators 35 높음 ++(postfix) -- (postfix) +( 양수부호 ) -( 양수, 음수부호 ) ++(prefix) --(prefix) ~! 형변환 (type casting) * / % +( 덧셈 ) ( 뺄셈 ) << >> >>> < > <= >= instanceof ==!= &( 비트 AND) 같은우선순위의연산자 왼쪽에서오른쪽으로처리 예외 ) 오른쪽에서왼쪽으로 대입연산자, --, ++, +,-( 양수음수부호 ),!, 형변환은오른쪽에서왼쪽으로처리 대입연산자 (=) 는왼쪽변수에오른쪽수식의값을계산하여저장 대입연산자 == 할당연산자 == 배정연산자라고함 x = 100; // 상수 100 을변수 x 에대입 ^( 비트 XOR) 괄호는최우선순위 ( 비트 OR) &&( 논리 AND) ( 논리 OR) 괄호가다시괄호를포함한경우는가장안쪽의괄호부터먼저처리 낮음? : ( 조건 ) = += -= *= /= %= &= ^= = <<= >>= >>>=
Arithmetic Operators 산술연산자의미예결과값 / 와 % 연산자 + 더하기 25.5 + 3.6 29.1 - 빼기 3-5 -2 * 곱하기 2.5 * 4 10.0 / 나누기 5/2 2 % 나머지 5%2 1 정수연산, / 은정수몫. % 는정수나머지 % 의이용사례 : 홀수짝수판별 int r = x % 2; // r 이 1 이면 x 는홀수 예제 : 산술연산자사용 정수를입력받고입력받은정수의초를몇시간, 몇분, 몇초인가를구하는프로그램을작성하시오. import java.util.scanner; public class ArithmeticOperator { 정수를입력하세요 :500 public static void main (String[] args) { 500초는 0시간, 8분, 20초입니다. int time; int second; int minute; int hour; Scanner sc = new Scanner(System.in); System.out.print(" 정수를입력하세요 :"); // 시, 분, 초로변환될정수입력 time = sc.nextint(); second = time % 60; // 60으로나눈나머지는초를의미 minute = (time / 60) % 60; // 60으로나눈몫을다시 60으로나눈나머지는분을의미 hour = (time / 60) / 60; // 60으로나눈몫을다시 60으로나눈몫은시간을의미 System.out.print(time + " 초는 "); System.out.print(hour + " 시간, "); System.out.print(minute + " 분, "); System.out.println(second + " 초입니다."); Unary Operators: Postfix & Prefix Equality & Relational Operators 비교연산자내용 예제 결과 a < b a가 b보다작으면 true 아니면 false 3 < 5 true a > b a가 b보다크면 true 아니면 false 3 > 5 false a <= b a가 b보다작거나같으면 true 아니면 false 1 <= 0 false a >= b a가 b보다크거나같으면 true 아니면 false 10 >= 10 true a == b a가 b와같으면 true 아니면 false 1 == 3 false a!= b a가 b와같지않으면 true 아니면 false 1!= 3 true
Logical Operators 예제 : 비교연산자와논리연산자사용 다음소스의실행결과는무엇인가? public class LogicalOperator { public static void main (String[] args) { System.out.println('a' > 'b'); System.out.println(3 >= 2); System.out.println(-1 < 0); System.out.println(3.45 <= 2); System.out.println(3 == 2); System.out.println(3!= 2); System.out.println(!(3!= 2)); System.out.println((3 > 2) && (3 > 4)); System.out.println((3!= 2) (-1 > 0)); System.out.println((3!= 2) ^ (-1 > 0)); false true true false false true false false true true Bitwise Operators 비트연산자의사례 피연산자의각비트들을대상으로하는연산비트연산자내용 a와 b의각비트들의 AND 연산. 두비트모두 1일때만 1이되 a & b 며나머지는 0 Bitwise AND 01101010 & 11001101 01001000 모두 1 이므로결과는 1 둘중하나라도 0 이되면결과는 0 Bitwise OR 모두 0 이므로결과는 0 01101010 11001101 11101111 둘중하나라도 1 이되면결과는 1 a b a ^ b ~ a a와b의각비트들의or연산. 두비트모두0일때만0이되며나머지는 1 a와 b의각비트들의 XOR 연산. 두비트가서로다르면 1, 같으면0 단항연산자로서, a의각비트들에 NOT 연산. 1을 0으로, 0을 1 로변환 Bitwise XOR 01101010 ^ 11001101 10100111 두비트가모두같으므로결과는 0 두비트가서로다르므로결과는 1 Bitwise NOT ~ 01101010 10010101 0 은 1 로변환 1 은 0 으로변환
Bit Shift Operators 시프트연산자의사례 시프트 연산자 a >> b 내용 a의각비트를오른쪽으로 b 번시프트한다. 최상위비트의빈자리는시프트전의최상위비트로다시채운다. 산술적오른쪽시프트. byte a = 5; // 5 byte b = (byte)(a << 2); // 20 a b 0 0 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 항상 0 으로채움 byte a = 20; // 20 byte b = (byte)(a >>> 2); // 5 항상 0 으로채움 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 a b a >>> b a의각비트를오른쪽으로 b 번시프트한다. 그리고최상위비트의빈자리는 0으로채운다. byte a = 20; // 20 byte b = (byte)(a >> 2); // 5 byte a = (byte)0xf8; // -8 byte b = (byte)(a>> 2); // -2 a << b 논리적오른쪽시프트. a의각비트를왼쪽으로 b 번시프트한다. 그리고최하위비트의빈자리는 0으로채운다. 최상위비트로채움 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 a 최상위비트로채움 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 a 산술적왼쪽시프트. 0 0 0 0 0 1 0 1 b 1 1 1 1 1 1 1 0 b 예제 : 비트연산자와시프트연산자사용 다음소스의실행결과는무엇인가? public class BitShiftOperator { public static void main (String[] args) { short a = (short)0x55ff; short b = 0x00ff; Ternary Operator opr1?opr2:opr3 세개의피연산자로구성된삼항 (ternary) 연산자 opr1이 true이면, 연산식의결과는 opr2, false이면 opr3 if-else을간결하게표현할수있음 // 비트연산 System.out.printf("%x\n", a & b); System.out.printf("%x\n", a b); System.out.printf("%x\n", a ^ b); System.out.printf("%x\n", ~a); byte c = 20; // 0x14 byte d = -8; // 0xf8 printf("%x\n",...) 는결과값을 16 진수형식으로출력 // 시프트연산 System.out.println(c << 2); // c 를 2 비트왼쪽시프트 System.out.println(c >> 2); // c 를 2 비트오른쪽시프트. 0 삽입 System.out.println(d >> 2); // d 를 2 비트오른쪽시프트. 1 삽입 System.out.printf("%x\n", d >>> 2); // d 를 2 비트오른쪽시프트. 0 삽입 ff 55ff 5500 ffffaa00 80 5-2 3ffffffe int x = 5; int y = 3; int s; if(x>y) s = 1; else s = -1; int s = (x>y)? 1 : -1;
예제 : 조건연산자사용 다음소스의실행결과는무엇인가? public class TernaryOperator { public static void main (String[] args) { int a = 3, b = 5; System.out.println(" 두수의차는 " + ((a>b)? (a-b) : (b-a))); System.in 자바에서키입력 : System.in 자바의표준입력스트림 java.io 패키지의 InputStream 클래스 System.in 은바이트스트림으로서키값을바이트로리턴 문자로변환하려면 InputStreamReader 클래스를이용 두수의차는 2 입력동안문제가발생하면 IOException 발생 try-catch 를이용한예외처리필요 예제 : 키보드로부터문자입력, 화면출력 다음소스의실행결과는무엇인가? System.in 을 InputStreamReader 에연결하여사용자로부터키입력. 입력받은문자를화면에출력하고, ctrl-z 키를누르면읽기종료 import java.io.*; public class InputExample { public static void main (String args[]) { InputStreamReader rd = new InputStreamReader(System.in); try { int a = rd.read(); if (a == -1)// ctrl-z 가입력되면 read() 는 -1 을리턴 break; System.out.println((char)a); // 입력된문자출력 catch (IOException e) { System.out.println(" 입력에러발생 "); 자바실습자바 실습 <Enter> 키입력 키입력부분 ctrl-z 키입력 사용자로부터값을입력받으려면? Scanner 클래스를사용 import java.util.*; Scanner input = new Scanner(System.in); // Scanner 클래스포함 System.out.print(" 문장을입력하시오 : "); String line = input.nextline(); // 한줄을읽는다.
Scanner Scanner 클래스를이용한키입력 java.util.scanner 클래스 Scanner 객체생성 Scanner a = new Scanner(System.in); System.in 에게키를읽게하고읽은바이트를문자, 정수, 실수, Boolean, 문자열등다양한타입으로변환하여리턴 예제 : Scanner Scanner scanner = new Scanner(System.in); String name = scanner.next(); // "Kim" String addr = scanner.next(); // "Seoul" int age = scanner.nextint(); // 33 double weight = scanner.nextdouble(); // 65.1 import java.util.scanner; import문필요 소스맨앞줄에사용 Scanner에서키입력받기 Scanner는입력되는키값을공백으로구분되는아이템단위로읽음 공백문자 : \t, \f, \r,, \n Scanner 주요메소드 생성자 / 메소드 설명 String next() 다음아이템을찾아문자열로반환 boolean nextboolean() 다음아이템을찾아 boolean으로변환하여반환 byte nextbyte() 다음아이템을찾아 byte로변환하여반환 double nextdouble() 다음아이템을찾아 double로변환하여반환 float nextfloat() 다음아이템을찾아 float로변환하여반환 int nextint() 다음아이템을찾아 int로변환하여반환 long nextlong() 다음아이템을찾아 long으로변환하여반환 short nextshort() 다음아이템을찾아 short로변환하여반환 String nextline() 한라인전체 ( \n 포함 ) 를문자열타입으로반환 import 문장 import java.util.scanner; // Scanner 클래스포함 Scanner 클래스를포함시키는문장 Scanner는자바클래스라이브러리 (Java Class Library) 의일종 Scanner는입력을받을때사용
예제 : Scanner 를이용한키입력 나이, 체중, 신장데이터를키보드에서입력받아다시출력하는프로그램을작성해보자. import java.util.scanner; public class ScannerExam { public static void main (String args[]) { Scanner a = new Scanner(System.in); System.out.println(" 나이, 체중, 신장을빈칸으로분리하여순서대로입력하세요 "); System.out.println(" 당신의나이는 " + a.nextint() + " 살입니다."); System.out.println(" 당신의체중은 " + a.nextdouble() +"kg 입니다."); System.out.println(" 당신의신장은 " + a.nextdouble()+ "cm 입니다."); 나이, 체중, 신장을빈칸으로분리하여순서대로입력하세요 35 75 175 당신의나이는 35 살입니다. 당신의체중은 75.0kg 입니다. 당신의신장은 175.0cm 입니다.