JAVA 공부 (DAY 4)

hmLee·2021년 11월 19일
0

자바 기초

목록 보기
3/6

백틱 안에 코드를 넣으면 코드블럭이 만들어지는 건 알고 있었는데
첫줄 백틱 뒤에 언어 이름을 넣으면 자동으로 바꿔준다는건 몰랐다. 바보다😥


자동형변환

  • 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것을 말한다.
  • 자동형변환은 기본자료형이 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 가능하다.
double pi; //double : 8byte
float p =3.14f; //float : 4byte

pi = p;

//int PI = pi; 
//int : 4byte, incompatible types Error.

강제형변환(= 캐스팅 Casting)

  • 강제적으로 큰 데이터 타입을 작은 데이터 타입으로 쪼개어서 저장하는 것을 말한다.
  • 캐스팅 연산자를 사용한다. ()
double pi; //double : 8byte
float p =3.14f; //float : 4byte

pi = p;

int PI = (int) pi;
  • 서로 다른 타입의 피연산자가 있을 경우 크기가 큰 타입으로 자동 변환된 후 연산을 수행한다.
  • ex) int타입과 double타입을 연산하면 double로 자동 변환되고 연산된다. 결과는 double이다.
int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue;

삼항연산자

  • 3개의 피연산자를 필요로하는 연산자.
  • 조건식 ? 값 또는 연산식1 : 값 또는 연산식2;
  • 조건식이 true 인 경우 결과값이 값 또는 연산식1, false일 경우 결과값이 값 또는 연산식2
//두 개의 정수를 입력받아 더 큰 수를 출력
import java.util.Scanner;

Scanner scan = new Scanner(System.in);
		
System.out.println("첫번째 정수: ");
int num1 = scan.nextInt();
System.out.println("두번째 정수: ");
int num2 = scan.nextInt();
		
int max = num1 > num2 ? num1 : num2;
System.out.println(max);
  • if문으로 작성할 수 있지만 데이터가 간단할 때는 삼항연산자를 사용하는 것이 더 효율적이다.
//두 개의 정수를 입력받아 더 큰 수를 출력
import java.util.Scanner;

Scanner scan = new Scanner(System.in);
		
System.out.println("첫번째 정수: ");
int num1 = scan.nextInt();
System.out.println("두번째 정수: ");
int num2 = scan.nextInt();

int max;
if(num1 > num2) {
	max = num1;
} else {
	max = num2;
}

if 조건문

  • 조건식의 결과에 따르 블록 실행 여부가 결정된다.
  • if문, if-else문, if-else if-else문 등
if (조건1) {
	조건 1이 참일 때 실행할 문장1;
    조건 1이 참일 때 실행할 문장2;
    :
} else if (조건2) {
	조건 2이 참일 때 실행할 문장1;
    조건 2이 참일 때 실행할 문장1;
    :
}

//점수를 입력받아 합격, 불합격 여부를 출력하기
import java.util.Scanner;

Scanner scan = new Scanner(System.in);
System.out.println("점수를 입력하세요: ");
		
int score = scan.nextInt();
if(score >= 60) {
	System.out.println("합격");
} else if(score <= 40) {
	System.out.println("불합격");
}

Scanner()

  • 값을 입력받기 위해서는 java.util 패키지의 Scanner 클래스를 사용해야한다.
  • Scanner import 와 new 연산자를 사용해 메모리에 올려주는 과정이 필수다.
import java.util.Scanner;

Scanner scan = new Scanner(System.in);

next친구들 정리

  • scanner의 메소드 중에서 많이 사용하는 next 친구들 정리
MethodDescription
nextBoolean()Scans the next token of the input into a boolean value and returns that value.
nextByte()Scans the next token of the input as a byte
nextShort()Scans the next token of the input as a short.
nextInt()Scans the next token of the input as an int.
nextLong()Scans the next token of the input as a long.
nextFloat()Scans the next token of the input as a float.
nextDouble()Double, Scans the next token of the input as a double.
nextLine()String, Advances this scanner past the current line and returns the input that was skipped.
(개행문자 '₩n'을 포함하는 한 line을 읽고 개행문자를 버린 나머지를 string으로 리턴)
next()String, Scans the next token of the input as a string.
close()cloase this scanner.

※ token : 구분자를 기준으로 나뉘어 있는 문자열 정보.

  • 숫자를 입력받는 경우 주로 nextInt를 사용한다.
  • nextLine은 개행문자를 포함한 부분일 읽는다.
  • nextLine을 사용하기 전에 앞서 숫자를 입력받는 경우 nextInt를 사용하게 되는데 이때 사용자가 엔터키를 누르면 개행문자가 입력 돼 다음에 오는 nextLine을 사용할 수 없게 된다.
import java.util.Scanner;

Scanner scan = new Scanner(System.in);
		 
