어떤 특수한 역할을 하는 문자를 이스케이프하고 싶으면, 보통 같은 문자를 한번 더 적는다.
//프로그래밍 시장에서 자바가 차지하는 점유율은 45%입니다.
int java = 45;
System.out.printf("프로그래밍 시장에서 차지하는 점유율은 %d%%입니다.", java);
형식 문자 기능
%숫자d
출력할 내용물의 최소 너비
%d,%f,%c,%b,%s 모두 사용 가능
+면 우측정렬, -면 좌측정렬 (가운데 정렬은 없다.)
수치가 아닌 데이터(연산 안하는 숫자, 문자열 숫자)은 좌측 정렬(중앙정렬)을 사용한다.
수치 데이터 (연산대상이 되는 데이터)은 주로 우측정렬을 사용한다.
System.out.printf("숫자:%d입니다.\n", 10); //숫자:10입니다.
System.out.printf("숫자:%5d입니다.\n", 10); //숫자: 10입니다.
System.out.printf("숫자:%10d입니다.\n", 10); //숫자: 10입니다.
//데이터가 더 크면 공백너비는 무시된다.
System.out.printf("숫자:%5d입니다.\n", 1234567); //숫자:1234567입니다.
System.out.printf("숫자:%-5d입니다.\n", 10); //숫자:10 입니다
//System.out.printf("숫자: %f", 123); -> 에러(int)
System.out.printf("숫자: %f\n", 123.4567); //숫자:123.456700
System.out.printf("숫자: %.4f\n", 123.4567); //숫자: 123.4567
System.out.printf("숫자: %.1f\n", 123.4567); //숫자: 123.5
System.out.printf("숫자: %.0f\n", 123.4567); //숫자: 123
System.out.printf("숫자:%d\n", 1000000); //숫자:1000000
System.out.printf("숫자:%,d\n", 1000000); //숫자:1,000,000
System.out.printf("숫자:%,f\n", 100000.537); //숫자:100,000.537000
System.out.println();
//1,000,000 - 영문권
//100,0000 - 한국(4자리)
System.out.printf("숫자: %,10.1f\n", 1234.5678); //숫자: 1,234.6
//메뉴판 - version1
System.out.println("================================");
System.out.println(" 음료가격(단위:원)");
System.out.println("================================");
System.out.printf("1. 콜라: %d\n", 2500);
System.out.printf("2. 스무디: %d\n", 3500);
System.out.printf("3. 쿠키: %d\n", 500);
System.out.printf("4. 마에리카노: %d\n", 12500);
//메뉴판 - version2
//큰자리수를 기준으로 우측정렬
//천단위로, 찍기
// \t사용
System.out.println("================================");
System.out.println(" 음료가격(단위:원)");
System.out.println("================================");
System.out.printf("1. 콜라:\t\t%,6d\n", 2500);
System.out.printf("2. 스무디:\t%,6d\n", 3500);
System.out.printf("3. 쿠키:\t\t%,6d\n", 500);
System.out.printf("4. 마에리카노:\t%,6d\n", 12500);
오류, 버그(Bug), 예외(Exception) 등등..
컴파일 오류
컴파일 작업할 때 발생하는 오류
컴파일러가 발견 > 문법이 틀렸다!!!
발견 시 모든 컴파일 작업 중단!!!! > 산출물 발생 안함
난이도 가장 낮음 > 발견이 쉽다. > 컴파일러가 알려주니까 > 고치기 쉬움
주로 오타에 의해 발생 > 경력 초반~중반 많이 냄.
빨리 모든 오류 패턴 익숙하게 끔 공부할 것.
//컴파일 안눌렀는데 왜 오류를 발견해줄까?
//이클립스는 javac.exe(컴파일러)와 편집기가 실시간 연동이 된다. 코드 작성 할 때마다 구문 검사가 실시간으로 자동 실행된다.
//int a = 10 -> ; 안씀 (문법오류)
런타임 오류
프로그램 실행 중 발생하는 오류
컴파일 작업 중에는 발견되지 않았지만 실행 중에 발견이 되는 오류
예외(Exception)
일단, 발견 즉시 수정해야하는 오류 > 발견이 힘들다 > 고치기 힘들다.
돈 + 사람을 이용해 > 검사
게임 -> Closed Alpha > close Beta > Opened Alpha > Open Beta --> 오류 발견을 위해 시험 운영 -->업데이트, 패치배포
int num;
num = 0; //사용자가 키보드로 입력한 숫자라고 생각해보자. -> 경우의 숫자? -> 42억개 중에 숫자 0만 에러
// java.lang.ArithmeticException: / by zero
//나눗셈
//피제수 / 제수
//정수의 나눗셈은 제수가 0이 될 수없다.
System.out.printf("100 / %d = %d\n", num, 100 / num);
논리 오류
컴파일 성공, 실행 성공 > 결과가 이상함..
발견 어어엄청 힘들다 > 고치기 어어엄청 힘들다.
고치려면 경험 & 처음부터 끝까지 다시 살펴보면서 살펴봐야함..
정신 차리고 작업해야해.. > 실수 우기지 말자..
//10+20를 생각하고 작성 > 결과가 왜이래...?!?!
//에러가 안뜨기 때문에 왜 틀렸는지 내가 몰라..
System.out.println(10 - 20);
파일 형식 : .md
GitHub로 유명해짐
Markup Language
Markdown(<-> Markup)
Window + R(run) -> 실행창
notepad, msplorer, mspaint....등등 실행창에 치면 바로 프로그램을 실행할 수 있다.
A(65)~Z(90)
a(97)~z(122)
0(48)~9(57)
//요구사항) 사용자에게 문자 1개를 (키보드로)입력받아서 그래도 화면에 출력하시오.
//입력:A
//출력:입력하신 문자는 'A'입니다.
System.out.print("문자 입력: ");
//A(65) -> 1000001으로 저장
int data = System.in.read();
//A -> 65
System.out.printf("입력하신 문자는'%d'입니다.\n", data);
//65 -> A
System.out.printf("입력하신 문자는'%c'입니다.\n", data);
System.out.println("프로그램 종료");
read()실행 1번당 1개의 문자만 읽기 때문에, 3번 작성했으므로 3개의 문자를 읽을 수 있다.
데이터를 1개만 입력 -> a
키보드에 입력한 데이터가 입력버퍼에 저장된다.
read()가 입력버퍼에서 데이터를 하나씩 가져간다.
read()가 입력버퍼에 있는 a를 읽는다.
\r\n(엔터)도 입력버퍼안에 들어가있다.
read()가 \r, \n을 문자로 바꿔서 출력했기 때문에 13,10을 출력했다.
data = System.in.read();
System.out.printf("입력하신 문자는'%d'입니다.\n", data);
System.out.printf("입력하신 문자는'%c'입니다.\n", data);
data = System.in.read();
System.out.printf("입력하신 문자는'%d'입니다.\n", data);
System.out.printf("입력하신 문자는'%c'입니다.\n", data);
data = System.in.read();
System.out.printf("입력하신 문자는'%d'입니다.\n", data);
System.out.printf("입력하신 문자는'%c'입니다.\n", data);
BufferedReader 클래스
자바는 여러가지 기능을 클래스의 형태로 제공한다.
JDK를 설치하면 수많은 클래스를 사용할 수 있다.
자주 쓰는 클래스 몇가지를 빼고 나머지 클래스들은 가져와야(import) 사용 할 수있다.
//ctrl + shift + o ->import 가져오기, 안쓰는 것도 버려줌
import java.io.IOException;
//창고에서 도구를 가져와 사용하겠습니다. > 클래스 import
import java.io.BufferedReader;
import java.io.InputStreamReader;
//import java.io.*; //*->(wild card - all, 모든 것)
System.out.println("문자 입력: ");
//reader(변수) : 키보드 입력을 받을 수 있는 도구라고 생각하자.
//BufferedReader(자료형)
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//read()메서드 : 문자코드 값을 반환해준다.
int data = reader.read(); //<-- 사용 거의 안함.
//입력한 라인 전체를 반환한다.
System.out.println(data);
String data = reader.readLine();
System.out.println(data);
//요구사항) 이름입력 > 인사하시오.
System.out.print("이름 입력: ");
String name = reader.readLine();
System.out.printf("안녕하세요. %s님\n", name);
//요구사항) 태어난 연도를 입력받아 나이를 출력하시오.
System.out.println("생년 입력: ");
String year = reader.readLine();
2021 - year
2021 - "1995"
//The operator - is undefined for the argument type(s) int, String
//int age = 2021 - year;
//문자열 - > char : x
//"A" -> 'A' : "A".charAt(0);
int iYear = Integer.parseInt(year); // "1995" -> 1995
int age = 2021 - iYear;
System.out.printf("당신의 나이는 %d세입니다.\n", age);
문자열 -> 변환 -> 숫자
"문자열" -> byte : Byte.parseByte("문자열");
"문자열" -> short : Short.parseShort("문자열");
"문자열" -> int : Integer.parseInt("문자열");
"문자열" -> long : long.parseLong("문자열");
"문자열" -> float : Byte.parseFloat("문자열");
"문자열" -> double : Byte.parsDouble("문자열");
//요구사항) 숫자(정수)를 2개 입력받아 > + 연산을 하시오. > 연산 과정과 결과를 모두 출력하세요.
System.out.print("첫번째 숫자: ");
String data1 = reader.readLine();
int first = Integer.parseInt(data1);
System.out.print("두번째 숫자: ");
String data2 = reader.readLine();
int second = Integer.parseInt(data2);
System.out.printf("%d + %d = %d\n", first, second, first + second);
//숫자를 입력
String data3 = reader.readLine();
int num3 = Integer.parseInt(data3);
//위의 두줄을 한줄로 입력 가능
int num4 = Integer.parseInt(reader.readLine());
//문장
int a = 10;
//문장 : 하나이상의 표현식이 모인 집합이다.
int a; -> 표현식 : 문장 내에서 혼자 떨어져나와 독립적으로 존재 가능한 것
//a = 10;
//10;
//연산자&피연산자
//1+2 -> 1, 2는 피연산자, + 연산자
//연산자 우선 순위
//1+2x3
//연산 방향
//1+2+3+4 -> 동등한 연산자, 왼쪽에서 오른쪽으로 더해준다.
int a = 10;
int b = 3;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
System.out.println(a%b);