2023.05.24.수.TIL

heeh·2023년 5월 24일

TIL

목록 보기
8/82
post-thumbnail

1주차 과제

[요리 레시피 메모장 만들기]

  • 입력값

    • 내가 좋아하는 요리 제목을 먼저 입력합니다.
    • 요리 별점을 1~5 사이의 소수점이 있는 실수로 입력해주세요. (ex. 3.5)
    • 이어서 내가 좋아하는 요리 레시피를 한 문장씩 10문장을 입력합니다.
  • 출력값

    • 입력이 종료되면 요리 제목을 괄호([ ])로 감싸서 먼저 출력 해줍니다.
    • 이어서, 요리 별점을 소수점을 제외한 정수로만 출력해줍니다. (ex. 3)
    • 바로 뒤에 정수별점을 5점만점 퍼센트로 표현했을 때 값을 실수로 출력해줍니다. (ex. 60.0%)
    • 이어서, 입력한 모든 문장 앞에 번호를 붙여서 모두 출력 해줍니다.
  • 해설

    • Scanner sc = new Scanner(System.in);
      • 값을 입력 할 때 : Scnner / 변수 : sc
    • 제목
      • String title = sc.nextLine();
      • next를 사용하면 띄어쓰기를 하더라도 다음 값으로 넘어감
      • 제목을 입력할 때 띄어쓰기 허용할 것이기 때문에 nextLine
    • 요리 별점
      • float rate = sc.nextFloat();
    • 내가 좋아하는 레시피(1문장씩 10문장)
      • String input1 = sc.nextLine();
        ~ String input10 = sc.nextLine();
    • 괄호로 감싼 제목 출력
      • title = "[ " + title + " ]"; // [ 제목 ]
        System.out.println(title);
    • 별점을 정수로만 출력
      • int intRate = (int)rate; // 강제 형변환
        System.out.println(intRate);
    • 정수 별점을 5점만점 퍼센트를 실수로 표현
      • double percentageRate = intRate 100 / 5.0; // 자동 형변환System.out*.println(percentageRate);
    • 입력한 모든 문장에 번호 붙이기
      • System.out.println("1." + input1);
        ~ System.out.println("10." + input10);
    • 터미널에 글 써주기
      • ex) 입력 예시
        백종원 돼지고기 김치찌개 만들기
        4.5
        돼지고기는 핏물을 빼주세요.
        잘익은 김치 한포기를 꺼내서 잘라주세요.
        냄비에 들기름 적당히 두르고 김치를 넣고 볶아주세요.
        다진마늘 한스푼, 설탕 한스푼 넣어주세요.
        종이컵으로 물 8컵 부어서 센불에 끓여주세요.
        핏물 뺀 돼지고기를 넣어주세요.
        된장 반스푼, 양파 반개, 청양고추 한개를 썰어서 넣어주세요.
        간장 두스푼반, 새우젓 두스푼, 고춧가루 두스푼반 넣어주세요.
        중불로 줄여서 오래 끓여주세요~!!	
        마지막에 파 쏭쏭 썰어서 마무리하면 돼요^^
      • 예시 출력
        [ 백종원 돼지고기 김치찌개 만들기 ]
        별점 : 4 (80.0%)
        1. 돼지고기는 핏물을 빼주세요.
        2. 잘익은 김치 한포기를 꺼내서 잘라주세요.
        3. 냄비에 들기름 적당히 두르고 김치를 넣고 볶아주세요.
        4. 다진마늘 한스푼, 설탕 한스푼 넣어주세요.
        5. 종이컵으로 물 8컵 부어서 센불에 끓여주세요.
        6. 핏물 뺀 돼지고기를 넣어주세요.
        7. 된장 반스푼, 양파 반개, 청양고추 한개를 썰어서 넣어주세요.
        8. 간장 두스푼반, 새우젓 두스푼, 고춧가루 두스푼반 넣어주세요.
        9. 중불로 줄여서 오래 끓여주세요~!!	
        10. 마지막에 파 쏭쏭 썰어서 마무리하면 돼요^^
  • 주의점

    • next를 받게 되면 띄어쓰기를 통해 구분을 하기 때문에 사용 X
    • nextLine(엔터)를 통해서만 구분을 해야 함
  • 완성 *문제발생

    • 제목이 위로 올라가고 첫번째 줄이 탈락하는 상황 (줄 밀림?)

  • 수정

    • 수정 해설
      float rate = sc.nextFloat(); // 밑에
      sc.nextLine(); // 추가 해주시겠어요?
      https://limkydev.tistory.com/170
      nextFloat에 숫자 입력하면서, 한 줄이 바뀔때 개행문자(한줄 띄우기 - \n)가 포함되어 그런 것 같습니다!
    • 수정 완성
    • 수정 코드
      import java.util.Scanner;
      public class Main {
      
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              String title = sc.nextLine();
              float rate = sc.nextFloat();
              sc.nextLine();
              String input1 = sc.nextLine();
              String input2 = sc.nextLine();
              String input3 = sc.nextLine();
              String input4 = sc.nextLine();
              String input5 = sc.nextLine();
              String input6 = sc.nextLine();
              String input7 = sc.nextLine();
              String input8 = sc.nextLine();
              String input9 = sc.nextLine();
              String input10 = sc.nextLine();
      
              title = "[ " + title + " ]";  // [ 제목 ]
              System.out.println(title);
              int intRate = (int)rate; // 강제 형변환
              System.out.println(intRate);
              double percentageRate = intRate * 100 / 5.0; // 자동 형변환
              System.out.println(percentageRate);
              System.out.println("1." + input1);
              System.out.println("2." + input2);
              System.out.println("3." + input3);
              System.out.println("4." + input4);
              System.out.println("5." + input5);
              System.out.println("6." + input6);
              System.out.println("7." + input7);
              System.out.println("8." + input8);
              System.out.println("9." + input9);
              System.out.println("10." + input10);
      
          }
      
      }