System.out.println("숫자를 입력하세요: ");
int num = scan.nextInt();
System.out.println("문장을 입력하세요: ");
String str = scan.nextLine();

System.out.println("숫자: " + num);
System.out.println("문장: " + str);

//콘솔창
숫자를 입력하세요: 
1
문장을 입력하세요: 
숫자: 1
문장: 
  • 1을 입력하고 엔터키를 누르면 ₩n가 올라가므로 사용자는 문장을 입력할 기회 없이 프로그램이 종료된다.
  • 순서를 바꿔 문장을 먼저 입력받거나, next()를 사용하는 방법으로 문제를 해결할 수 있다.
//next()사용
import java.util.Scanner;

Scanner scan = new Scanner(System.in);

System.out.println("숫자를 입력하세요: ");
int num = scan.nextInt();
System.out.println("문장을 입력하세요: ");
String str = scan.next();

System.out.println("숫자: " + num);
System.out.println("문장: " + str);

//콘솔창
숫자를 입력하세요: 
1
문장을 입력하세요: 
Hello
숫자: 1
문장: Hello

언제 nextLine()을 쓰는지 너무너무 궁금한데 아직 못 찾았다..

switch - case 문

  • case별로 구분해서 사용하는 조건문이다.
switch(조건식) {
        case 값1:
        	조건식의 결과값이 값1일 때 실행할 문장1;
        	조건식의 결과값이 값1일 때 실행할 문장2;
        	:
        	break;
        case 값2:
        	조건식의 결과값이 값2일 때 실행할 문장1;
        	조건식의 결과값이 값2일 때 실행할 문장2;
        	:
        	breakl
        default: //default는 선택
        	조건식의 결과값이 나머지일 때 실행할 문장;
}
  • 조건이 참일 때 조건식을 빠져나가는 것이 아니라, 모든 case를 다 돌기 때문에 각 case별로 break를 넣어줘야 한다.
  • switch-case문 제약조건.
    • 조건식의 결과는 반드시 정수 or 문자열이어야 한다. ex) 결과값이 1.5일 수 없음
    • 조건식의 결과는 반드시 값이 한 개만 와야한다. ex) 결과값이 score >= 90일 수 없음
    • case 의 값은 정수, 상수(문자), 문자열만 가능하고 중복이 불가능하다.
  • 모든 switch-case문은 if문으로 표현이 가능한데, if문과 비교되는 장점은 가독성이 있다는 점인데
    난 아직 이 점에 동의 못했다. if문 조아..
//점수를 입력받아 90점 이상은 A, 80점 이상은 B, 
//70점 이상은 C, 60점 이상은 D, 나머지는 F출력하기

Scanner scan = new Scanner(System.in);
System.out.println("Enter your score: ");
int num = scan.nextInt();
		
switch (num / 10) {
case 10:
case 9:
	System.out.println("A");
	break;
case 8:
	System.out.println("B");
	break;
case 7:
	System.out.println("C");
	break;
case 6:
	System.out.println("D");
	break;
default:
	System.out.println("F");
	break;
}
//if문으로 작성할 수도 있지만 /연산자가 몫만 반환한다는 것을 활용하여 switch-case문으로 작성하였다.

반복문 for문

  • 초기값, 조건식, 증감식을 모두 가지고 있는 반복문
//사용방법
for(초기값; 조건식; 증감식) {
	조건이 참일 때 반복실행할 문장1;
	조건이 참일 때 반복실행할 문장2;
	:
}

//예시
for (int i = 1 ; i <= 5 ; i += 1){
	System.out.print("*");
}
//결과값
//*****
  • i는 루프제어변수이다. 루프제어변수를 1로 두면 몇 번 반복하는지 보기 쉽다.
  • 초기값과 증감식은 여러개 둘 수 있다.
  • 읽는 순서
    • 초기값 > 조건식 (=true) > 반복실행문장 > 증감식 > 조건식 (=true) > 반복실행문장 > 증감식 > ... > 조건식 (=false) > 반복문 종료
//1~10까지 정수의 합 구하기

int sum = 0;
for (int i = 1; i <= 10 ; i += 1) {
    sum += i ;
}

System.out.println("1~10까지 정수의 합 = " + sum);
//1~10까지 정수의 합 = 55
  • for(;;) 는 무한루프이므로 쓰지말자!

지금은 아주 간단한 예시만 연습하기 때문에 nextLine()을 써도 문제가 없었는데
복잡한 코딩을 하게되면 아마 엄청 오류가 날 것 같다.
그냥 next()도 엔터치면 입력되고 출력도 되는데, 엔터가 매우매우 중요한 기능이 있나?
왜 next()대신 신경써서 써야하는 nextLine()을 쓰지?? 어디다 쓰지??
하는 의문이 들었지만... 앞으로 차차 해결이 되겠지

profile
정말 개발자가 될 수 있을까?

0개의 댓글