프로그래밍 언어응용-연산자, if문
# A_Arithmetic
package com.kh.operator;
import java.util.Scanner;
public class A_Arithmetic {
* 산술연산자 => 이항연산자, 우선순위가 일반 수학 산술과 동일
+ : 덧셈
- : 뺄셈
* : 곱셈
/ : 나눗셈
% : 모듈러(Modular) => 나눗셈에서의 나머지를 구함
public void method1() {
int num1 = 10;
int num2 = 3;
/*System.out.println("num1 :" + num1 + "\nnum2 :" + num2);
System.out.println("num1+num2 : " + (num1 + num2));
// 결과값은? "num1 + num2 : 103"
// 문자열과 정수형이 더해지면, 문자열로 자동 형변환
// (num1 + num2) 괄호로 묶어줘야 13이라는 결과값이 나옴!
// 만약에 묶지 않고 출력하면 String(문자열)로 인식을 하기 때문에 "10" + "3" 결과값으로 103이 찍힘
//ctrl + +,-: 화면 확대, 축소
System.out.println("num1 - num2 :" + (num1 - num2));
//뺄셈의 경우 괄호로 묶지 않으면
//문자열과 num1을 하나로 묶어서 새로운 문자열을 만들기 때문에 오류 발생!!!
System.out.println("num1 x num2 :" + (num1 * num2));
System.out.println("num1 / num2 :" + (num1 / num2));
System.out.println("num1 % num2 :" + (num1 % num2));
*, /, % 우선순위가 +, -보다 높기때문에 묶지 않아도 먼저 연산이 됨.
단, 가독성을 위해 괄호를 사용할 것을 권장함.
특이케이스!
System.out.println(5/0);
//정수로 0을 나눌 수 없음
// AritmeticExceptoin : /by zero 에러
}
- 사탕 나눠주기 프로그램
메소드명: methodCandy()
입력받을 값: 1. 인원 수 2. 사탕 갯수 ->스캐너
1인당 가질 수 있는 사탕의 갯수: 사탕 갯수 / 인원 수
남은 사탕의 갯수: 사탕 갯수 % 인원 수 ->산술연산자
-출력 형식-
1인당 가질 수 있는 사탕의 갯수 : X개
남은 사탕의 갯수 : X개 ->출력문
public void methodCandy() {
Scanner sc = new Scanner(System.in); //new는 heap에 생성
System.out.println("총 사탕의 갯수는?");
int candy = sc.nextInt();
System.out.println("총 인원은?");
int person = sc.nextInt();
System.out.println("1인당 가질 수 있는 사탕의 갯수: " + (candy/person));
System.out.println("남는 사탕의 갯수: " + (candy%person));
}
}
# B_InDecrease
package com.kh.operator;
public class B_InDecrease {
* 증감연산자: 단항연산자로서 한 번에 1씩 증가(더하거나)하거나 감소(빼거나)하는 연산을 한다.
=> 먼저 증감을 할건지, 나중에 증감을 할건지 연사자의 위치에 따라서 달라진다.
[표현법]
++: 값을 1씩만 증가시키는 연산자
--: 값을 1씩만 감소시키는 연산자
* 연산자의 위치
- 전위연산: ++값, --값 -> 먼저 값을 증감하고 그 값을 처리
- 후위연산: 값++, 값-- -> 값을 처리하고 나서 증가하거나 감소하겠다.
> 후위연산
public void method1() {
int num = 10;
System.out.println("num: " + num); //num: 10
num++; //num이라는 이름을 가진 변수공간의 값에다가 1을 증가시키겠다.
// = num + 1
System.out.println("@처리@num: " + num); //11
num--;
System.out.println("num: " + num); //10
System.out.println("num: " + num++); //10
System.out.println("num: " + num++); //10
}
public void method2() {
int a = 10;
int b = a++;
System.out.println("a: " + a); // 11
System.out.println("b: " + b); // 10
b라는 변수에 a값을 먼저 대입하고 (선 처리 부분)
a라는 값을 증가시킨다 (후 연산)
int c = 20;
int d = c--;
System.out.println("c: " + c); //19
System.out.println("d: " + d); //20
}
> 전위연산
public void method3() {
int a = 10;
int b = ++a;
System.out.println("a: " + a); //11
System.out.println("b: " + b); //11
System.out.println("a: " + --a); //10
}
public void method4() {
> 후위 연산자
int num1 = 20;
int result = num1++*3;
System.out.println("num1: " + num1); // 21
System.out.println("result: " + result); //60
//num * 3을 대입하는 것까지가 처리
//그 다음 a를 증가
> 전위 연산자
int num2 = 20;
int result2 = ++num2 * 3;
System.out.println("num2: " + num2); //21
System.out.println("result2: " + result2); //63
}
}
# C_Compound
package com.kh.operator;
public class C_Compound {
* 복합 대입 연산자: "=" 대입연산자
: 다른 산술연산자랑 대입연산자가 결합한 것
=> 자기 자신과 해당 산술연산 후에 그 결과를 자기자신한테 덮어씌우는 것
+=
-=
*=
/=
%=
ex) int a = 1;
a = a + 3;
기존에 a라는 변수 공간에 값에 3을 더하고 그 결과값을 다시 a에 대입하겠다.
a += 3
veryBigNumber = 100;
veryBigNumber = veryBigNumber + 100;
veryBigNumber += veryBigNumber
public void method1() {
int num = 12;
System.out.println("현재 num: " + num); //1. 12
//num을 3증가시키기
num = num + 3;
System.out.println("3을 증가시킨 num: " + num); //2. 15
//num을 3증가시키기
num += 3;
System.out.println("3을 증가시킨 num: " + num);
// num을 3을 감소시키기
num -= 3;
System.out.println("3을 감소시킨 num: " + num); //4. 15
// num을 3배 증가시키기
num *= 3;
System.out.println("3배 증가시킨 num: " + num); // 5. 45
// num을 2배 감소시키기
num /= 2;
System.out.println("2배 감소시킨 num: " + num); // 6. 22
// num을 2로 나눈 나머지를 num에 대입
num %= 2;
System.out.println("num을 2로 나눈 나머지를 대입한 값: " + num); //7. 0
}
}
# D_LogicalNegation
package com.kh.operator;
public class D_LogicalNegation {
* 논리(값) 부정 연산자: 논리값(true, false)을 반대로 바꿔주는 연산자
[표현법] !논리값;
public void method1() {
System.out.println("ture의 부정!: " + !true); // false
System.out.println("false의 부정!: " + !false); // true
boolean b1 = true;
boolean b2 = !b1;
System.out.println("b1: " + !!b1); //ture
System.out.println("b2: " + b2); //false
}
}
# E_Comparison
package com.kh.operator;
public class E_Comparison {
* 비교 연산자 (관계연산자)
- 두 개의 값을 가지고 비교, 이항연산자
- 비교연산한 결과 -> 참일 경우 true, 거짓일경우 false
- 특정 조건을 제시할 수 있는 ☆조건문★에서 쓰일 예정
* 종류
1. 크고 작음을 비교
a < b : a가 b보다 작습니까? 초과
a > b : a가 b보다 큽니까? 미만
a <= b : a가 b보다 작거나 같습니까? 이하
a >= b : a가 b보다 크거나 같습니까? 이상
2. 일치함을 비교 : 동등비교
a == b : a와 b가 일치합니까?
a != b : a와 b가 일치하지 않습니까?
=> 피연산자는 숫자, 결과값은 논리값
public void method1() {
int a = 10;
int b = 25;
System.out.println("a < b: " + (a < b)); //1. true
System.out.println("a <= b: " + (a <= b)); // 2. true
System.out.println("25 <= b: " + (25 <= b)); // 3. true
boolean result1 = a == b; // 연산 자체를 변수에 대입 가능
System.out.println("result1: " + result1); //4. false
boolean result2 = a != b;
System.out.println("result2: " + result2); //5. true
System.out.println("a - b < 0:" + (a - b <0)); // 6. true
System.out.println("a가 짝수입니까?: " + (a % 2 == 0)); //7. true
System.out.println("b가 짝수가 아닙니까?: " + (b % 2 != 0)); //8.true
}
}
# F_Logical
package com.kh.operator;
import java.util.Scanner;
public class F_Logical {
* 논리 연산자: 두 개의 논리값을 연산하는 연산자
[표현법]
논리값 논리연산자 논리값 => 결과값도 논리값
* 종류
1. AND 연산자: 논리값 && 논리값
좌항과 우항의 값이 모두 true여야만 최종 결과가 true
2. OR 연산자 : 논리값 || 논리값
좌항 또는 우항의 값 중 하나라도 true 이면 최종 결과가 true
> AND
public void method1() {
// 사용자가 입력한 정수값이 양수 "이면서(이고)" 짝수인지 확인!
Scanner sc = new Scanner(System.in);
// ctr + shift + o => import 단축키
System.out.println("정수를 입력해주세요.: ");
int num = sc.nextInt();
boolean result1 = ((num > 0) && (num % 2 == 0));
//boolean result2 = false && (num > 0); // 데드코드
//&&의 의미 : ~~이면서, ~~이고, 그리고
System.out.println("사용자가 입력한 정수가 양수이면서 짝수입니까?: " + result1);
}
public void method2 () {
//입력한 정수값이 1이상 100이하인지 확인!
Scanner sc = new Scanner(System.in); //heap에 생성
System.out.println("정수를 입력해주세요.: ");
int num = sc.nextInt();
// 1 <= num <= 100
// num이 1보다 크거나 같고 "그리고" 100보다 작거나 같습니까?
boolean result1 = ((1 <= num) && (num <= 100 ));
System.out.println("사용자가 이력한 저우가 1이상 100이하의 값입니까?: " + result1);
sc.close(); // Scanner 사용이 끝났을 때 표시
}
> OR
public void method3() {
//사용자가 입력한 값이 'A' "또는" 'a'인지 확인!
Scanner sc = new Scanner(System.in);
System.out.println("한글자만 입력해주세요.:");
//char ch = sc.next(); -> 대입연산자(=)를 기준으로 같은 문자형이여야 함. (좌)char (우)string
char ch = sc.next().charAt(0);
//인덱스(index): 문자열에서 순서, 0번부터 시작
//charAt(0);를 입력시 char형으로 변환되고 0번째 문자를 가르킴
//System.out.println(ch);
//==비교연산자는 피연산자 == 숫자
//단일문자의 경우 비교연산이 가능한가? -> 가능
//왜? int형으로 자동형변환이 되기때문
boolean result1 = (ch == 'A')||(ch == 'a');
// ||: ~~이거나, 또는
System.out.println("사용자가 입력한 알파벳이 A또는 a인가요? :" + result1);
* &&: 두 개의 조건이 모두 true일때 true
ture && true : true
ture && false : false
false && true : false
false && false : false
* ||: 두 개의 조건 중 하나라도 true이면 true
true || true : true
true || false : true
false || true : true
false || false : false
}
public void method4() {
int num = 10;
boolean result = false && (num>0);
// Deadcode : 뒤의 비교연산 구문이 실행되지 않음
// 실행 오류는 나지 않지만 굳이 결과값은 false일텐데 왜쓰지?라는 뜻.
}
}
# G_Triple
package com.kh.operator;
import java.util.Scanner;
public class G_Triple {
* 삼항연산자: 피 연산자가 3개 => 값 3개와 연산자 1개로 이루어짐(조건식형식으로 쓰임)
조건식: 결과값에 따라서 연산을 처리하는 방식
결과값이 참일 경우, 식1을 처리하고
결과값이 거짓일경우, 식2를 처리.
[표현식]
조건식 ? 조건이 true인경우 결과값 : 조건이 false일 경우 결과값
public void method1() {
// 사용자가 입력한 값이 양수인지 아닌지 판별 후 그에 맞는 결과 출력
Scanner sc = new Scanner(System.in);
System.out.println("정수를 입력해주세요. :");
int num = sc.nextInt();
//String result = (num > 0) ? "양수" : "음수";
// 조건식 ? 조건식이 true일 경우 결과값 : 조건식이 false일경우 결과값
String result = (num > 0) ? "양수" : (num == 0) ? "0" : "음수";
System.out.println(num + "은(는)" + result);
}
public void method2() {
// 짝수, 홀수 판별
Scanner sc = new Scanner(System.in);
System.out.println("정수를 입력해주세요:");
int num = sc.nextInt();
String result = (num % 2 ==0) ? "짝수" : "홀수";
//num % 2 != 0 ? "홀수"
//num % 2 == 1 ? "홀수"
System.out.println(num + "은(는)" + result);
}
public void method3() {
//영문자 하나를 입력받아서 대문자인지 아닌지 판별
Scanner sc = new Scanner(System.in);
System.out.println("영문자 한글자를 입력하세요.: ");
char ch = sc.nextLine().charAt(0);
//'a' ~ ch ~ 'z' :소문자
String result = ('a' <= ch && ch <= 'z' ) ? "대문자가 아닙니다" : "대문자입니다";
System.out.println(result);
}
public void method4() {
//문자를 3개 입력 받아서 다 똑같으면 true 아니면 false
Scanner sc = new Scanner(System.in);
System.out.println("첫 번째 문자 한글자를 입력해주세요: ");
char ch1 = sc.next().charAt(0);
System.out.println("두 번째 a문자 한글자를 입력해주세요: ");
char ch2 = sc.next().charAt(0);
System.out.println("세 번째 문자 한글자를 입력해주세요: ");
char ch3 = sc.next().charAt(0);
String result = (ch1==ch2) ? ((ch2==ch3) ? "true" : "false") :"false";
System.out.println(result);
}
}
# A_If
package com.kh.chap01.condition;
import java.util.Scanner;
public class A_If { //클래스 영역 시작
* 단독 if문
[표기법]
if() {
조건문이 true일 경우 실행될 코드
}
=> 조건식의 결과가 true일 경우 :{}(중괄호)안의 코드들이 실행됨
=> 조건식의 결과가 false일 경우 : {}(중괄호)안의 코드들을 건너 뜀
> 점심메뉴 고르기
public void lunchMenu() {
Scanner sc = new Scanner(System.in);
//맑음, 비옴
System.out.print("오늘 날씨는 어떤가요?(맑음, 비옴):") ;
//맑음: 영춘옥
//비옴: 고냉지
String weather = sc.nextLine();
String lunch = (weather.equals("맑음")) ? "영춘옥" : "고냉지" ;
// == 대신 문자열은 equals 메소드를 사용
System.out.println("오늘의 점심은" + lunch + "입니다.");
}
> 삼항연산자 때 해봤던 거
public void method1() {
//정수를 입력받고 양수/0/음수 출력
Scanner sc = new Scanner(System.in);
// 1. sout => ctrl + space, 2. syso => ctrl + space
// 3. sysout => ctrl + space, 4. Sout => ctrl + space
System.out.println("정수를 입력해주세요>");
int num = sc.nextInt();
//만약에 사용자가 입력한 값이 0보다 크다면? ==양수면? true
if(num>0) { //if문 영역의 시작
System.out.println("양수");
}//if문 영역 종료
//만약에 사용자가 입력한 값이 0이라면?
if(num==0) {
System.out.println("0");}
if(num<0) {
System.out.println("음수");}
} // 메소드1영역 끝
public void method2() {
//if문을 이용해 홀수, 짝수 판별
//양수일 경우만 조건문을 실행하시오
Scanner sc = new Scanner(System.in);
System.out.println("정수를 입력해주세요>");
int num = sc.nextInt();
//양수인지 판별 num > 0
만약에 사용자가 입력한 값이 양수 //if num >0
이고 //&&
사용자가 입력한 값이 짝수(2로 나눴을 때 나머지가 0) //num %2 == 0)
if ((num>0) && (num%2==0)) {System.out.println("짝수");}
홀수 조건 추가 시,
만약에 사용자가 입력한 값이 양수 //if num >0
이고(이면서) //&&
사용자가 입력한 값이 홀수(2로 나눴을 때 나머지가 1) //num %2 == 1)
if((num > 0) && (num % 2 == 1)) {System.out.println("홀수");}
- 중첩 if문
//결과는 동일
if (num>0) { // 외부 if문 영역이 시작되는 곳
if(num % 2 == 0)System.out.println("짝수");
if(num % 2 == 1)System.out.println("홀수");
} // 외부 if문 끝
System.out.println("하하");// 메소드 영역 안에 있기 때문에 if조건과 상관없이 출력됨
}
public void method3() {
//주민번호 체크
//주민번호를 입력받아서 남성(1,3)/여성(2,4)
//주민번호 형식(XXXXXX-1(2,3,4)XXXXXX)
Scanner sc = new Scanner(System.in);
System.out.println("주민번호를 입력해주세요(-포함)>");
String personId = sc.nextLine(); // - 가 문자이기 때문에 int형식으로 받지 못함
// :순서가 있는 문자들의 나열:
//"a b c d e f g" => 문자열
//0 1 2 3 4 5 6
//순서를 index라고 함 *index는 0번부터 시작
입력받은 주민번호로부터 성별에 해당하는 '문자'를 추출
//charAt(7) =>주민번호 상 8번째 있는 인덱스를 추출
char gender = personId.charAt(7);
// 1 == '1' => ?? 자료형이 달라 false를 인출
if(gender=='1' || gender=='3') {System.out.println("남자");}
// 만약에 사용자가 입력한 주민등록번호에서 8번째 문자가 1또는 3이면
// if gender =='1' || '3'
if(gender=='2' || gender=='4') {System.out.println("여자");}
// 만약에 사용자가 입력한 주민등록번호에서 8번째 문자가 2또는 4이면
// if gender =='2' || '4'
if(gender !='1' && gender != '2' && gender !='3' && gender !='4') {
System.out.println("외계인");
만약에 사용자가 입력한 문자가 1도 아니고 2도 아니고 3도 아니고 4도 아니면,
if gender !='1' && !='2' && !='3' && !='4'
}
}
} //클래스 영역 끝
Internet환경이 구축되어있기 때문에 해저테이블이 닿지 않아도 해외, 타지역의 웹 사용 가능
통신가능한 장비는 모두 다 선으로 연결되어있음. = Internet
웹
- amazon
- naver
webbrowser
클라이언트가 요청을 하면, 서버가 응답을 해줌 = 웹 서비스
웹통신의 기본은 요청과 응답
우리는 인터넷을 하는게 아닌 웹서비스를 이용하고 있는 것.
어떻게?
google.com을 접속하려할 때
내 주소도 입력을 해야 보낼 수 있음(택배처럼)
MAIC 주소 / IP 주소 두 종류가 있음
MAIC: 물리적, 제조사에서 찍어서 보내줌 > 변하지 않음 (ex, 집의 실질적인 위치)
IP: 논리적, 언제든 변할 수 있음 (ex, 집주소)
IP주소
처음 네트워킹은 얼마 없어서 주소가 간단했음, 연구소에서 많이 사용하다가 점점 많아져 관리하기 힘들어짐. (처음엔 파일로 관리함 host.txt)
그래서 생긴 것이 DNS (domain network system)
=> 그래서 사실 요청을 두 번 하게 되는 것.