JAVA2주

2-1 소개 및 사칙연산

  • 연산자에 대해 학습
  • 조건문과 반복문을 통해 프로그램 문맥 구성
  • 반복문, 조건문을 배우게 되면 그에 맞는 자료구조인 배열을 다루게 됨
  • 배열을 다루면 프로그램이 다차원적으로 보일 수 있음
  • 배열은 컬렉션과 같이 다루게 됨

연산자

  • 산술연산자 이외에도 비교연산자 등 다양한 연산자가 있음
  • 계산의 대상이 되는 것 = 피연산자
    →(2+1 에서 2와 1)
  • 계산의 목적이 되는 것 = 연산자
    → (2+1 에서 +)
  • 컴퓨터 언어, 10진수 → 2진수 이해하기

폴더, 파일 생성

  • main 파일에 코드를 적으며 코딩했지만
    src 파일 밑에 새로운 폴더 Package 만들고
    Package 안에 Java Class 타입의 파일 생성하여 w01.java 생성

간략한 산술 연산

  • x + y = z 계산하기
  • 출력하기

Main 메소드

  • 메인 클래스 안에 메인 메소드가 항상 먼저 실행돼야 함

  • 새로운 java 생성할 때 main(자동완성)으로 메인 메소드 활성화해주기

  • 작성했던 코드 로직 안으로 넣어주기

  • 시스템 아웃은 메인 메소드 안에서만 선언이 가능

연산자 종류/정리

  • 산술연산자
    • +
    • -
    • *
    • /
    • % (퍼센테이지 기호는 나머지를 구하는 기호로 사용)
    • << (비트연산)
    • << (비트연산)
  • 비교연산자(좌우를 비교하는 연산)
    • >
    • <
    • ≥ (왼쪽이 크거나 같다)
    • == (좌우가 동일하다)
    • ≠ (! & = 좌우가 동일하지 않다)
  • 논리연산자
    • && (and조건, 그리고조건, 비교해서 true값이 나오는 연산, if문)
    • || (or조건,또는조건, A 또는 B가 true를 만족할 때)
    • ! (not조건, 논리연산을 뒤집는 true일 때 false로 뒤집고 false일 때 true로 뒤집는 것)
  • 대입연산자
    • =
    • ++
  • 기타 연산자
    • (type) (형변환연산자)
    • ? : (삼항연산자)
    • instance of (인스턴스 오브 연산자)

