[항해99] 주특기언어 2일차 TIL - 사실상 코딩의 알파이자 오메가, 조건문과 반복문

LIHA·2023년 1월 19일
0

항해99

목록 보기
18/54
post-thumbnail
post-custom-banner

조건문과 반복문을 쉽게 이해하기 위해서는 flow chart를 이해하는 것이 좋다.
헉 이게 뭐야 QA할때 봤던 구문 커버리지 조건 커버리지랑 똑같잖아 ㅁㄴㅇㄹ

아니, while (true) 는 대체 뭔소리야? 조건이 왜저래?

-> 이건 while문 내부에 특별한게 없는 한 구문 계속 돌리겠다는 얘기임.
재훈님과 도연님이 조건으로 1을 써줘도 된다고 했다! -> 어라 안되는데?
->C는 되는데 JAVA는 안된다고 한다.

char형 변수 ch가 공백이나 탭이 아닐 때?

아니, 공백은 그렇다 치고 탭은 뭐 어떻게 표현하라고? IDE에서 탭치면 그냥 중괄호 끝으로 가는데?
->공백, 탭 등을 whitespace라고 한다. \로 시작하는 표현법이 있다.
수평 탭의 경우 \t이므로 조건문에 ch != '\t'를 넣어보자. JAVA에서의 공백 표현은 '' 이기도 하고, \t, \n, \r, \f 가 있다. (C랑 똑같다)
출처 블로그 - C언어지만 자바에도 되네!

동현 기술매니저님의 조언 : 알든 모르든 알고리즘은 필수.

동현 매니저님의 조언 : 언어 실력이 부족하든 아니든 알고리즘 문제는 반드시 풀것.
자료 훑고 알고리즘 문제 풀면서 부딪치고 깨지면서 익히는게 훨씬 빠르고 효과적이다. 언어를 알아도 알고리즘은 푸는 것이 좋고.
흘러가는 대로만 따라가면 안된다 - 그냥 그런 수준에 머물게 될 것이기에. 코테는 꼭 따로 풀것.

레디스, 도커? 지금은 이런것들을 모르니까 검색해서 지식을 채우는 것도 좋다.

내가 어떤 기능을 구현하고 싶은데. 구현을 못해. 코드를 어떻게 써야하는지 모르니까. 개발언어는 일종의 외국어이므로, 한글로 써놓고 번역해보는 느낌도 좋다.


(결론은 울거야 토할거야)

원빈 멘토님의 JAVA 팁 : if/else if, return과 break.

그냥 if의 나열과 else if를 거는건 좀 달라요. 출처 블로그

if if if ~ 로 걸어놓는것과 if else if else if 를 걸어놓은건 다르다.
if if if ~ 연속은 위의 if가 참이든 아니든 다음 if들이 실행된다.
하지만 else if로 이어지는 구문은 위의 if가 참이면 아래의 else if 들은 아예 실행되지 않는다.

else if 문 안에도 또다시 if-else 문을 사용할 수 있다. 이건 간단한 계산기만 만들어봐도 금방 알게 된다. 예를 들어 나눗셈을 할때 0으로 나눌 수 없기 때문에, 분모 자리로 입력받는 수가 0이 아닌지 알아야 함.
그렇기 때문에 조건문 속에 조건문이 들어가게 된다.

else if (입력받은 계산 부호가 / 일때)
	///아차차, 혹시 0으로 나누는거 아니지?   
  if (나누는 수 != 0 이면) {
    계산 수행해주고,
    }
  else { '0으로 나눌수 없습니다' 라고 출력해줘! }

대강 이런 구조로 이해하면 된다.


(윈도우 계산기주제에 앙탈은. 쳇. 잘 짜여있군.)

break와 return은 무엇을 끝내는지 달라요.

break는 본인과 가장 가까운 반복문을 찾아서 종료 시키지만, return; 은 메서드를 통채로 종료시킨다.
그래서 break보다 윗줄에 return이 나오면 메인메서드 퇴근해버리고, break까지 닿지 않는다. 그런식으로 쓰면 intelliJ가 unreachable이라고 구문 지우라고 함.

주워듣기 - List와 Map은 뭐지?

List
ArrayList
LinkedList
Map
HashMap

조건문을 지나가지 않고 그냥 나와요! 어떡하죠?😖

        char ch='(';
        if((ch >= 'A' || ch <= 'Z') || (ch >= 'a' || ch <= 'z')){
        }

