Day 02 - 자료형, 연산자, if 조건문
자료형(이어서)
문자 : char
문자열 : String (참조자료형)
String str = “안녕하세요”;
package Day02;
public class StringTest {
public static void main(String[] args) {
String str = "안녕하세요.";
System.out.println(str);
}
}
변수 선언 관련
선언
기본형
int a; //초기화가 안되고 선언만 한 경우
int b = 10; //10으로 초기화
문자(char)가 왜 기본 자료형에 들어가죠?
-> 각각의 문자는 "유니코드" 라는 고유의 숫자값 가지고 있음.
A를 인코딩하여 65라는 정숫값으로 변환하여 저장하고, 이것을 문자 형태로 다시 출력할 때에,
메모리에 저장되어 있는 유니코드 값을 다시 A로 출력해줌.
Scanner
참조자료형 : 클래스 – 자바에서 제공되는 것 – Scanner, System, String …
클래스 – 프로그래머 또한 만들 수 있는다. 나도 만들 수 있다.
[기본 형태]
Scanner ->
Scanner sc = new Scanner(System.in);
sc.next() : 문자열 입력 / sc.nextInt() : 정수 입력 / sc.nextFloat
package Day02;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in) // 스캐너 사용하는 객체를 생성함.
int a = sc.nextInt();
System.out.println(a);
}
}
형변환
- 형변환은 되는 것들 있고, 아니 되는 것들 있다.
- 기본 자료형은 형변환을 하는 게 좋지 않다.
- 나중에 참조자료형은 거의 필수가 된다.
- 자동형변환은 컴퓨터가 알아서 형변환 ⇒ 개발자가 몰라! 그러면 오히려 위험해질 수 있지.
- 강제형변환 () 강제로 개발자가 자료형을 바꾼다.
=> 그래서 그나마 강제형변환이 낫다는 것이다.
* 우선순위 중에 문자열이 가장 우선순위가 높다.
* 근데 문자열 → 숫자 형변환은 안 된다.
ex1)
기본적으로 형
정수 -> int
실수 -> double
7(int) + 1.5(double)
7.0(double) + 1.5(double)
8.5
ex2) 문자열 형변환 예시
우선순위 최고
String -> “”
“안녕하세요”(String) + 5(int) + 3(int)
안녕하세요53
package Day02;
public class CastingTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 자동형변환
System.out.println(7+1.5); //8.5 출력
System.out.println("안녕하세요." + 5 + 3); // 안녕하세요.53 출력
System.out.println("안녕하세요." + (5 + 3)); // 안녕하세요.8 출력
// 강제형변환
System.out.println((int)37.7); // 37 출력
// 하지만 형변환 쓰는 건 최대한 지양하도록 하자.
}
}
연산자와 형변환
1. 산술연산자
+ - * / % ++ --
%연산자 : 나머지 연산자
⇒ 나머지 연산자는 몫을 못 넘는다는 특징이 있다.
2. 관계연산자
< > <= >= ==(같다) !=(다르다)
5 > 3 && 8 < 3
5 > 3 || 8 < 3
!(5 > 3) ->
부등호 연산은 붙여서 만들면 안 된다.
ex) 5 < a < 10 (x)
⇒ a > 5 && a <10 (0)
3. 논리연산자
A && B - 두조건에 모두 참이어야 참
A || B - 한조건만 참이면 참
!A – 현재 조건 결과를 반대로 돌리는 것
※ &&첫조건이 false -> 뒤조건을 보지 않는다.
※ || 첫조건이 true -> 뒤조건을 보지 않는다.
*컴퓨터는 최적화를 한다.
첫 번째 조건이 false가 나온다, 그러면 뒷 조건을 볼 필요가 있을까? 아니.
or을 볼 때, 첫 번째 조건이 true 가 나와 그럼 뒤 조건을 볼 필요가 있을까? 아니.
조건부는 개수 제한이 없다. 그래서 어려운 것.
** 전위연산자와 후위연산자
Int a = 10;
a++ : 현재 명령어 라인에서는 증가X
그 이후 명령어에서 1이 증가됩니다.
++a : 바로 1 증갑니다.
a-- : 현재 명령어 라인에서는 감소X
그 이후 명령어에서 1이 감소 됩니다.
--a : 바로 1감소
https://es1015.tistory.com/260
** 단축 연산자
퀴즈
계산기 만들기
package Day02;
import java.util.Scanner;
public class Quiz01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in); // 스캐너 사용하는 객체를 생성함.
System.out.print("숫자1 입력 : ");
int a = sc.nextInt();
System.out.print("숫자2 입력 : ");
int b = sc.nextInt();
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));
}
}
조건문
조건문의 종류 : if문, switch문
조건 -> 관계연산자 + 논리연산자, 관계연산자
조건의 영역에 따라 참, 거짓을 판단하고 실행
길을 가는데, 땅에 1원이 떨어져 있어.
이 때 주울 거야? no? → 그냥 지나가
그런데 내가 5,000원이면 주우려고 했어,
그런데 10000원이 있네? 그러면 실행한다.
즉, 해당 조건이 내가 설정한 조건에 맞으면 실행 ⇒ 단일 조건문
if / esls 조건문은 흑백논리
if가 아니면 else를 실행하고
if면 그냥 if 가 실행이 된다.
package Day02;
import java.util.Scanner;
public class IFTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in); // 스캐너 사용하는 객체를 생성함.
System.out.println("성적을 입력하세요 : ");
int grade = sc.nextInt(); // 합격 90~100
if(grade >= 90 && grade <=100) {
System.out.println("축하합니다. 합격입니다.");
System.out.println("대단하시네요.");
}
// 불합격 0~89
else if(grade < 90 && grade >= 0) {
System.out.println("아쉽지만, 불합격입니다.");
System.out.println("그런데, 공부는 하신 건가요?");
}
// 이외는 잘못된 입력.
else {
System.out.println("잘못된 입력입니다.");
}
}
}
package Day02;
import java.util.Scanner;
public class IFTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("땅에 떨어진 돈 입력 : ");
int money = sc.nextInt();
if (money >= 1000) {
System.out.println(money + "원 을 주워서");
}
System.out.println("간다. ");
}
}
== 비교와 equals
String a = "abc";
if(a == "abc") {
System.out.println("값이 같습니다.");
}
if(a.equals("abc")) {
System.out.println("값이 같습니다.");
}
** 웬만하면 equals 쓰세요...
(과외에서 배운 동일성/동등성 개념)