산술연산자 예제 w02

  • 사칙연산 계산 확인하기

    package week02;
    
    public class w02 {
        public static void main(String[] args) {
            System.out.println(4 + 2); //6
            System.out.println(4 - 2); //2
            System.out.println(4 * 2); //8
            System.out.println(4 / 2); //2
            System.out.println(5 / 2); //2
            System.out.println(2 / 4); //0
            System.out.println(4 % 2); //0
            System.out.println(5 % 2); //1
    
        }
    }

    • System.out.println(5 / 2); //2
      • 2.5가 나와야 할 것 같지만 Java에서는 5 / 2를 했을 때 몫만 리턴(리턴=답변)
    • System.out.println(2 / 4); //0
      • 2를 4로 나누면 몫이 0
    • System.out.println(4 % 2); //0
      • 4를 2로 나눈 나머지는 0
    • System.out.println(5 % 2); //1
      • 5를 2로 나눈 나머지는 1, 몫은 2
  • 우선순위 연산

    • 더하기와 곱하기의 우선순위는 곱하기가 된다
      System.out.println(2+2*2); //6
    • ( ) 소괄호로 먼저 계산해주는 것을 표기하면 먼저 계산됨
      System.out.println((2+2)*2); //8
    • 곱하기에 ( )을 줘도 어차피 곱하기 먼저 계산된다
      System.*out*.println(2+(2*2)); //6
  • 변수를 이용한 연산

    • 덧셈
      		int a= 20;
              int b= 10;
              int c;
      
              c = a+b;
      
              System.out.println(c); //30
    • 뺄셈
      		int a= 20;
              int b= 10;
              int c;
      
      				c = a-b;
              System.out.println(c); //10
    • 곱셈
      		int a= 20;
              int b= 10;
              int c;
      
      				c = a * b;
              System.out.println(c); //200
    • 나눗셈(몫)
      		int a= 20;
              int b= 10;
              int c;
      				
      				c = a / b;
              System.out.println(c); //2
    • 나눗셈(나머지)
      		int a= 20;
              int b= 10;
              int c;
      
      				c = a % b;
              System.out.println(c); //0
    • 결과

2-2 비교연산자, 논리연산자

연산자 종류/정리

비교연산자 예제 w03

  • 좌측과 우측을 비교한다고 해서 비교연산자
package week02;

public class w03 {
    public static void main(String[] args) {
        System.out.println(10>9); //10이 9보다 크니? : yes (true)
        System.out.println(10>=9); //10이 9보다 크거나 같니? : yes (true)
        System.out.println(10<9); //10이 9보다 작니? : no (false)
        System.out.println(10<=9); //10이 9보다 작거나 같니? no (false)
        System.out.println(10==10); //10은 10이랑 같니? : yes (true)
        System.out.println(10==9); //10은 9랑 같니? : no (false)
        System.out.println(10!=10); //10은 10이 아니니? : no (false)
        System.out.println(10!=9); //10은 9가 아니니? : yes (true)
    }
}

  • 비교연산자의 반환값, 연산값이 true or false가 나온다 라는 결과가 중요
  • 이러한 결과를 바탕으로 if문 괄호 안에 true or false 값을 넣고 각종 연산을 함

논리연산자 예제 w04

  • 논리연산은 비교 연산의 결과값으로 받을 수 있는 boolean 값을 연결하는 연산자
  • 조건을 연결 했을 때 boolean 값들을 조합하여 참(true) 또는 거짓(false) 값인 boolean 값을 출력
  • &&(AND), ||(OR), !(NOT)
    → boolean 값을 연결 : &&(AND), ||(OR)
    → boolean 값을 바꾸는 : !(NOT)
package week02;

