클라우드 융합 Full-stack 웹 개발자 양성과정/Java

프로그래밍 언어응용-연산자, if문

thesunset 2022. 9. 25. 13:47

# 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
  • google
  • naver
  • facebook

webbrowser

클라이언트가 요청을 하면, 서버가 응답을 해줌 = 웹 서비스

웹통신의 기본은 요청과 응답

우리는 인터넷을 하는게 아닌 웹서비스를 이용하고 있는 것.

어떻게?

google.com을 접속하려할 때

내 주소도 입력을 해야 보낼 수 있음(택배처럼)

MAIC 주소 / IP 주소 두 종류가 있음

MAIC: 물리적, 제조사에서 찍어서 보내줌 > 변하지 않음 (ex, 집의 실질적인 위치)

IP: 논리적, 언제든 변할 수 있음 (ex, 집주소)

IP주소

처음 네트워킹은 얼마 없어서 주소가 간단했음, 연구소에서 많이 사용하다가 점점 많아져 관리하기 힘들어짐. (처음엔 파일로 관리함 host.txt)

그래서 생긴 것이 DNS (domain network system)

=> 그래서 사실 요청을 두 번 하게 되는 것.