열심히 끝까지
디바이스 융합 자바(Java) day02 - 디버깅표,연산자,Scanner,유효성검사,제어문,교환알고리즘 본문
디바이스 융합 자바(Java) day02 - 디버깅표,연산자,Scanner,유효성검사,제어문,교환알고리즘
노유림 2022. 6. 8. 17:466/7 추가문제
- 사이 띄우기
a b c
--------------------
5
4 4 0
5 3
1
1) 연산자의 개수파악
2) 연산자들의 우선순위를 파악
--a;
int b = a;
a - b => ?
int c = ?
a++
b--;
존재하는 연산자
대입연산자, 후위증감연산자, 산술연산자, 후위증감연산자
>> 산술연산자 > 대입연산자 > 후위증감연산자 > 후위증감연산자 순으로 진행
package class01;
public class Test01 {
public static void main(String[] args) {
// static 객체와 무관
int num = 10;
num++; // num += 1; num = num + 1; ++num;
num--; // num -= 1; num = num - 1; --num;
int a = 5;
int b = --a;
int c = a++ - b--;
System.out.println(a);
System.out.println(b);
System.out.println("c : " + c--);
System.out.println("c : " + c);
}
}
------------------------------
콘솔은 이제 다른 곳에서 쓰지 못하는 곳도 있음 그때 사용하는 것이 "디버깅표"
디버깅표
10 != 11 !(T) F
package class01;
public class Test02 {
public static void main(String[] args) {
// 주석 -> 가독성 => "유지보수"
// 변수 3요소
// : 공간 / 자료형 / 공간의 이름(식별자)
// : 아스키코드, 형변환(명시적 형변환, 자동형변환)
// 연산자 -> 우선순위 => "디버깅표"
// 비교연산자(질문) : 크기비교연산자 (컴퓨터는 답변!)
// "같다." ==
// "같지 않다." !=
// 등호는 크기비교연산자 뒤에 붙여서 사용
System.out.println("비교연산자");
System.out.println(10 != 11); // 이산수학
// 논리연산자
// and ~~이고, ~~이면서 동시에, ~~하고 &&
// or ~~이거나, 혹은, 또는 || (파이프라인)
// not 부정 !
// 스도코딩
// 한국어 코딩
System.out.println("논리연산자");
System.out.println(10 <= 15 && 15 < 50);
// System.out.println(15 <= x < 50); 사용 불가
System.out.println(15 <= 5 || 5 < 50);
}
}
- 주석을 달아 가독성을 높이고, "유지보수"를 가능하게 한다.
- 변수의 3요소 : 공간, 자료형, 공간의 이름(식별자)
- 형변환 종류 : 명시적 형변환(강제 형변환), 자동 형변환
- 연산자의 우선순위를 표로 나타내는 방법 >> 디버깅표
- 비교연산자(크기비교연산자) : ==(같다), !=(같지 않다)
>> 등호는 크기비교연산자 뒤에 붙여서 사용
- 논리연산자 : && (and(~이고, ~~이면서 동시에, ~~하고)), || (or(~~이거나, 혹은, 또는),
! (not(부정))
-조건연산자(삼항연산자)
: int num = 조건식 ? T : F;
: 조건식이 참이면 T, 거짓이면 F
------------------------------------
int a = 8, b = 15, c = 3;
a랑 b랑 비교 -> a
a랑 c랑 비교 -> c
package class02;
public class Test03 {
public static void main(String[] args) {
// 조건 연산자(삼항 연산자)
// int num = 조건식 ? T : F;
// int res = 10 < 5 ? 1 : 2;
// System.out.println(res);
// int a = 123, b = 60;
// int max = a > b ? a: b;
// System.out.println(a + "와 " + b + "중에서 더 큰 값은 " + max + "입니다.");
// a, b, c 라는 정수 3개가 존재합니다.
// a, b, c 값은 각자 다 다릅니다.
// a, b, c 중에서 가장 작은 값은 __입니다.
int a = 8, b = 15, c = 3;
// int min = a < b ? a : b; // a와 b를 비교
// min = min < c ? min : c; // 19번 라인의 결과와 c를 비교
int min = a<b ? a<c ? a:c : b<c?b:c;
System.out.println(a + ", " + b + ", " + c + "중에서 가장 작은 값은 " + min + "입니다.");
}
}
int a < b? a , c : b , c
----------------------------------
[입력]
입력할 때 객체를 사용
Scanner // 사람의 입력값을 전달하기 위한 객체
int a = 10; // 변수 초기화 (int a <= 변수 선언)
double b = 3.14;
String str = new String("apple");
// String 이름의 틀로 a라는 객체가 갖고싶다. 새로운 String 안에 재료를 넣는다.
// String이란 붕어빵 틀로 a라는 붕어빵을 만들어 먹고싶다.
// 그러면 (재료)가 들어간 String틀로 만든 빵을 새로 만듬
// new String("apple") 은 함수
// String이라는 클래스가 있습니다.
// 이를 통해 str이라는 이름의 객체를 생성하겠습니다.
// new 클래스(재료) << 행위를 통해서 객체를 생성할 수 있다!(rule)
String c = "apple"; // 객체라는건 클래스를 통해 생성되는구나!
String str = new String("apple"); // 기본적으로 제공되지만 Scanner는 제공되지 않는다.
a, b -> 변수
str, c -> 객체
-------------------------
블로그)
: 앞으로 만나는 Exception은 캡쳐해서 등록해 놓고 나중에 절대 띄우지 않겠다는 마인드로 할 것
Exception 분석
1. 몇번 라인?
Test04.java13
2. 무슨 종류?
java.util.InputMismatchException
InputMismatchException : 지정한 변수 타입과 다른 타입을 입력받았을 때 발생하는 예외
출처: https://ande226.tistory.com/24 [안디스토리:티스토리]
----------------------
1. 사용자의 액션
-> 편의성 고려
2. 유효성 검사(예외처리)
---------
package class02;
import java.util.Scanner; // 자동 import
public class Test04 {
public static void main(String[] args) {
// [입력]
Scanner scanner = new Scanner(System.in);
// scanner 자리는 식별자이기 때문에 이름은 아무거나 넣어도 상관 없음
// 사람의 입력값을 전달하기 위한 객체
// ctrl + shift + O
// ☆ 유효성 검사(예외처리) -> 총으로 아군을 쏘면 체력이 닳지 않게 코딩을 해야 함
// System.out.print("정수입력 : "); // UI(넓은 의미로) 사용자의 편의성을 고려하자!
// int num = scanner.nextInt();
// System.out.print("실수입력 : ");
// double d = scanner.nextDouble();
// System.out.println("프로그램 종료 : " + num + " | " + d);
// □(빨간색) : 강제종료버튼
System.out.print("정수 1 입력 : ");
int a = scanner.nextInt(); // 정수 1 입력
System.out.print("정수 2 입력 : ");
int b = scanner.nextInt(); // 정수 2 입력
System.out.println(a + "와 " + b + "중에서 더 큰 값은 " + (a > b ? a : b) + "입니다.");
}
}
-------------
정수 1 입력 : 9
정수 2 입력 : 10
// 두개의 값을 서로 다르게 입력해주세요!!
9와 10중에서 더 큰 값은 10입니다.
package class02;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("정수1 입력 : ");
int n1 = scanner.nextInt();
System.out.println("정수2 입력 : ");
int n2 = scanner.nextInt();
int res = n1 > n2 ? n1 : n2;
System.out.println(n1 + "와 " + n2 + "중에서 더 큰 값은 " + res + "입니다.");
}
}
---------------
package class02;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
/*
System.out.print("정수1 입력 : ");
int n1 = scanner.nextInt();
System.out.print("정수2 입력 : ");
int n2 = scanner.nextInt();
int res = n1 > n2 ? n1 : n2;
System.out.println(n1 + "와 " + n2 + "중에서 더 큰 값은 " + res + "입니다.");
*/
System.out.print("정수 입력 : ");
int num = scanner.nextInt();
String res = num%2 == 0? "짝수" : "홀수";
System.out.println(num + "는 " + res + "입니다.");
}
}
---------------------
정수 1 : 50
정수 2 : 5 // 정수1 >= 정수 2
5은(는) 50의 약수입니다.
정수 1 : 50
정수 2 : 3
3은(는) 50의 약수가 아닙니다.
package class02;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
/*
System.out.print("정수1 입력 : ");
int n1 = scanner.nextInt();
System.out.print("정수2 입력 : ");
int n2 = scanner.nextInt();
int res = n1 > n2 ? n1 : n2;
System.out.println(n1 + "와 " + n2 + "중에서 더 큰 값은 " + res + "입니다.");
*/
/*
System.out.print("정수 입력 : ");
int num = scanner.nextInt();
String res = num%2 == 0? "짝수" : "홀수";
System.out.println(num + "는 " + res + "입니다.");
*/
System.out.print("정수 1 : ");
int num1 = scanner.nextInt();
System.out.print("정수 2(정수 1보다 작은 숫자) : ");
int num2 = scanner.nextInt();
String ans = num1%num2 == 0 ? "약수입니다." : "약수가 아닙니다.";
System.out.println(num2 + "은(는) " + num1 + "의 " + ans );
}
}
------------------------------------------------
빨간줄 : 문법상의 오류 -> 반드시 해결해야만 수행 가능!
노란줄 : 문제가 되지는 않으나 더 나은 방법이 있다고 컴퓨터가 제시해 줌
제어문
종류 : 조건문, 반복문
1. 조건문
>> 할 때도 있고, 안할 때도 있을 때 사용
: if, switch(switch로 가능한 것을 if도 다 가능하기 때문에 switch는 여기서 다루지 않을 것)
: if는 괄호는 가지고 있지만 함수는 아님, 제어문!
: 중괄호를 꼭 써야 하는 이유! - 가독성을 위해서!
if(조건식) {
조건식이 참일 때 수행할 문장;
}
: 조건식을 충족하지 못하면 중괄호를 통과하지 못하고
조건식을 충족하면 중괄호를 통과한다.
: else는 가장 가까운 if문을 짝꿍으로 생각한다.
디버깅표
(num이 10보다 작을 때)
num num>10 num<=10
------------------------------
5 F
T
20line
21line
22line
23line
->26line - 27line - 28line...
------------------------------------------
(num이 10보다 클 때)
num num>10 num<=10
------------------------------
11 T
F
20line
21line
22line
23line -> 24, 25
26
-> 29
------------------------------------------
else 시 디버깅표
(num이 10보다 작을 때)
num num>10
------------------------------
5 F
20
21
22
23 -> 26, 27, 28
-----------------------------------------
else 시 디버깅표
(num이 10보다 클 때)
num num>10
------------------------------
11 T
20
21
22-> 24, 25 -> 29
---------------------------------------
package class04;
import java.util.Scanner;
public class Test06 {
public static void main(String[] args) {
// 제어문
// 종류 : 조건문, 반복문
// 1. 조건문
// -> 할 때도 있고, 안할 때도 있을 때 사용
// : if, switch(이 수업에서는 switch 제외하고 수업)
if(10 > 5) {
System.out.println("확");
}
// 빨간줄 : 문법상의 오류 -> 반드시 해결해야만 수행 가능!
// 노란줄 : 문제는 없다(하지만 더 나은 방법이 있다는 의미) -> 더 나은 방향을 제시해 줌
System.out.println("인");
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 : ");
int num = sc.nextInt();
if(num > 10) {
System.out.println("큰 수입니다.");
}
else { // 자신과 가장 가까운 if문을 짝꿍으로 생각
System.out.println("작은 수입니다.");
}
// 2. 반복문
// -> 2회 이상, N번, N회, 연속적으로, 계속, 무한하게, 여러번,...
// : while, for
}
}
---------------------------------------
문제
1. 정수 1: 11
정수 2: 12
11이(가) 크다.
12이(가) 크다.
두수가 같다.
2. 정수 입력
양수입니다.
음수입니다.
0입니다.
3. 정수 입력
홀수입니다.
짝수입니다.
--------------------------------------
나의 방법
// 문제 1
System.out.print("정수 1 : "); // 정수 1 입력
int n1 = sc.nextInt();
System.out.print("정수 2 : "); // 정수 2 입력
int n2 = sc.nextInt();
if(n1 > n2) { // 정수 1이 크다면
System.out.println(n1 + "이(가) 크다.");
}else if(n1 < n2) { // 정수 2가 크다면
System.out.println(n2 + "이(가) 크다.");
}else { // 둘이 같으면
System.out.println("두 수가 같다.");
}
System.out.println();
// 문제 2
System.out.print("정수 입력 : ");
int number = sc.nextInt(); // 정수 입력
if(number > 0) { // 0보다 크면
System.out.println(number + "은(는) 양수입니다.");
}else if(number < 0) { // 0보다 작으면
System.out.println(number + "은(는) 음수입니다.");
}else { // 0이면
System.out.println(number + "은(는) 0입니다.");
}
System.out.println();
// 문제 3
System.out.print("정수 입력 : ");
int number1 = sc.nextInt();
if(number1 % 2 == 0) {
System.out.println("짝수입니다.");
}else {
System.out.println("홀수입니다.");
}
--------------------------------------
강사님의 방법
// 문제 1
System.out.print("정수 1 : ");
int num1 = sc.nextInt();
System.out.print("정수 1 : ");
int num2 = sc.nextInt();
if(num1 != num2) {
// 크기 비교를 해야된다면의 경우
// int num = num1 > num2 ? num1 : num2;
// System.out.println(num + "이(가) 크다.");
// 중첩 if (가독성이 떨어진다.)
if(num1 > num2) {
System.out.println(num1 + "이(가) 크다.");
}else {
System.out.println(num2 + "이(가) 크다.");
}
}
else {
System.out.println("두 수가 같다.");
}
System.out.println();
--------------
System.out.print("정수 1 : ");
int num1 = sc.nextInt();
System.out.print("정수 2 : ");
int num2 = sc.nextInt();
if(num1 > num2) {
System.out.println(num1);
}else if(num1 < num2) {
System.out.println(num2);
}
else {
System.out.println("두 수가 같다.");
}
System.out.println();
-----------------------------------
//문제 2
System.out.print("정수 1 : ");
int num1 = sc.nextInt();
if(num1 > 0) {
System.out.println(num1);
}else if(num1 < 0) {
System.out.println("음수");
}
else {
System.out.println("0");
}
System.out.println();
----------------------------------
// 문제 3
// 0도 추가하여 쓰기
System.out.print("정수 : ");
int num = sc.nextInt();
if(num == 0) {
System.out.println("0입니다.");
}else if(num%2 != 0) {
System.out.println("홀수");
}
else {
System.out.println("짝수");
}
System.out.println();
--------------------------------------
문제
1. 정수1: 100
정수2: 50
50은 100의 약수입니다.
정수1: 50
정수2: 100
50은 100의 약수입니다.
정수1: 11
정수2: 2
2은 11의 약수가아닙니다.
정수1: 2
정수2: 11
2은 11의 약수가아닙니다.
2. 나이입력: 8
무료입니다.
1이상~12이하,60이상~200이하
무료입니다.
13이상~20미만
1000원입니다.
20이상~60미만
2000원입니다.
0이하,200초과
잘못된 입력입니다.
-----------------------------------
나의 방법
//다른 문제1
System.out.print("정수 1 : ");
int num1 = sc.nextInt();
System.out.print("정수 2 : ");
int num2 = sc.nextInt();
if(num1 >= num2) {
String res = num1 % num2 == 0 ? "약수입니다." : "약수가 아닙니다.";
System.out.println(num2 + "은(는)" + num1 + "의 " + res);
}else{
String res = num2 % num1 == 0 ? "약수입니다." : "약수가 아닙니다.";
System.out.println(num1 + "은(는)" + num2 + "의 " + res);
}
// 다른 문제2
System.out.print("나이 입력 : ");
int age = sc.nextInt();
if((age>=1 && age<=12) || (age>=60 && age<=200)) {
System.out.println("무료입니다.");
}else if(age >= 13 && age < 20) {
System.out.println("1000원입니다.");
}else if(age >= 20 && age < 60) {
System.out.println("2000원입니다.");
}else {
System.out.println("잘못된 입력입니다.");
}
--------------------------------------
강사님(다른 학생들) 방법
package class05;
import java.util.Scanner;
public class Test08 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
/*
// 다른 문제1
System.out.print("정수1 : ");
int a = sc.nextInt();
System.out.print("정수2 : ");
int b = sc.nextInt();
// [교환 알고리즘]
// -> "임시저장변수" tmp
if(a>b) {
int tmp = a;
a = b;
b = tmp;
}
// : a가 b보다 작다는 것이 보장될 수 있도록!
String msg = b%2==0?"약수입니다." : "약수가 아닙니다.";
System.out.println(a + "은(는) " + b + "의 " + msg );
*/
// 다른 문제2
System.out.print("나이 입력 : ");
int age = sc.nextInt();
// 유효성 검사
// 0이하 200초과는 잘못된 입력이다.
// "유지보수" 200에서 500으로 쉽게 바꿀 수 있는 것(바꿀 수 밖에 없을 때)
if(age <= 0 || age > 200) { // 잘못된 입력 범위
System.out.println("잘못된 입력입니다.");
}
else {
// 가격을 측정할 수 있는 구간
if(age <= 12 || age >= 60) {
System.out.println("무료입니다.");
}
else if(age < 20) {
System.out.println("1000원입니다.");
}
else {
System.out.println("2000원입니다.");
}
}
}
}
--------------------------------------
[교환 알고리즘]
-> "임시저장변수" tmp
a, b = b, a;
a=b;
b=a;
이렇게는 안되는 이유를 디버깅으로!
a b
----------------
100 50
50 50
교환이 되지 않음!!
>> 이렇게 교환해야함
int tmp = a;
a = b;
b = tmp;
디버깅
a b tmp
---------------------
100 50 100
50 100
-------------------------------------------
package class05;
import java.util.Scanner;
public class Test09 {
public static void main(String[] args) {
// 연산자 우선순위 -> 디버깅표
// 비교, 논리, 조건(삼항) 연산자
// 입력 Scanner
// ☆ 유효성 검사 : 사용자 편의성을 고려하며 코딩한다!
// 제어문 : 조건문/반복문
// [교환 알고리즘] : 임시저장변수 tmp
// 1~12 사이의 정수 :
// 12 초과 숫자 -> 잘못된 입력입니다.
// 9월은 가울입니다.
// 3~5, 6~8, 9~11, 12~2
Scanner sc = new Scanner(System.in);
System.out.print("1~12사이의 정수 입력 : ");
int month = sc.nextInt();
if(month < 1 || month > 12) {
System.out.println("잘못된 입력입니다.");
}
else {
if(month <= 2 || month >= 12) {
System.out.println(month + "월은 겨울입니다.");
}
else if(month <= 5) {
System.out.println(month + "월은 봄입니다.");
}
else if(month <= 8) {
System.out.println(month + "월은 여름입니다.");
}
else {
System.out.println(month + "월은 가을입니다.");
}
}
}
}
--------------------------------------------
package class07;
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) {
// 문자열 입력
// -> 심화내용
// => 웹 개발에 꼭 필요한 것은 아님
// 디버깅표 작성, 주석달기, 우선순위 따지는 것은 무조건 제대로 익혀놓을 것
Scanner sc = new Scanner(System.in);
System.out.print("문자열입력 : ");
String str = sc.nextLine();
// next() >> 띄어쓰기를 구분할 수 없음!
// nextLine() >> 띄어쓰기를 구분함(한 줄 단위로 진행)
System.out.print("정수입력 : ");
int i = sc.nextInt();
System.out.println("문자열 : " + str);
System.out.println("정수 : " + i);
}
}
(문자열에 서울시 관악구 봉천동을 입력 시 발생)
17번 라인의 입력값 타입이 올바르지 않아서 발생한 문제!
----------------------------------------------------
package class07;
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) {
// 문자열 입력
// -> 심화내용
// => 웹 개발에 꼭 필요한 것은 아님
// 디버깅표 작성, 주석달기, 우선순위 따지는 것은 무조건 제대로 익혀놓을 것
Scanner sc = new Scanner(System.in);
System.out.print("정수입력 : ");
int i = sc.nextInt();
sc.nextLine(); // 버퍼공간에 남아있는 Enter값을 제거하는 용도
System.out.print("문자열입력 : ");
String str = sc.nextLine();
// 정수 입력할 때 들어간 엔터가 버퍼에 남아있는 상태에서
// 그 엔터를 보고 nextLine은 엔터를 찾아가는 애로
// 버퍼에 남아있는 엔터를 보고 공백 입력받은 줄 알고 입력받지 않고 넘긴다.
System.out.println("문자열 : " + str);
System.out.println("정수 : " + i);
}
}
---------------------------------
문제1
세개 중에 하나 빨강/노랑/초록
-> 알 수 없는 단어에요!
빨강 - 정지
노랑 - 주의
초록 - 출발!
package class07;
import java.util.Scanner;
public class Test11 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("색 입력(빨강|노랑|초록) : ");
String color = sc.next();
if(color.equals("빨강")) {
System.out.println("정지");
}
else if(color.equals("노랑")) {
System.out.println("주의");
}
else if(color.equals("초록")) {
System.out.println("출발!");
}
else {
System.out.println("?????");
}
}
}
☆String은 원시타입이 아닙니다!
클래스입니다!
-> 객체 != 변수
☆연산자들의 대상
: 변수
---------------------------------
1. 문제
1시간 넘어가면 문제가 존재..... 잘한다 하면 30분 미만(문제 30분 이상)
과제문제)
시간 입력 : 4 // 1~12시
분 입력 : 50 // 0~59분
/// 잘못된 입력 -> 종료
4시 50분의 1시간 20분 전 시간은
3시 30분 입니다.
3시 10분의 1시간 20분 전 시간은
1시 50분 입니다.
1시 10분의 1시간 20분 전 시간은
11시 50분 입니다.
풀어본 결과 6/9일자에 해설 올라감
package class08;
import java.util.Scanner;
public class Test12 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("시간을 입력(1~12시) : ");
int hour = sc.nextInt();
if(hour < 1 || hour > 12 ){
System.out.println("종료");
}
else {
System.out.print("분을 입력(0~59분) : ");
int minute = sc.nextInt();
if( minute < 0 || minute > 59) {
System.out.println("종료");
}
else {
int time = (hour * 60) + minute;
if(time < 80) {
time += 720;
}
int reshour = (time - 80)/60;
int resminute = (time - 80)%60;
System.out.println(hour + "시 " + minute + "분의 1시간 20분 전 시간은 "
+ reshour + "시 " + resminute + "분입니다.");
}
}
}
}
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)' 카테고리의 다른 글
디바이스 융합 자바(Java) day06 - 함수,오버로딩 (0) | 2022.06.14 |
---|---|
디바이스 융합 자바(Java) day05 - 버블정렬,최대값 찾기,이진검색,배열 이진검색,flag 변수 (0) | 2022.06.13 |
디바이스 융합 자바(Java) day04 - 중첩반복문,배열 (0) | 2022.06.10 |
디바이스 융합 자바(Java) day03 - 제어문 (0) | 2022.06.09 |
디바이스 융합 자바(Java) day01 - 변수,자료형,연산자 (0) | 2022.06.07 |