public class w04 {
    public static void main(String[] args) {
        boolean flag1 =true;
        boolean flag2 =true;
        boolean flag3 =false;

        System.out.println(flag1);
        System.out.println(flag2);
		}
}
  • (1) 피 연산자 중 하나라도 true이면 true => 또는(OR : ||)
    System.out.println(flag1||flag2); //ture
    System.out.println(flag1||flag2||flag3); //ture
  • (2) 피 연산자가 모두 true면 true => 그리고(AND : &&)
    System.out.println(flag1&&flag2); //true
    System.out.println(flag1&&flag2&&flag3); //false
  • (3) AND(&&) : 모두 포함 조건
    System.out.println((5>3) && (3>1)); //true && true -> true
    System.out.println((5>3) && (3<1)); //true && false -> false
  • (4) OR(||) : 둘 중에 하나만 조건
    System.out.println((5>3) || (3>1)); //true || true -> true
    System.out.println((5>3) || (3<1)); //true || false -> true
    System.out.println((5<3) || (3<1)); //false || false -> false
  • System.out.println(1<3<5); 같은 식은 불가능
    → 항상 2개를 비교하는 비교연산이 가능
  • (5) NOT(!) : 논리 부정 연산자
    System.out.println(!flag1); //flag1 = true, !로 뒤집은 값은 false
    System.out.println(!flag3); //flag3 = false, !로 뒤집은 값은 true
    System.out.println(5==5); //true
    System.out.println(!(5==5)); //true인 값을 괄호로 감싸주고 앞에 !를 붙여줘서 뒤집기 -> false
    System.out.println(5==3); //false
    System.out.println(!(5==3)); //false인 값을 괄호로 감싸주고 앞에 !를 붙여줘서 뒤집기 ->tr-
  • 총 코드
    package week02;
    
    public class w04 {
        public static void main(String[] args) {
            boolean flag1 =true;
            boolean flag2 =true;
            boolean flag3 =false;
    
            System.out.println(flag1);
            System.out.println(flag2);
    
            System.out.println("-------------");
            // (1) 피 연산자 중 하나라도 true이면 true => 또는(OR : ||)
            System.out.println(flag1||flag2); //ture
            System.out.println(flag1||flag2||flag3); //ture
    
            System.out.println("-------------");
            // (2) 피 연산자가 모두 true면 true => 그리고(AND : &&)
            System.out.println(flag1&&flag2); //true
            System.out.println(flag1&&flag2&&flag3); //false
    
            System.out.println("AND-------------");
            // (3) AND(&&) : 모두 포함 조건
            System.out.println((5>3) && (3>1)); //true && true -> true
            System.out.println((5>3) && (3<1)); //true && false -> false
    
            System.out.println("OR-------------");
            // (4) OR(||) : 둘 중에 하나만 조건
            System.out.println((5>3) || (3>1)); //true || true -> true
            System.out.println((5>3) || (3<1)); //true || false -> true
            System.out.println((5<3) || (3<1)); //false || false -> false
    
            System.out.println("NOT-------------");
            // (5) NOT(!) : 논리 부정 연산자
            System.out.println(!flag1); //flag1 = true, !로 뒤집은 값은 false
            System.out.println(!flag3); //flag3 = false, !로 뒤집은 값은 true
            System.out.println(5==5); //true
            System.out.println(!(5==5)); //true인 값을 괄호로 감싸주고 앞에 !를 붙여줘서 뒤집기 -> false
            System.out.println(5==3); //false
            System.out.println(!(5==3)); //false인 값을 괄호로 감싸주고 앞에 !를 붙여줘서 뒤집기 ->true
        }
    }

2-3 대입연산자

연산자 종류/정리

