[구디아카데미]DAY 14 연습문제(1~6) , 이차원 배열(1~5)

NA YE SOM·2023년 7월 18일
0

*연습문제가 잘 안 풀렸지만 규칙을 찾으면서 조금씩 도전해봐야겠다는 생각이 들었다. 구구단을 출력하는법 , arrays.toString 사용하는방법 등을 다시 한번 복습해야겠다.

1. 월에 따른 계절 (코드 1줄로 해결하기)

연속된 구간으로 나타나게 됨

3으로 나눠서 몫을 구하고자 함 -> 몫이 1인 숫자들


-> 0,1,2는 3으로 나눠지지 않으니까





2. 10, 20, 30, 40, 50을 배열 a에 저장하고 출력하기 // 배열 a: [10, 20, 30, 40, 50]

-> 배열의 길이 고정

-> 배열 a를 순회하고 있다(접근하면 됨)
-> 전체적인 윤곽 보기

배열요소 : 배열의 이름 + 인덱스 -> 호출



arrays.ToString

3.'A', 'B', 'C', ...'Z'를 배열 a에 저장하고 출력하기


-> 배열 a를 순서대로 순회한다

-> 배열 28개 모두를 A로 채워라


0,1,2 -> index(인덱스) : i라고 볼 수 있음


(문자랑 숫자 연결 : char(2byte) + int(4byte) 타입의 문제)
( 2byte 가 2개 늘어서 4byte로 늘수 있음)

a[i](2 byte) = ch + i(4byte)


복사 : ctrl + atrl + 방향키
이동 : atrl + 방향키

4. 배열 a의 마지막 3개 요소 0을 배열 b의 요소로 바꾸기




몇개를 복사? 3개
b배열 0에 있는 요소를 a배열 3에 있는 곳으로 3개를 복사

5.


-진법 변환을 위해서 '나머지'값을 씀


-> 17은 가지고 있음


-배열의 마지막 요소에 저장

-> 인덱스로 따지면 인덱스 값을 하나씩 줄여가면서 나머지 값만 취득함 : 몫이 0이 나올때까지


-> while문이 좋음, 0만 아니면 계산 가능

-> 종료 조건만 강조 하면 되서 : while문이 좋음

배열의 인덱스 마지막 자리에 저장하시오

-> 사용후 감소하도록

NUMBE를 2로 나눈 값이 새로운 NUMBER

-> 복합연산으로 줄이기


-> 여기서 number = 0

while문이 동작하기 이전에



변수 i 선언했음 -> j로 바꾸기


-> 2진수 한자리 : bit(byte의 기본 구성 8bit = 1byte)

★ 2진법 공부하기!(내장계산기능이 없음)

ex06. 배열에 저장된 점수의 평균, 최댓값, 최솟값 구하기


-> 합계 구할실 100이 더해진 상태로 봐서
알고리즘에서 또 100을 더하면 안됨


-> 첫번째 요소는 빠짐 : 이미 total에 들어와있어서

-> 두번째 점수가 더 크면 그 값을 최댓값으로 함






-> 다 정수값이라 소수점이 계산되지 않음 (몫을 구하는 연산자가 됨)



-> score[1] 2번째 요소, 2번째 요소가 가장 큰 값

top : 1등의 인덱스

인덱스가 1인 두번째 요소가 최댓값이라면 ) 만족함

번호를 몇번 인덱스에 기록해두도록


-> 언제 최댓값이 나올지 모르는 것


: 제일 첫번째 점수가 초깃값으로 잡혀있으니까
최댓값의 번호를 가지고 있는것


-> 언제 작은 점수가 나올지 모르니까


-> bottom이 0으로 되어있는 이유

ex01() 2~9단까지 전체 구구단 결과 저장하고 출력하기

i : 단을 만들때 사용하는 값
j : n을 만들때 사용하는 값


gugudan[0][1] -> 2단의 결과

2차원배열 행번호 -> 단의 관계
2차원배열 열번호 -> n값의 관계



-전체 필드 값 4자리로

ex02() 아파트 출력하기



: j보다 하나 큰 숫자 : 호수


-> 숫자 따지기


-> 행의 갯수 : 5개

ex03() 아파트 출력하기 - 2


-> 더하는게 없으니 0으로 시작


-> total은 7까지 상승되어있는 상태이므로 total =0;(초기화) 해줘야 함

ex04() 시간표 출력하기


-> 월요일에 4과목 있어요
weekname 인덱스, timetable 행 인덱스 값이 동일한 값을 가지도록 맞춰주기





-> 문자열 포맷 출력값 %3s

%d : 정수


-> 공백 포함해서 3글자


-> 동일과목은 ln제거

★ 2차원 배열은 웹 사이트 만들때 많이 사용 안함 -> 어려우면 과감하게 넘기기 !

ex05() 2차원 배열 90도 회전하기(배열 a의 90도 회전된 모습을 배열 b에 저장한 뒤, 배열 a가 배열 b를 그대로 가져가기)




(0,0) -> (0,4)

(0,1) -> (0,3)

->i + j =4

a.length -> a있는 걸 꺼내서 b로 보내야 하니까(a기준)

-> b배열이 90도 돌아가는 모습

b가 보고있는걸 a가 가져가면 됨(a는 메모리 누수됨 : 자바가 함)


-> function : 메소드(무슨일을 하는 함수)


-> 게임 프로그램 [i][j]


메소드로 값을 전달하는 방법
메소드로 부터 값을 받아오는 방법

