19044_4일차 자바의 입력,
자바의 입력
프로그램 실행 도중 필요한 시점에 데이터를 입력받는 것.
왜 필요할까?! => 변경되는 데이터를 소스프로그램 없이 외부에서 전달하기 위해 사용.
(학점 구하기, 성별 구하기 등등…)
byte 단위 입력
- 숫자입력
/* System.in.read(); <hr /> System.in : 표준입력 => 키보드 입력 */ int su = System.in.read() - 48; /* -48을 하지 않으면? int su = System.in.read(); 키보드 입력 프로그램에서 받는 값 0 48 1 49 5 53 이렇게 48이 더해져서 나온다... */
- 문자입력
/* (char)System.in.read(); <hr /> (char)를 앞에 붙여준다. 키보드 입력 프로그램에서 받는 값 a 97 b 98 A 65 9 57 자료형 = (기본자료형, 참조(클래스,사용자정의)자료형) (자료형)데이터 <hr /> 캐스팅(casting) 연산자 : 형변환연산자! */ int su = 300; double d = 3.14; int su2 = 3.14; // 에러? => 발생 su2 = (int)3.14; //3.14데이터를 int로 형변환 하겠음. 변환하고 나머지값을 버려버리겠다라고 명시하는 것. System.out.println(su2); // 3 나옴 double d2 = 300; //에러? => 이상없음, 자동형변환 System.out.println(d2); // 300.0 System.out.println(97); ==> 97 출력 System.out.println( ( char ) 97 ); // 결과 a char ch = (char)System.in.read(); */
/*exception 에러 (unhandled, unreported) InputTest.java:9: error: unreported exception IOException; must be caught or declared to be thrown 예외처리 해달랬는데 안했어, 방법은? */ public static void main(String[] args) throws Exception //예외처리 하기
class InputTest { public static void main(String[] args) throws Exception { System.out.println( "프로그램 실행도중 입력테스트 !" ); System.out.println( 97 ); System.out.println( ( char ) 97 ); System.out.print( "한자리 수를 입력 : " ); int su = System.in.read() - 48; // 입력받는 시점 // 다시 3을 입력받고 싶다면 애래처럼 13 과 10처리 하기 /* System.in.read(); System.in.read(); */ System.out.print( "동일한 수를 다시 입력 : " ); int su2 = System.in.read(); int su3 = System.in.read(); System.out.println( "당신이 입력한 값은 su = " + su + "아스키 코드는" + su2 ); System.out.println( "10 나오나? = " + su3 ); System.out.println( "===end===" ); } } //엥? 왜 아스키코드는 13이 나오지? 3 입력하고 엔터를 입력해서 엔터의 아스키코드는 13임. //키보드 : 3 엔터 //컴퓨터 : 51 13(CR) 10(LF)
/* 문제) 아래와 같이 실행하는 프로그램을 작성하시오(for문 사용) [실행결과] <3단> 3 * 1 = 3 ... 3 * 9 = 27 */ class GugudanTest { public static void main(String[] args) { System.out.println( "<3단>" ); for(int i = 1; i < 10; i++) { System.out.println( " 3 * " + i + " = " + ( 3 * i ) ); } } }
//미션 구구단! class GugudanTest { public static void main(String[] args) { for(int dan = 3; dan < 6; dan++) { System.out.println( "<" + dan + "단>" ); for(int i = 1; i < 10; i++) { System.out.println( dan + " X " + i + " = " + ( 3 * i ) ); } System.out.println( "\t" ); } } }
class GugudanTest4 { public static void main(String[] args) throws Exception { System.out.print( "시작단을 입력하세요 : " ); int start = System.in.read() - 48; System.in.read(); System.in.read(); System.out.print( "끝단을 입력하세요 : " ); int end = System.in.read() - 48; end++; for(int dan = start; dan < end; dan++) { System.out.println( "<" + dan + "단>" ); for(int i = 1; i < 10; i++) { System.out.println( dan + " X " + i + " = " + ( 3 * i ) ); } System.out.println( "\t" ); } } }
라인단위 입력
- 객체생성 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); - 문자열 입력 String str = in.readLine(); // a b c d 엔터 ---> "abcd" // 1 2 3 4 엔터 ---> "1234" str + 300 ? 1534(X) , "1234300"(이렇게 나옴) - 숫자입력 ( 위에서 입력된 값에 대해 사칙연산을 하고 싶다! ) "" 큰 따옴표를 제거하자 ( 많이 쓰는 기능 ) Integer.parseInt( str ) ; // parseInt();는 숫자로 구성된 문자열을 숫자로 변환하는 기능을 갖는다. su + 300 ? 1534 (0) Integer.parseInt( "123" ); // 결과값 123
import java.lang.*; //기본패키지 =>> 컴파일러가 자동으로 추가시켜줌! *= 모든것, 와일드카드가 뭐야? import java.io.BufferedReader; import java.io.InputStreamReader; // 사용하겠음, 사용하고자 하는 클래스의 소속( 폴더 , 패키지 )를 알려주는 역할 //형식) import 패키지명.클래스명; // 근데 왜 String은 그냥씀? =>> 자주 쓰는 기능들은 임포트하기 넘나 귀찮, 자바 기본패키지에 모아둠 class LineInputTest { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader( new InputStreamReader( System.in) ); System.out.println( "숫자를 입력? " ); String str = in.readLine(); // 입력시점 System.out.println( "STR = " + str ); System.out.println( str + 500 ); // 123500 //숫자문자열 ---- 변환 ----> 숫자 "123" ----> 123 ( 큰따옴표 제거 ) : parseInt( 숫자문자열 ) int su = Integer.parseInt( str ); // Integer.parseInt("123") ---> 123 System.out.println( su + 500 ); // 123 + 500 =>> 623 /* <자바 I/O의 4대 클래스> ㅣ 읽기 ㅣ 쓰기 ======================================= byte단위 ㅣ InputStream ㅣ OutputStream 문자단위 ㅣ Reader ㅣ Write 클래스 모아둔것 = 패키지 , 윈도우 폴더처럼 */ } }
import java.util.Calendar; import java.io.BufferedReader; import java.io.InputStreamReader; class JuminBunhoTest { public static void main(String[] args) throws Exception { //주민번호를 입력받아 화면에 나이를 출력하기!! (readLine()메소드사용) //"920306-1012345" // =>> 전체문자열에서 "92"만 추출하기 : String //나이계산하기? 92라는 숫자를 가져왓, 2019 - ( 1900 + 92 ) + 1 //자바 날짜 관련된 클래스 : 대표적 2가지 Date, Calendar Date는 별로 잘 안씀 Calendar cal = Calendar.getInstance(); //객체를 Instance, Object를 사용하는데 특정 클래스 하나를 표현할땐 Instance를 사용함 //cal 변수안에 현 시스템의 모든 날짜관련정보가 저장됨. //cal.get( 얻고자 하는 세부정보); //java 사용 설명서 https://www.oracle.com/technetwork/java/api-141528.html //https://docs.oracle.com/javase/8/docs/api/ int year = cal.get( Calendar.YEAR ); System.out.println( "year = " + year ); BufferedReader in = new BufferedReader( new InputStreamReader( System.in) ); String id = in.readLine(); // "931025-2011111" //인덱스 012345- String birthYear = id.substring( 0, 2 ); //"92" System.out.println(birthYear); int age = year - ( 1900 + Integer.parseInt( birthYear ) ) + 1; System.out.println( "당신의 나이는 " + age ); } }
궁금상자
1. 왜 키보드 숫자 입력받을때 -48? 왜?... 2진코드 머시기 알아보자
- 아스키코드때문, 아스키코드 공부 하기!
https://commin.tistory.com/41
2. 키보드 숫자 입력 받을 때, int -48이지만 short byte도? 다를거 같은데
3. 자바의 유명한 에러 뭐가 있을까?!
4. 입력 read(); 와 Scanner 의 차이?!
5. 자바 와일드카드가 무엇?!
6. import 시 특정 클래스 기재 안하고 * 해버리면 안됨?
'클라우드 기반 웹 개발자 과정 공부 > JAVA' 카테고리의 다른 글
190415 Day6 이클립스 설치, 접근지정(제한)자, 자기참조연산자, 인터페이스, final, 클래스와 인터페이스 간의 상속 문법 (0) | 2019.04.15 |
---|---|
190412 Day5 Escape Character, printf, OOP, 오버라이딩, 오버로딩, 생성자 (0) | 2019.04.12 |
190410 Day3 조건문 이어서, 반복문 (0) | 2019.04.10 |
190408 Day2 주석문, 구성요소 사용법, 연산자, 조건문1 (0) | 2019.04.09 |
190408 Day1 (0) | 2019.04.08 |