대입연산자 예제 w05

  • 대입하는 연산자, 변수를 연산해서 그 자리에서 저장(대입)하는 연산자

  • 기본대입연산자 : =

  • 복합대입연산자 : +=, -=, *= …

  • 복합대입연산자는 기본대입연산자를 간단하게 줄여서 사용하는 것, 기능은 같음

  • ++ : +=1

  • — : -=1

  • 기본대입연산자

    int number = 10;
            number = number+2;
            System.out.println(number); //12
    int number = 10;
            number = number+2;
            System.out.println(number); //12
    
            number = number -2;
            System.out.println(number); //10
    int number = 10;
            number = number+2;
            System.out.println(number); //12
    
            number = number -2;
            System.out.println(number); //10
    
            number = number *2;
            System.out.println(number); //20
    • 10이 만들어진 상태에서 2를 곱하니까 값은 20

    • number라는 변수가 계속해서 값 자체가 변경되고 있음

      int number = 10;
              number = number+2;
              System.out.println(number); //12
      
              number = number -2;
              System.out.println(number); //10
      
              number = number *2;
              System.out.println(number); //20
      
              number = number /2;
              System.out.println(number); //10
      int number = 10;
              number = number+2;
              System.out.println(number); //12
      
              number = number -2;
              System.out.println(number); //10
      
              number = number *2;
              System.out.println(number); //20
      
              number = number /2;
              System.out.println(number); //10
      
              number = number %2;
              System.out.println(number); //0
  • 복합대입연산자

    number = 10;
            number +=2; // number = number +2;
            System.out.println(number);
    • number +=2;는 number = number +2;와 같은 뜻

    • number = number +2;을 줄인 것이 number +=2;(복합대입연산자)

      number = 10;
              number +=2; // = number = number +2;
              System.out.println(number); //12
      
              number -=2; // = number = number -2;
              System.out.println(number); //10
      
              number *=2; // = number = number *2;
              System.out.println(number); //20
      
              number /=2; // = number = number /2;
              System.out.println(number); //10
      
              number %=2; // = number = number %2;
              System.out.println(number); //0

  • 복합대입연산자를 조금 더 간편하게 쓴 방법

    • ++

      • number++;
        → number에 “+1을 해서 대입해 줘라”를 한 줄로 표현한 것

        		1. number = number +1;
                2. number += 1;
                3. number++;
      • number--;
        → number에 -1을 해서 대입해 줘라를 한 줄로 표현한 것

        		1. number = number -1;
                2. number -= 1;
                3. number--;
    • 계산하기

      		number++;
              System.out.println(number); //1
      
              number--;
              System.out.println(number); //0
  • 대입연산자 주의할 점 w06

    • ++, —의 위치

    • ++, —가 변수 앞에 있으면 변수 값을 대체한 다음에 코드 한 줄이 실행이 되고 다음 줄로 넘어감

      package week02;
      
      public class w06 {
          public static void main(String[] args) {
              //대입연산자에서 주의해야 할 점
              //++, --
              int a = 10;
              int b = 10;
              int val = ++a + b--; //11 + 9=20? //21
      
              System.out.println(a);
              System.out.println(b);
              System.out.println(val);
          }
      }

      • val 변수의 코드 ++a + b—;
        → a에 1(++)을 더한 다음에 b 연산이 실행
        → -1(—)가 b 뒤에 있어서 코드의 b에는 적용이 안됨 (계산되는 순서 오류)
      • val 변수의 코드에 있는 a와 b는 ++a=11, b—=10으로 인식하여 값은 21
    • val 변수의 코드에서 ++a, b—가 아니라 각각의 a, b를 출력하면 ++, —가 그대로 적용된 ++a=11, b—=9가 출력

      		System.out.println(a); //11
              System.out.println(b); //9
    • 각각의 a, b를 찍었을 때 나온 수(a=11, b=9)와 같게 val 변수의 코드도 정상적이게 계산이 되려면?

      • ++a + --b로 바꿔주기
        package week02;
        
        public class w06 {
            public static void main(String[] args) {
                //대입연산자에서 주의해야 할 점
                //++, --
                int a = 10;
                int b = 10;
                int val = ++a + --b; //11 + 9=20? //20
        
                System.out.println(a);
                System.out.println(b);
                System.out.println(val);
            }
        }

2-4 기타연산자

연산자 종류/정리