이렇게 했더니 자꾸 print에서 (이 그대로 나온다. 나는 A-Z, a-z 범위 안에 있는지 확인하고 싶은데 왜지?😖
-> 저 범위 안에 있는걸로 나오려면 ㅁㅁ이상'이고' ㅇㅇ이하 라는 조건이 모두 맞아야 한다. 그러니 ||이 아니라 &&로 써야함!
전공자 도연님 재훈님 찬양해... 좋은 팀원분들 덕분에 공부 중🤩

= 쓸땐 안되더니 == 쓰니까 돼요. 뭐가 다른거지?🤔

   int year = 440; (임의로 초기화해줌)
        if((year%400 = 0 || year%4 = 0) && (year%100 != 0)){
        }

이렇게 썼을 땐 intelliJ가 에러메세지를 뱉었다.
java: unexpected type
required: variable
found: value

   int year=440;
        if((year%400 == 0 || year%4 == 0) && (year%100 != 0)){
        }

아, 등호가 한개면 리터럴이 아니라 변수를 써줘야 하나보다. year%400 = (변수) 이런 식으로.
좌변 값이랑 우변 값이랑 완전히 같아? 를 알고 싶으면 == 를 쓰는거였지.
오, 전문가도 그렇다고 한다! =는 할당용 연산자로만 쓰이고, == 이 값을 비교하는 용도란다. 나랑 같은 질문을 한 사람이 있구나?

뭐야? 이거 어떻게 풀어? 1 + (1+2) + (1+2+3)... 네?

       for (j= 10; j >= 1; j--) {
            for (i = 0; i < 11; i++) {
                sum += i;
                System.out.println(sum);
            }
            totalSum = sum;
        }

이건...가? 아니 이게 아니었다! 도연님이 220이라고 했는데 난 엉뚱한 수가 나온다 ㅠㅠㅠㅠㅠ


    public static void main(String[] args) {
        int sum = 0;
        int totalSum = 0;
        int i;
        for (i = 0; i < 11; i++) {
            sum += i;
            totalSum += sum;

            System.out.println(sum);
        }
        System.out.println("totalSum="+totalSum);
    }

이 코드가 맞는 것이었다!

while을 쓸까 for를 쓸까?

        while (true) {
            for (num = 0; sum<100; num++) {
                num
                if (sum >= 100)
                    break;
            }
        int i =0;
        while (i <= 10) {
            int j = 0;
            while (j <= i) {
                System.out.print("*");
                j++;
            }
            System.out.println();
            i++;
        }

이렇게 하면 별이 주루루룩 찍히고, int i, j를 바깥에 선언하면 별이 한개씩밖에 안 찍히고 끝난다!

랜덤추출? Math.random을 쓰자!

(int)(Math.random()*6) + 1;

Math.random을 사용하는 방법?
0<= x < 1 이기 때문에 원하는 수만큼 곱하기 해주고 +1 더한다.

정수의 각 자릿수를 추출해서 더하고 싶은데 하는 방법을 모르겠어🤔

재귀호출법을 써봤는데 자료형을 합치질 못하겠다!
->결국 건호님 말씀대로 나눗셈의 나머지 방법을 썼다!

JAVA는 식의 위치에 따라 값이 달라지는 경우가 엄청 많네!?🤯

        for (i = 0; i < 5; i++) {
            num = num / 10;
            sum += num % 10;

이렇게 하면 sum이 10이 나오고(처음의 5가 들어가지 않는듯 하다)

        for (i = 0; i < 5; i++) {
            sum += num % 10;
            num = num / 10;

이렇게 하니 sum이 15가 나온다!

public class는 한번만 쓸수 있어요!

객체지향에 가까워진다...? 🤔 뭔진 모르겠지만 도연님(전공자)이 그렇다니까 그런가보다. 그래서 public Main은 한개만 쓸수 있다고.


CPU 점유율을 찾아와 봅시다 - Compatibility Telemetry를 끄자

JAVA공부와는 전혀 상관없는 문제긴 하지만 컴퓨터 사용엔 중요한 녀석이라 기록. 이것때문에 IDE 2개이상 켜면 컴퓨터 터지는 소리 났었음.

컴퓨터 CPU 점유율이 자꾸 100으로 치솟아서 컴퓨터에서 청소기 소리가 나길래 작업관리자를 봤더니 Microsoft Compatibility Telemetry가 한 30% 이상 먹고있었다. 아니 누구세요?
-> 윈도우 10의 사용자 정보 피드백을 위한 프로그램이라 한다.
내 CPU점유율을 갉아먹으면서까지 보내줄 이유는 없으니 꺼도 된다고 해서 바로 OFF.

시작버튼 -> 톱니바퀴(설정) -> 진단 및 피드백 설정 -> 스크롤 좌라락 내려서 피드백 빈도를 '안 함' 설정.
레지스트리 수정방법도 있는데 노후한 영감님 컴퓨터인 나는 일단 둘다 해놓았다.
도움이 된 엔지니어 블로그

profile
갑자기 왜 춤춰?
post-custom-banner

0개의 댓글