1..jar(jar 아키이브) 파일 만드는 회사 (class를 가져가 쓸수있게끔) : 라이브러리 회사

주는것


-> ex01() 메소드에 전달하는 인수가 없다




-> 값이 전달되었을때 값을 받아서 저장하는 변수 (매개변수) = parameter


-> 인수 찾아서 전달

-> ★ 핵심 : string받을 준비가 되어있는 애한테 전달

★★★ 제일 중요한 내용 : 인수, 매개변수, 파라미터
-> 인수와 파리미터 모르면 안됨

-전달할때 "인수"를 준다
-메소드로 인수를 주면 메소드의 "파라미터"가 받음 = 메소드의 "매개변수"가 받음


-> 10,20을 받을 수 있는 애 만들기


-> 정수 2개 저장할 준비가 됨

-> 인수를 감당할 수 있는 메소드 따로 만들면 자바는 구분을 잘 해서 ex01 똑같이 만들어도 상관없음
(메소드 오버로딩 : 같은 이름을 가진 메소드를 여러개 만들어도 괜찮음, 단, 파라미터는 달라야 함)

*println




-> 아무것도 전달 x (줄바꿈)

파리미터가 다른 것


-> parameter이름이 x이다.


-> 주석 아님
-> 자바 문서(자바 doc)

인수(argument)
파라미터(parameter)

*level2


ex01(a,b) 인수로 전달해서 (int a,int b) 파라미터로 받아서 출력

main이 가지고 있는 a,b를 ex01로 줌 int가 받고 늘림

a++ , b++는 main의 a,b일까 ? ex의 a,b일까?

-> a++ b++ 다음에 돌아오는 값


여기먼저 호출되었으니 먼저 찍힘

돌아와서 찍고 찍음

인수를 파라미터로 옮길때 "복사"가 이루어짐

메모리에 변수가 잡힘
-> main의 ab가메모리에 있고 ex01() ab가 메모리에 있다
-> 같은 이름의 변수가 2개있는 상황
-> 값을 복사받아서 있는 상황
-> 값을 복사받아 자기것을 늘린 것

*level3 : 참조타입


-> 배열타입으로 받기


-> 파라미터가 boolean 등등 종류별로 받을 수있게 해놓음


-> main 의 int[] a ex01 int[]a 배열은 서로 다른 배열이다.


-> main의 배열 ab도 바뀌어있음
-> 왜 바뀌어있을까?


a에는 참조값이 들어가있음

a전달한것은 10,20,30의 주소를 주었다



-> 메모리 상으로는 같음

★★메모리에는 사실은 하나만 만들어져 있으나 주소값, 위치값을 두변수가 가지고 있음
-> 웹개발의 대부분은 참조타입이다.
A -> B 값을 줘서 B가 수정함 A가 확인해 봤을때도 수정이 되었나?
수정이 되었음

Class는 전부다 100% 참조타입이다.

저기서 넘긴걸 여기서 수정해도 수정이 되는 이유ㅜ임

1.기본타입(8개) : 그냥 복사 -> 주면 끝남
2. 참조타입(배열) : 참조값을 줌, 집주소를 줌 -> 한군데 있는 데이터를 둘 이상의 메소드가 참조할 수 있음 : 데어터가 같이 처리됨

받는것 : 반환 : RETURN



-> 메소드 호출해도 메소드가 나에게 주는 건 없다


-> 값을 반환하는 방식
(void 대신 적기)

compiler 컴파일러 : 실행 후 결과

-> 둘다 파라미터(전달)이 없음 : 구분이 안됨(같은 이름 주는건 불가능함)


return이 없으니까 코드 적어라는 것


-> 2번째 메소드 호출하면 메소드가 나에게 100을 준다는 것



ex02는 실행 끝나고 없어지고 결과가 100임

ex02 실행하면 int 타입의 100을 줌

그 100을 n에다가 저장

int n = 값을 받을 준비하는 것


-> ex02부르면 항상 100이 옴


-> ex02가 100으로 바뀌니까

☆ 호출구 만드는 것이 어려움(여러가지 형태로 만들수 있음)
ex01 반환이 없는 애는호출 형태가 하나밖에 없음 - ex01()


-> 함께 나오는 코드가 없음, 실행해도 주는 것이 없음

호출하는데 다른것이 섞여있는 것 : 전부 반환이 있는것

★ 클래스에 있는 메소드를 부르기
(우리가 만드는 클래스를 부르기)

  • void가 method임(70%) -> 받아오는 것 고려 x, 주는것만 함


-> 매개변수 : 파라미터
-> main에게 전달할 수 있는 것 : Stirng[] 여러개
(아직 main을 호출해본적 없음)

수정가능한 소스코드 : src 파일
실행가능 실행파일 : bin파일
확장자가 class인 파일 : 자동생성(자바 virtual machine은 bin폴더에) -> 실제 실행은 class가지고 함


java.exe 파일 실행


-> 자바 실행하는 path이미 잡아놓았기 때문에 문제 없음
(패키지 때문에 실행 x)

추가메시지 전달 가능 : 메인에 파라미터 string배열로 전달 가능함


-> main한테 전달하는 인수(argument) 있으면 적을 수 있음

-> main method에 parameter로 넘어감

argument = args
-> argument 로 주는것 parameter로 받는것 (같이 혼용되어 쓰는 경우도 많음)
-> main method의 parameter는 궁금하지 않아도 괜찮음


**7/24/월 시험

  • 연습문제 수준
  • ~ 1차원 배열 **
    (x) 2차원 배열
profile
개발자 velog

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기