1 foreach
자바에서는 배열을 순환할 때 기존의 반복문보다 편리한 작업을 할 수 있도록 foreach문을 제공한다.
for(배열의 타입 변수이름 : 배열이름){
// 실행 부분
}
기존의 for문에서는 인덱스 번호를 통해서 배열에 대한 작업을 처리했다. foreach문은 배열의 이름과 새로운 변수만 하나 지정하면 루프를 돌 때마다 자동으로 배열의 요소를 하나씩 처리한다.
Ex. 다음은 foreach문을 이용하여 문장을 출력하는 프로그램이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package java_practice;
public class Array_Foreach {
public static void main(String[] args) {
String[] name = {"java", "Hello", "Hi"};
int[] num = { 1,2,3,4};
for (String i : name) {
System.out.print(i+" ");
}
for (int i : num) {
System.out.print(i+" ");
}
}
}
|
cs |
1. 3개의 과목의 점수를 입력받고, 총점과 평균을 출력.
출력결과
점수를 입력해주세요.
과목1 : 98
과목2 : 97
과목3 : 95
총점 : 290점
평균 : 96.67점
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
|
package java_practice;
import java.util.Scanner;
public class Array_Sum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new int[3];
int sum = 0;
System.out.println("점수를 입력해주세요.");
for(int i=0; i<arr.length; i++) {
System.out.printf("과목%d : ",i+1);
arr[i] = sc.nextInt();
sum += arr[i];
}
float avg = (float)sum/arr.length; // 평균을 소수점자리까지 구해주기 위해 형변환
System.out.printf("총점 : %d점\n평균 : %.2f점", sum, avg); // 소수점 둘째자리에서 반올림
sc.close();
}
}
|
cs |
평균의 정확도 향상을 위해 int와 데이터 크기가 같은 float로 형변환 시켜준다.
평균값을 소수점 둘째자리까지만 나타내기위해 fomat형식으로 출력해준 후 서식문자를 사용하여 %.2f로 소수점 제한해준다.
해당 내용은 이전 포스팅에서 자세히 확인가능하다.
https://soonipy.tistory.com/18?category=1005894
2. 과목수를 입력받고 모든 과목의 총점과 평균을 출력.
과목 수 : 6
과목 1 : 79
과목 2 : 84
과목 3 : 86
과목 4 : 73
과목 5 : 98
과목 6 : 85
총점 : 505점
평균 : 84.17점
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
|
package java_practice;
import java.util.Scanner;
public class Array_Avg {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("과목 수 : ");
int num = sc.nextInt(); // 과목수 입력받음
int[] score = new int[num]; // 입력받은 과목 수를 배열의 길이로 설정
int sum = 0;
for(int i=0; i<score.length; i++) {
System.out.printf("과목 %d : ", i+1);
score[i] = sc.nextInt();
sum += score[i];
}
float avg = (float)sum/score.length; // 평균을 소수점자리까지 구해주기 위해 형변환
System.out.printf("총점 : %d점\n평균 : %.2f점", sum, avg); // 소수점 둘째자리에서 반올림
sc.close();
}
}
|
cs |
위의 예제와 똑같지만 배열을 길이를 입력받는 부분이 추가된 형태이다. 과목의 수가 곧 배열의 길이이므로 과목의 수로 입력받을 변수를 num으로 정해놓고 입력버퍼(sc.nextInt();)로 입력받는다.
그 후 입력받은 변수 num을 배열의 길이로 지정해준다.
3. 배열의 최대값과 최소값.
int[] arr = { 1, 5, 3, 2, 7 };
최대값 : 7
최소값 : 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package java_practice;
public class Arr_Min_Max {
public static void main(String[] args) {
int[] arr = { 1, 5, 3, 2, 7 };
int max = arr[0], min = arr[0]; // 최대값과 최소값을 임의로 1로 지정해줌.
for(int i=0; i<arr.length; i++) {
if(max >= arr[i]) {
max = arr[i]; // arr의 값이 max와 보다 크거나 같을 경우 max에 저장
}if(min <= arr[i]) {
max = arr[i]; // arr의 값이 min와 보다 작거나 같을 경우 max에 저장
}
}
System.out.printf("최대값 : %d\n최소값 : %d", max, min);
}
}
|
cs |
4. 배열의 복제와 Arrays.equals()메서드
int[] arr = { 1, 5, 3, 2, 7 };
int[] arr2;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package java_practice;
import java.util.Arrays;
public class Array_Copy {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = { 1, 5, 3, 2, 7 };
int[] arr2;
arr2 = new int[arr.length]; // arr2를 새로 선언
for(int i=0; i<arr2.length; i++) {
arr2[i] = arr[i]; // arr의 요소를 복제
}
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(arr2));
System.out.println(arr == arr2); // 둘의 주소값이 다르기 때문에 false
System.out.println(Arrays.equals(arr,arr2)); // 둘의 요소의 값을 비교하는 메서드 true
}
}
|
cs |
출력결과
[1, 5, 3, 2, 7]
[1, 5, 3, 2, 7]
false
true
arr[] = arr2; // 배열의 복제가 아니다.
배열을 복제하려면 arr2의 배열을 새로 선언해주고 모든 요소를 복사해주어야 한다.
따라서 arr2를 새로 선언해 주고 arr2의 요소를 arr과 똑같이 복제해주었다.
Array.toSring()으로 arr와 arr2를 출력해보면 [1, 5, 4, 2, 7]로 나온다.
하지만 이 둘은 주소값이 서로 다르다. 따라서 arr == arr2 는 false이다.
두 배열의 요소를 비교하는 메서드로는 Arrays.equals(arr, arr2)로 이는 배열이 같는 요소만을 비교하기 때문에 출력결과가 true인 것을 확인할 수 있다.
또한 이 메서드는 java.util 이라는 외부 패키지에 있으므로 Arrays를 import 시켜준 후 사용해야 한다.
5. 배열의 복제와 System.arraycopy() 메서드
System.arraycopy( src, srcPos, dest, destPos, length );
1.src 는 복사할 배열 srcPos 는 복사하기 시작할 인덱스
2.dest 는 덮어쓸 배열 destPos 는 덮어쓰기 시작할 인덱스
3.legth 는 복사할 길이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package java_practice;
import java.util.Arrays;
public class Array_SysArraycopy {
public static void main(String[] args) {
int[] arr1 = {1,2,3,4,5,6};
int[] arr2 = {0,0,0,0,0,0};
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
System.out.println();
System.arraycopy(arr1, 2, arr2, 2, 3); // {0,0,3,4,5,0} 으로 복제
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
}
}
|
cs |
[0, 0, 0, 0, 0, 0]
[1, 2, 3, 4, 5, 6]
[0, 0, 3, 4, 5, 0]
6. 로또번호생성
1~45까지의 정수 중 6개를 임의로 골라서, 오름차순으로 출력. (단, 중복X)
tip Math.random() : 0.0 이상 1.0 미만의 수를 출력한다.
random함수는 Math라는 클래스 안에 존재한다. 이 Math클래스는 최상위 클래스인 Object안에 들어있으므로
import 시켜주지 않아도 된다.
다만 소수점 아래로는 무한소수를 찍어내기 때문에 원하는 정수n을 곱해주고 (int)로 형변환시켜준다. 그러면 0부터 원하는 정수n-1까지 얻을수 있다. 1부터 원하는 정수n까지 구하려면 +1만 해주면 된다.
따라서 1부터 원하는 정수n을 구하는 식은 (int)(Math.random()*n) + 1 이다.
'Java > Java 기초문법' 카테고리의 다른 글
[JAVA 기초] 자바 Swing 클래스와 JOptionPane (0) | 2021.03.07 |
---|---|
[JAVA 기초] 자바 배열(Array) - 다차원 배열, deepToString, arraycopy 메서드 (0) | 2021.03.06 |
[JAVA 기초] 자바 배열(Array) - 2 초기화와 출력 (0) | 2021.03.04 |
[JAVA 기초] 자바 배열(Array) - 1 선언과 생성 (0) | 2021.03.04 |
[JAVA 기초] 제어문 - 반복문 (break, continue) (0) | 2021.03.03 |
댓글