기타연산자 예제

  • (1) 형변환 연산자

    • int는 소수점 탈락 / double은 소수점 포함

      		int intNumber = 93 + (int)98.8;
              System.out.println(intNumber);
      
              double doubleNumber = (double) 93 + 98.8; // 93.0+98.9
              System.out.println(doubleNumber);

  • (2) 삼항연산자

    • 비교연산자와 항상 함께 쓰임

    • 비교연산자의 결과 : true or false -> 이 결과의 값에 따라 결정되는 무언가

    • 조건 ? 참 : 거짓

    • b라는 값은 x와 y가 같다면 true, 아니면 false

      		int x =1;
              int y =9;
      
              boolean b = (x == y) ? true : false; //false
              System.out.println(b);

      • x와 y가 다르기 때문에 같냐고 물어본 질문의 답은 false
    • s라는 값은 x와 y가 다르니? 같다면 정답, 다르면 오답

      		int x =1;
              int y =9;
      
      //x가 y랑 다르니? yes
              String s = (x != y) ? "정답" : "오답"; //정답
              System.out.println(s);

      • x와 y는 다르기 때문에 다르다고 물어본 질문의 답은 정답
    • x가 y보다 크니?
      → x가 y보다 큰 경우에 x를 max에 넣어 주고 반대의 경우 y를 max에 넣어 주겠다
      → x랑 y중에 큰 값을 max에 넣어 주겠다

      				int x =1;
              		int y =9;
      
      				int max = (x > y) ? x : y;
              		System.out.println(max);
      • int max = (x > y) ? x : y;
        → x : y; = true : false; 위치동일

      • x=1, y=9이기 때문에 더 큰 9 값을 가지고 있는 y가 들어감

    • y가 x보다 크니?

      				int x =1;
              		int y =9;
      
      				int min = (x < y) ? x : y;
              		System.out.println(min);
      • int min = (x < y) ? x : y;
        → x : y; = true : false; 위치동일

      • y(9)가 x(1)보다 크기 때문에 true 자리에 있는 x(1)이 들어감
  • (3) instance of(3주차 때 클래스와 객체를 배워야 더 정확하게 알 수 있음)

    • 피 연산자가 조건에 명시된 클래스의 객체인지 비교하여
      맞으면 -> true
      틀리면 -> false
    • 클래스와 객체를 3주차 강의에서 배움

궁금한 점…

팀원 답변 & 튜터님 답변은 -> 비공개 노션

변수, 변수의 대문자?

  • 질문
    • int number
      int intNumber
      변수를 이렇게 주는 건..
      다른거랑 헷갈릴까봐 넘버 앞에 인트를 붙여주거나..
      그냥 쓰는 사람 마음이거나... 그런거죠??
      intNumber 할 때 대문자 넣는 건 낙타의 등... 이라고 설명 들었긴 한데
      intnumber 이런식으로 전부 소문자면 헷갈릴까봐
      구분해주는걸까여 ㅎㅎ... 왜 대문자일까여..
  • 결론
    • 그 자체가 규칙이어서

대입연산자에서 주의해야 할 점?

  • 질문
    • 대입연산자에서
      int val = ++a + b--;
      이렇게 쓰는거 주의하라고 했는데요,
      a, b 각각 출력하는건 정상적으로 나오더라구요!
      그럼 b-- 라고 표기하는 것 자체는 잘못된 건 아닌가요?!
      대입연산자 말고 다른 상황에서 ++나 --를 뒤에 적어 놓을 수 있나요?
  • 결론
    • ++a + b— 와 같이 위치를 바꿔쓰면 절대 안됨 (결과 값 달라짐)
    • a++ + b— 로 할 수 있긴 하지만 ++a + —b와 같이 앞에 놓고 쓰는 것이 규칙/약속
    • 후진대입법 : 로직 끝나고 값이 증가 / 전진대입법 : 로직 끝나기 전에 값이 증가
    • c언어에서는 전진, 후진대입법 개념이 중요해서 숙지하기
profile
공부하자개발하자으쌰으쌰

1개의 댓글

comment-user-thumbnail
2023년 5월 25일

정리를.. 이렇게 잘해도 되는건가요 ..?
너무 훌륭합니다 ㅎㅎ 매우 많은 것들을 배우셨군요 !
앞으로도 이렇게 기록하시고 배워나가시다보면 돌아볼 날이 꼭 올거에요!
앞으로도 화이팅빠셍입니다!

답글 달기