1) 배열 과제
1. 한 학생의 이름, 번호, 국-영-수 데이터를 입력받아 배열에 저장 -> 총점 & 평균 계산해서 출력
나
>> 안돌아감 ㅠㅠ ㅋㅋ ㅠㅠ큐ㅠ큐ㅠㅋㅋㅋㅋㅋㅋ
변수 선언하고 그거를 배열에 넣으려고 했는데 실패함
System.out.println("이름을 입력하시오");
String name = sc.next();
System.out.println("번호를 입력하시오");
int num = sc.nextInt();
int kor;
int eng;
int meth;
int[] data = { kor, eng, meth }; //>>작동 안됨
for (int i=0; i > data.length; i++) {
System.out.println("점수를 입력하시오");
data [i] = sc.nextInt();
}
int sum = kor + eng + meth; //>>작동 안됨
float avg = (float) sum / data.length;
System.out.println("이름: " + name + "\n점수: " + num + "\\총합: " + sum + "\\n평균: " + avg );
강사님
- 입력값 유형별로 타입 지정. --- int는 여러개니까 배열로 함.
- 출력할 이름값을 String 배열로 묶음 -> 각 값을 출력할 때 title 위치 지정해서 사용
- 입출력을 각 유형별로 나눠서 받음
- int 배열에 총합까지 묶여있음 --> 입력받을 때 총합 제외하고 4개만 for 문으로 돌림
--> 같은 for문에서 각 차례마다 if문으로 번호 제외하고 총합 계산함.
Scanner sc = new Scanner(System.in);
String name; //이름 1개 저장
//번호, 국, 영, 수, 총 ---> int
int[] score = new int[5];
//평균 ---> float
float avg;
//입출력에 사용할 문자열 저장
String[] title = {"name", "num", "kor", "eng", "math", "total", "avg"};
//이름 입력부
System.out.print(title[0] + ": "); //name:
name = sc.next(); //이름 입력받아 name변수에 저장
//번호, 국, 영, 수 입력부. (+) 총점 계산
int i;
for (i = 0; i < 4; i++) {
System.out.print(title[i + 1] + ": "); //입력받을 title 출력
score[i] = sc.nextInt(); //번호, 국, 영, 수 입력받아서 score배열에 순차적으로 저장
//총점 계산부
if (i != 0) { //번호 제외
score[4] += score[i]; //total 방에 국, 영, 수 더함
//자바는 배열을 자동으로 0으로 초기화 하기 때문에 굳이 이때 0으로 초기화할 필요 없음
}
}
//평균계산부
avg = (float) score[4] / 3; //캐스팅연산자로 강제 형변환
//제목 출력
for (i = 0; i < title.length; i++) {
System.out.print(title[i] + "\t");
}
System.out.println();
//이름 출력
System.out.print(name + "\t");
//score 배열 요소 하나씩 출력
for (i = 0; i < score.length; i++) {
System.out.print(score[i] + "\t");
}
//평균 출력
System.out.println(avg);
=========================================
(print)
name: 함
num: 3
kor: 67
eng: 89
math: 96
name num kor eng math total avg
함 3 67 89 96 252 84.0
2. 세 사람의 이름, 번호, 국-영-수 데이터를 입력받아 배열에 저장 -> 총점 & 평균 계산해서 출력
장ㄹ려히 망햇쥬 그래도 얼추 잘 했다
score 입력부에서 j를 i로 적고 ..
score 에서 총합 빼고 4번만 돌아야 하는데 score[i].length로 해서 5번 돌았음.
나머지는 같았다! 이것만으로도 칭찬해!!
이름-번호-국영수--- 순으로 돌아야하는데
name
num num num num num
name
kor kor kor kor kor
... 이런 식으로 돌아갔음.
((((((나)))))
for (j = 0; j < score[i].length; j++) {
System.out.print(title[i + 1] + ": ");
score[i][j] = sc.nextInt();
if (i != 0) {
score[i][4] += score[i][j];
}
}
(((((강사님)))))
for (j = 0; j < 4; j++) { //번[0], 국[1], 영[2], 수[3] (4개의 데이터 입력)
System.out.print(title[j + 1] + ": ");
score[i][j] = sc.nextInt();
//i번째 사람의 데이터 입력받아서 번[i][0], 국[i][1], 영[i][1], 수[i][2]
if (j != 0) { //번호를 제외한 국영수만 누적
score[i][4] += score[i][j];
}
}
강사님
Scanner sc = new Scanner(System.in);
//이름 3개 저장
String[] name = new String[3];
//점수 3세트. 한 세트 5칸 (번국영수총)
int[][] score = new int[3][5];
//평균 3개 저장
float[] avg = new float[3];
//입출력에 사용할 문자열 저장
String[] title = { "name", "num", "kor", "eng", "math", "total", "avg" };
int i, j, k;
for (i = 0; i < name.length; i++) { //3명이므로 3번 반복, i는 사람의 처리 순번
//이름 입력부
System.out.print(title[0] + ": "); //name:
name[i] = sc.next(); //이름 입력받아 name 변수에 저장
for (j = 0; j < 4; j++) { //번[0], 국[1], 영[2], 수[3] (4개의 데이터 입력)
System.out.print(title[j+1] + ": ");
score[i][j] = sc.nextInt();
//i번째 사람의 데이터 입력받아서 번[i][0], 국[i][1], 영[i][1], 수[i][2]
if (j != 0) { //번호를 제외한 국영수만 누적
score[i][4] += score[i][j];
}
}
//평균
avg[i] = (float) score[i][4] / 3;
}
//제목 출력
for (i = 0; i < title.length; i++) {
System.out.print(title[i] + "\t");
}
System.out.println();
for (i = 0; i < name.length; i++) {
//이름 출력
System.out.print(name[i] + "\t");
//score 출력
for (j = 0; j < score[i].length; j++) {
System.out.print(score[i][j] + "\t");
}
//평균 출력
System.out.println(avg[i]);
}
=======================================
(print)
name num kor eng math total avg
ddd 1 23 54 67 144 48.0
eee 2 43 8 24 75 25.0
ggg 3 432 65 23 520 173.33333
3.
int[] 크기는 100.
1~100값을 요소로 저장.
배열의 값을 하나씩 꺼내서 짝수만 골라 합을 계산 --> 출력
int[] a = new int[100];
int sum = 0;
for (int i = 0; i < a.length; i++) {
a[i] = i + 1;
if (a[i] % 2 == 0) {
sum += a[i];
}
}
System.out.println("1~100 중 짝수들의 합: " + sum);
강사님
int[] a = new int[100];
int i;
for (i = 0; i < 100; i++);
a[i] = i + 1;
}
//배열 출력
for (i = 0; i < 100; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
int sum = 0; //누적할 변수
String ch = " + ";
//짝수 누적
for (i = 0; i < 100; i++) { //배열 크기만큼 반복
if (a[i] % 2 == 0) { //배열 요소를 하나씩 꺼내 짝수 판정
if (i == 99) { //마지막 값 더한 다음 + 문자열을 =으로 변경
ch = " = ";
}
sum += a[i]; //짝수가 맞으면 sum에 누적
System.out.print(a[i] + ch);
}
}
System.out.println(sum);
=================================
(print)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
2 + 4 + 6 + 8 + 10 + 12 + 14 + 16 + 18 + 20 + 22 + 24 + 26 + 28 + 30 + 32 + 34 + 36 + 38 + 40 + 42 + 44 + 46 + 48 + 50 + 52 + 54 + 56 + 58 + 60 + 62 + 64 + 66 + 68 + 70 + 72 + 74 + 76 + 78 + 80 + 82 + 84 + 86 + 88 + 90 + 92 + 94 + 96 + 98 + 100 = 2550
4. 피보나치 수열을 배열을 활용해서 만드시오. (100개)
1 1 2 3 5 8 ...
- 출력문 위치에서 좀 헤맴.
- t = f + s 를 처음부터 했더니 값이 나오지 않아서 for문으로 옮김.
- 처음부터 해버리면 안 되는 이유는, for 문에서 t값을 출력하고 그 이후에 더하는 순서가 필요하기 때문.
long[] b = new long[100];
long f = 1, s = 1, t = 0;
System.out.print(f + "\t" + s + "\t");
for (int i = 3; i < b.length; i++) {
t = f + s;
b[i] = t;
System.out.print(t + "\t");
f = s;
s = t;
}
강사님
- 배열 내에서 다 처리하심.
- 굳이 변수 선언 없이
arr[0]
arr[1]
arr[2] = arr[0] + arr[1]
>> 이런 식으로 처리함.
int[] arr = new int[100];
int i;
for (i = 0; i < arr.length; i++) {
if (i < 2) {
arr[i] = 1;
} else {
arr[i] = arr[i - 2] + arr[i - 1];
}
}
for (i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
2) 정렬 과제
1. 순서대로 정렬
나
- 정렬 안됨 ㅠ 마지막에 에러뜸 환상적^^
- 5가지 수를 2개씩 비교하면 총 4번 비교하게 됨
3 1
1 7
7 5
5 2
- 그래서 for 돌릴 때 arr.length - 1 만큼 돌려야 함.
int[] arr = { 3, 1, 7, 5, 2 };
for (int i = 0; i < arr.length; i++) {
if (arr[i] > arr[i + 1]) {
int tmp = arr[i];
arr[i] = arr[i + 1];
arr[i+1] = tmp;
}
System.out.print(arr[i] + "\t");
}
=================================
(print)
1 3 5 2 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at basic.Sort1.main(Sort1.java:11)
강사님
- 이중 for문을 이용해서
숫자 하나를 뒷 숫자와 비교하며 이동
i = arr[0] = 8
8 3 --- 3 8
8 10 --- 8 10
10 5 --- 5 10
10 9 --- 9 10
...
* bubble sort
int i, j, tmp;
int[] arr = { 8, 3, 10, 5, 9, 1, 7, 4, 6, 2 };
System.out.println("정렬 전");
for (i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
//한 줄 처리를 n-1번 반복 --- 숫자 하나 씩 뒷 숫자와 비교하며 이동
for (i = 0; i < arr.length - 1; i++) {
//2개씩 비교해서 바꿈
//마지막 값은 이미 정렬된 가장 큰 값이므로 - i 해줌
for (j = 0; j < arr.length - 1 - i;j++) {
if (arr[j] > arr[j + 1]) {
//swap
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
System.out.println("정렬 후");
for (i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
==========================================
(print)
정렬 전
8 3 10 5 9 1 7 4 6 2
정렬 후
1 2 3 4 5 6 7 8 9 10
* insert sort
int i, j, tmp;
int[] a = { 8, 3, 10, 5, 9, 1, 7, 4, 6, 2 };
System.out.println("정렬 전");
for (i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
//insert sort
//i: 자리를 찾아갈 값의 위치.
//자기보다 큰 값은 뒤로 밀고 앞으로 감.
for (i = 1; i < a.length; i++) {
//자리잡을 값 (i번째 값)보다 큰 값들을 뒤로 한 칸씩 미루기 때문에
//i 번째 값이 지워질 수 있기 때문 tmp에 옮겨놓음.
tmp = a[i];
//j: i번째 값과 비교할 대상을 가리킴
//j는 i바로 앞 칸에서부터 한 칸씩 앞으로 이동
j = i - 1;
//자리 잡을 값(tmp)보다 큰 값들을 만나면 뒤로 한칸씩 이동
while (j >= 0 && tmp < a[j]) {
a[j + 1] = a[j]; //뒤로 미루고
j--; //tmp와 비교할 값을 한 칸씩 앞으로 이동
}
j++;
a[j] = tmp; //자기 자리에 tmp값 삽입
}
System.out.println("정렬 후");
for (i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
3) 제어문 과제
1. 숫자 2개 사칙연산
//숫자 2개 입력
int[] num = new int[2];
Scanner sc = new Scanner(System.in);
System.out.println("숫자2개를 입력하시오");
num[0] = sc.nextInt();
num[1] = sc.nextInt();
//연산자 입력
String[] ch = { "+", "-", "*", "/" };
System.out.println("연산자를 입력하시오");
for (int i = 0; i < ch.length; i++) {
ch[i] = sc.next();
switch(i) {
case 0:
int result = num[0] + num[1];
System.out.println(num[0] + ch[i] + num[1] + "=" + result);
break;
case 1:
result = num[0] - num[1];
System.out.println(num[0] + ch[i] + num[1] + "=" + result);
break;
case 2:
result = num[0] * num[1];
System.out.println(num[0] + ch[i] + num[1] + "=" + result);
break;
case 3:
result = num[0] / num[1];
System.out.println(num[0] + ch[i] + num[1] + "=" + result);
break;
}
}
강사님
- 배열, for문 없이 변수로만 처리하심. ---> 더 간단해짐!!!!!!!
- 출력문을 case별로 넣지 않고 { } 마지막에 처리.
- 예외 처리 포함 -- 0값으로 나눌 수 없음, 연산자 잘못 입력함
Scanner sc = new Scanner(System.in);
int num1, num2, res; // 숫자 2개 저장할 변수
String op; // 연산자 저장할 변수
System.out.println("계산에 사용할 숫자 2개 입력");
num1 = sc.nextInt();
num2 = sc.nextInt();
System.out.println("연산자(+, -, *, /)");
op = sc.next();
switch (op) {
case "+":
res = num1 + num2;
break;
case "-":
res = num1 - num2;
break;
case "*":
res = num1 * num2;
break;
case "/":
if (num2 == 0) {
System.out.println("0으로 나눌 수 없음. 프로그램 종료");
return;
}
res = num1 / num2;
break;
default:
System.out.println("잘못된 연산자. 프로그램 종료");
return; //현재 메서드 종료
}
System.out.println(num1 + op + num2 + "=" + res);
1) 배열 과제
1. 한 학생의 이름, 번호, 국-영-수 데이터를 입력받아 배열에 저장 -> 총점 & 평균 계산해서 출력
나
>> 안돌아감 ㅠㅠ ㅋㅋ ㅠㅠ큐ㅠ큐ㅠㅋㅋㅋㅋㅋㅋ
변수 선언하고 그거를 배열에 넣으려고 했는데 실패함
System.out.println("이름을 입력하시오");
String name = sc.next();
System.out.println("번호를 입력하시오");
int num = sc.nextInt();
int kor;
int eng;
int meth;
int[] data = { kor, eng, meth }; //>>작동 안됨
for (int i=0; i > data.length; i++) {
System.out.println("점수를 입력하시오");
data [i] = sc.nextInt();
}
int sum = kor + eng + meth; //>>작동 안됨
float avg = (float) sum / data.length;
System.out.println("이름: " + name + "\n점수: " + num + "\\총합: " + sum + "\\n평균: " + avg );
강사님
- 입력값 유형별로 타입 지정. --- int는 여러개니까 배열로 함.
- 출력할 이름값을 String 배열로 묶음 -> 각 값을 출력할 때 title 위치 지정해서 사용
- 입출력을 각 유형별로 나눠서 받음
- int 배열에 총합까지 묶여있음 --> 입력받을 때 총합 제외하고 4개만 for 문으로 돌림
--> 같은 for문에서 각 차례마다 if문으로 번호 제외하고 총합 계산함.
Scanner sc = new Scanner(System.in);
String name; //이름 1개 저장
//번호, 국, 영, 수, 총 ---> int
int[] score = new int[5];
//평균 ---> float
float avg;
//입출력에 사용할 문자열 저장
String[] title = {"name", "num", "kor", "eng", "math", "total", "avg"};
//이름 입력부
System.out.print(title[0] + ": "); //name:
name = sc.next(); //이름 입력받아 name변수에 저장
//번호, 국, 영, 수 입력부. (+) 총점 계산
int i;
for (i = 0; i < 4; i++) {
System.out.print(title[i + 1] + ": "); //입력받을 title 출력
score[i] = sc.nextInt(); //번호, 국, 영, 수 입력받아서 score배열에 순차적으로 저장
//총점 계산부
if (i != 0) { //번호 제외
score[4] += score[i]; //total 방에 국, 영, 수 더함
//자바는 배열을 자동으로 0으로 초기화 하기 때문에 굳이 이때 0으로 초기화할 필요 없음
}
}
//평균계산부
avg = (float) score[4] / 3; //캐스팅연산자로 강제 형변환
//제목 출력
for (i = 0; i < title.length; i++) {
System.out.print(title[i] + "\t");
}
System.out.println();
//이름 출력
System.out.print(name + "\t");
//score 배열 요소 하나씩 출력
for (i = 0; i < score.length; i++) {
System.out.print(score[i] + "\t");
}
//평균 출력
System.out.println(avg);
=========================================
(print)
name: 함
num: 3
kor: 67
eng: 89
math: 96
name num kor eng math total avg
함 3 67 89 96 252 84.0
2. 세 사람의 이름, 번호, 국-영-수 데이터를 입력받아 배열에 저장 -> 총점 & 평균 계산해서 출력
장ㄹ려히 망햇쥬 그래도 얼추 잘 했다
score 입력부에서 j를 i로 적고 ..
score 에서 총합 빼고 4번만 돌아야 하는데 score[i].length로 해서 5번 돌았음.
나머지는 같았다! 이것만으로도 칭찬해!!
이름-번호-국영수--- 순으로 돌아야하는데
name
num num num num num
name
kor kor kor kor kor
... 이런 식으로 돌아갔음.
((((((나)))))
for (j = 0; j < score[i].length; j++) {
System.out.print(title[i + 1] + ": ");
score[i][j] = sc.nextInt();
if (i != 0) {
score[i][4] += score[i][j];
}
}
(((((강사님)))))
for (j = 0; j < 4; j++) { //번[0], 국[1], 영[2], 수[3] (4개의 데이터 입력)
System.out.print(title[j + 1] + ": ");
score[i][j] = sc.nextInt();
//i번째 사람의 데이터 입력받아서 번[i][0], 국[i][1], 영[i][1], 수[i][2]
if (j != 0) { //번호를 제외한 국영수만 누적
score[i][4] += score[i][j];
}
}
강사님
Scanner sc = new Scanner(System.in);
//이름 3개 저장
String[] name = new String[3];
//점수 3세트. 한 세트 5칸 (번국영수총)
int[][] score = new int[3][5];
//평균 3개 저장
float[] avg = new float[3];
//입출력에 사용할 문자열 저장
String[] title = { "name", "num", "kor", "eng", "math", "total", "avg" };
int i, j, k;
for (i = 0; i < name.length; i++) { //3명이므로 3번 반복, i는 사람의 처리 순번
//이름 입력부
System.out.print(title[0] + ": "); //name:
name[i] = sc.next(); //이름 입력받아 name 변수에 저장
for (j = 0; j < 4; j++) { //번[0], 국[1], 영[2], 수[3] (4개의 데이터 입력)
System.out.print(title[j+1] + ": ");
score[i][j] = sc.nextInt();
//i번째 사람의 데이터 입력받아서 번[i][0], 국[i][1], 영[i][1], 수[i][2]
if (j != 0) { //번호를 제외한 국영수만 누적
score[i][4] += score[i][j];
}
}
//평균
avg[i] = (float) score[i][4] / 3;
}
//제목 출력
for (i = 0; i < title.length; i++) {
System.out.print(title[i] + "\t");
}
System.out.println();
for (i = 0; i < name.length; i++) {
//이름 출력
System.out.print(name[i] + "\t");
//score 출력
for (j = 0; j < score[i].length; j++) {
System.out.print(score[i][j] + "\t");
}
//평균 출력
System.out.println(avg[i]);
}
=======================================
(print)
name num kor eng math total avg
ddd 1 23 54 67 144 48.0
eee 2 43 8 24 75 25.0
ggg 3 432 65 23 520 173.33333
3.
int[] 크기는 100.
1~100값을 요소로 저장.
배열의 값을 하나씩 꺼내서 짝수만 골라 합을 계산 --> 출력
int[] a = new int[100];
int sum = 0;
for (int i = 0; i < a.length; i++) {
a[i] = i + 1;
if (a[i] % 2 == 0) {
sum += a[i];
}
}
System.out.println("1~100 중 짝수들의 합: " + sum);
강사님
int[] a = new int[100];
int i;
for (i = 0; i < 100; i++);
a[i] = i + 1;
}
//배열 출력
for (i = 0; i < 100; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
int sum = 0; //누적할 변수
String ch = " + ";
//짝수 누적
for (i = 0; i < 100; i++) { //배열 크기만큼 반복
if (a[i] % 2 == 0) { //배열 요소를 하나씩 꺼내 짝수 판정
if (i == 99) { //마지막 값 더한 다음 + 문자열을 =으로 변경
ch = " = ";
}
sum += a[i]; //짝수가 맞으면 sum에 누적
System.out.print(a[i] + ch);
}
}
System.out.println(sum);
=================================
(print)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
2 + 4 + 6 + 8 + 10 + 12 + 14 + 16 + 18 + 20 + 22 + 24 + 26 + 28 + 30 + 32 + 34 + 36 + 38 + 40 + 42 + 44 + 46 + 48 + 50 + 52 + 54 + 56 + 58 + 60 + 62 + 64 + 66 + 68 + 70 + 72 + 74 + 76 + 78 + 80 + 82 + 84 + 86 + 88 + 90 + 92 + 94 + 96 + 98 + 100 = 2550
4. 피보나치 수열을 배열을 활용해서 만드시오. (100개)
1 1 2 3 5 8 ...
- 출력문 위치에서 좀 헤맴.
- t = f + s 를 처음부터 했더니 값이 나오지 않아서 for문으로 옮김.
- 처음부터 해버리면 안 되는 이유는, for 문에서 t값을 출력하고 그 이후에 더하는 순서가 필요하기 때문.
long[] b = new long[100];
long f = 1, s = 1, t = 0;
System.out.print(f + "\t" + s + "\t");
for (int i = 3; i < b.length; i++) {
t = f + s;
b[i] = t;
System.out.print(t + "\t");
f = s;
s = t;
}
강사님
- 배열 내에서 다 처리하심.
- 굳이 변수 선언 없이
arr[0]
arr[1]
arr[2] = arr[0] + arr[1]
>> 이런 식으로 처리함.
int[] arr = new int[100];
int i;
for (i = 0; i < arr.length; i++) {
if (i < 2) {
arr[i] = 1;
} else {
arr[i] = arr[i - 2] + arr[i - 1];
}
}
for (i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
2) 정렬 과제
1. 순서대로 정렬
나
- 정렬 안됨 ㅠ 마지막에 에러뜸 환상적^^
- 5가지 수를 2개씩 비교하면 총 4번 비교하게 됨
3 1
1 7
7 5
5 2
- 그래서 for 돌릴 때 arr.length - 1 만큼 돌려야 함.
int[] arr = { 3, 1, 7, 5, 2 };
for (int i = 0; i < arr.length; i++) {
if (arr[i] > arr[i + 1]) {
int tmp = arr[i];
arr[i] = arr[i + 1];
arr[i+1] = tmp;
}
System.out.print(arr[i] + "\t");
}
=================================
(print)
1 3 5 2 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at basic.Sort1.main(Sort1.java:11)
강사님
- 이중 for문을 이용해서
숫자 하나를 뒷 숫자와 비교하며 이동
i = arr[0] = 8
8 3 --- 3 8
8 10 --- 8 10
10 5 --- 5 10
10 9 --- 9 10
...
* bubble sort
int i, j, tmp;
int[] arr = { 8, 3, 10, 5, 9, 1, 7, 4, 6, 2 };
System.out.println("정렬 전");
for (i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
//한 줄 처리를 n-1번 반복 --- 숫자 하나 씩 뒷 숫자와 비교하며 이동
for (i = 0; i < arr.length - 1; i++) {
//2개씩 비교해서 바꿈
//마지막 값은 이미 정렬된 가장 큰 값이므로 - i 해줌
for (j = 0; j < arr.length - 1 - i;j++) {
if (arr[j] > arr[j + 1]) {
//swap
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
System.out.println("정렬 후");
for (i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
==========================================
(print)
정렬 전
8 3 10 5 9 1 7 4 6 2
정렬 후
1 2 3 4 5 6 7 8 9 10
* insert sort
int i, j, tmp;
int[] a = { 8, 3, 10, 5, 9, 1, 7, 4, 6, 2 };
System.out.println("정렬 전");
for (i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
//insert sort
//i: 자리를 찾아갈 값의 위치.
//자기보다 큰 값은 뒤로 밀고 앞으로 감.
for (i = 1; i < a.length; i++) {
//자리잡을 값 (i번째 값)보다 큰 값들을 뒤로 한 칸씩 미루기 때문에
//i 번째 값이 지워질 수 있기 때문 tmp에 옮겨놓음.
tmp = a[i];
//j: i번째 값과 비교할 대상을 가리킴
//j는 i바로 앞 칸에서부터 한 칸씩 앞으로 이동
j = i - 1;
//자리 잡을 값(tmp)보다 큰 값들을 만나면 뒤로 한칸씩 이동
while (j >= 0 && tmp < a[j]) {
a[j + 1] = a[j]; //뒤로 미루고
j--; //tmp와 비교할 값을 한 칸씩 앞으로 이동
}
j++;
a[j] = tmp; //자기 자리에 tmp값 삽입
}
System.out.println("정렬 후");
for (i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
3) 제어문 과제
1. 숫자 2개 사칙연산
//숫자 2개 입력
int[] num = new int[2];
Scanner sc = new Scanner(System.in);
System.out.println("숫자2개를 입력하시오");
num[0] = sc.nextInt();
num[1] = sc.nextInt();
//연산자 입력
String[] ch = { "+", "-", "*", "/" };
System.out.println("연산자를 입력하시오");
for (int i = 0; i < ch.length; i++) {
ch[i] = sc.next();
switch(i) {
case 0:
int result = num[0] + num[1];
System.out.println(num[0] + ch[i] + num[1] + "=" + result);
break;
case 1:
result = num[0] - num[1];
System.out.println(num[0] + ch[i] + num[1] + "=" + result);
break;
case 2:
result = num[0] * num[1];
System.out.println(num[0] + ch[i] + num[1] + "=" + result);
break;
case 3:
result = num[0] / num[1];
System.out.println(num[0] + ch[i] + num[1] + "=" + result);
break;
}
}
강사님
- 배열, for문 없이 변수로만 처리하심. ---> 더 간단해짐!!!!!!!
- 출력문을 case별로 넣지 않고 { } 마지막에 처리.
- 예외 처리 포함 -- 0값으로 나눌 수 없음, 연산자 잘못 입력함
Scanner sc = new Scanner(System.in);
int num1, num2, res; // 숫자 2개 저장할 변수
String op; // 연산자 저장할 변수
System.out.println("계산에 사용할 숫자 2개 입력");
num1 = sc.nextInt();
num2 = sc.nextInt();
System.out.println("연산자(+, -, *, /)");
op = sc.next();
switch (op) {
case "+":
res = num1 + num2;
break;
case "-":
res = num1 - num2;
break;
case "*":
res = num1 * num2;
break;
case "/":
if (num2 == 0) {
System.out.println("0으로 나눌 수 없음. 프로그램 종료");
return;
}
res = num1 / num2;
break;
default:
System.out.println("잘못된 연산자. 프로그램 종료");
return; //현재 메서드 종료
}
System.out.println(num1 + op + num2 + "=" + res);