728x90
수업내용 정리 (Java)
1. 복습
// 문제3) while문을 통해 반복적으로 숫자를 입력받다가 0이 입력되면 반복문 종료
int a = 1;
while(a != 0) {
System.out.print("숫자입력> ");
a = sc.nextInt();
}
System.out.println("종료");
- int에 의미없는 값을 넣을 때는 보통 0 또는 -1을 넣는다.
2. 배열_예제
2-1)
int[] a = {4,6,23,43,65}
// 문제2) a 배열의 짝수의 합 출력
int sum = 0;
for(int i=0; i<a.length; i++){
if(a[i]%2 == 0){
sum += a[i];
}
}
System.out.println("짝수의 합: "+sum)
- for문 조건: i가 a의 크기보다 작은 동안 i가 1씩 더해지면서 반복한다.
- 만약 a의 i번째 인덱스 값을 2로 나눴을 때, 나머지가 0이면 sum에 a의 i번 인덱스 값을 더한다.
// 문제3) a배열의 홀수의 개수 출력
int sum = 0;
for(int i=0; i<a.length; i++) {
if(a[i]%2 != 0) {
sum++;
}
}
- for문 조건: i가 a의 크기보다 작은 동안 i가 1씩 더해지면서 반복한다.
- 만약 a의 i번째 인덱스 값을 2로 나눴을 때, 나머지가 0이 아니면 sum에 1씩 더한다.
// 문제4) a 배열의 인덱스가 짝수인 값의 합 출력
int sum = 0;
for(int i=0; i<a.length; i++) {
if(i%2 == 0) {
sum += a[i];
}
}
- for문 조건: i가 a의 크기보다 작은 동안 i가 1씩 더해지면서 반복한다.
- 만약 i가 2로 나눴을 때, 나머지가 0이라면 a 배열의 i번 인덱스 값을 sum에 더한다.
2-2) 반복하면서 a 배열에 값을 입력하는데, 입력한 값이 인덱스가 한 칸씩 밀려서 들어가고 마지막으로 입력한 값은 0번째 인덱스에 넣기
int[] a = new int[10];
for(int i=0; i<a.length; i++) {
System.out.print("숫자입력> ");
if(i == a.length-1) {
a[0] = sc. nextInt();
}else {
a[i+1] = sc.nextInt();
}
}
- for문 조건: i가 a의 크기보다 작은 동안 i가 1씩 더해지면서 반복한다.
- 만약 i가 a.length보다 1 작을 때라면, a 배열의 0번 인덱스에 입력받은 값을 넣는다.
- 그렇지 않다면, i+1번 인덱스에 입력받은 값을 넣는다.
// 다른 분이 짠 코드
for(int i=1; i<=a.length; i++) {
if(i==a.length) {
i=0;
System.out.print("숫자입력> ");
a[i] = sc.nextInt();
break;
}
System.out.print("숫자입력> ");
a[i] = sc.nextInt();
}
- for문 조건: i가 1부터 시작하고, i가 a의 크기보다 작거나 같은 동안 i가 1씩 더해지면서 반복한다.
- 만약 i가 a의 크기와 같다면, i에 0을 대입하고, 입력받아온 값을 a[i]에 넣고, for문을 나간다.
- 입력받아온 값을 a의 i번 인덱스에 넣는다.
- for문으로 계속 반복하다가 if문에 걸릴 때, if문을 실행하고 break로 for문을 나가므로 0번 인덱스의 값이 변경된다.
2-3) 입력을 반복해서 받는데, 짝수만 a 배열에 저장
int[] a = new int[10];
for(int i=0; i<a.length; i++) {
while(true) {
System.out.print("숫자입력> ");
int answer = sc.nextInt();
if(answer%2 == 0) {
a[i] = answer;
break;
}
}
}
- while문을 통해 answer라는 변수를 만들어 숫자를 입력받고, 그 값이 2로 나눴을 때 나머지가 0인 경우에만 a 배열에 차례대로 저장하고 while문을 나간다.
// 다른 분이 짠 코드 1
for(int i=0; i<a.length; i++) {
System.out.print("숫자입력> ");
a[i] = sc.nextInt();
if (a[i]%2 != 0) {
i--;
}
}
- 입력받은 값을 a 배열에 바로 저장하지만, i번 인덱스의 값이 2로 나눴을 경우 나머지가 0이 아닌 경우에 i를 1 빼고 다시 for문으로 돌아가 동일한 i번 인덱스에 값을 재설정하게 된다.
// 다른 분이 짠 코드 2
for(int i=0; i<a.length; i++) {
System.out.print("숫자입력> ");
int num = sc.nextInt();
if(num%2 == 0) {
a[i] = num;
}else {
i--;
}
}
- num이라는 새로운 변수를 지정해서 입력받아올 값을 여기에 저장한다.
- 이때 만약 num을 2로 나눴을 때 나머지가 0이라면, i번 인덱스에 num 값을 저장한다.
- 그렇지 않다면, i를 1 뺀다.
- else에서 i를 빼면서 다시 num에 값을 저장하고 그 값이 2로 나눴을 때 나머지가 0일 때까지 반복한다.
2-4) a 배열의 0번째 인덱스에 모든 값 누적
int[] a = {4,6,23,43,6};
for(int i=1; i<a.length; i++) {
a[0] += a[i];
}
- 0번 인덱스는 이미 담겨있으므로, i를 1부터 시작하게 해서 1번 인덱스부터 마지막 인덱스까지 누적해서 합한다.
질문한 내용이나 어려웠던 점 메모
1. a.length: 두 for문이 동일하게 10번 돌아가는 이유
// 1)
int[] a = new int[10];
for(int i=0; i<a.length; i++) {
System.out.println(i);
}
// 2)
for(int i=0; i<=9; i++) {
System.out.println(i);
}
- - 1) 인덱스 번호는 0부터 9까지지만 크기가 10이기 때문에 10번 돌아간다.
- 2) i가 0부터 9가 될 때까지 10번 돌아간다. - 질문한 이유: 인덱스는 9까지인데 왜 a.length를 사용할 때 작거나 같을때(<=)가 아닌 작을 때(<) 동안 반복한다고 해야 10번이 돌아가는지 이해가 안 갔다.
전체 피드백
- 사실 1.복습에서 이전에 배웠던 코드로 쓰려고 했는데 적어둔 코드를 안 보고 하려다보니 boolean이 기억이 안 나서 꼼수를 부리다가 나온건데 칭찬을 받아서 얼떨떨했다..
- 이게 될 리가 있나? 하는 코드를 써봤는데 제대로 굴러가서 원하는 대로 출력이 됐다. 처음부터 안 된다고 단정짓지 말고 안 된다고 생각이 되어도, 꼼수라고 생각되더라도 해보는 것이 좋을 것 같다!
- 그냥 코드로 이걸 만들어보세요 하면 고민하면서 조금 만들어보겠는데 쉬는 겸 선생님이 코드를 보여주시면 구조를 생각해서 답을 생각해내는 퀴즈에선 답을 잘 못맞추겠다..계속 틀려서 답을 안 내면 그게 정답이어서 너무 슬펐다.
답을 못맞추는 데에는 코드에 대한 이해도도 있지만, 코드를 잘못 보는 것도 있어서 코드를 제대로 보도록 노력해야겠다.
안 될 것 같아도 일단 해보기!
코드 제대로 보기!
728x90
'프로그래밍 > 수업일지' 카테고리의 다른 글
수업일지 7일차 (23/09/22) - Java (1) | 2023.09.22 |
---|---|
수업일지 6일차 (23/09/21) - Java (0) | 2023.09.21 |
수업일지 4일차 (23/09/19) - Java (0) | 2023.09.19 |
수업일지 3일차 (23/09/18) - Java (1) | 2023.09.18 |
수업일지 2일차 (23/09/15) - Java (1) | 2023.09.15 |