반응형
sum += score의 원리
- 엑셀의 SUM(B1:B5)과 같은 의미
배열이 필요한 이유
int score1 = 83;
int score2 = 90;
int score3 = 87;
// .
// .
// .
int score4 = 75; // 학생 수가 많아질수록 코드가 길어짐
배열 특징
- 배열은 같은 타입의 데이터만 저장 가능
- 이유 : 4byte 짜리 int형 배열에 8byte 짜리 double형 변수를 담으면 규칙에 틀어져서 주소를 못찾아감
- 이미 4byte 가 들어올 수 있는 공간만 제공이 된거라 8byte 변수를 넣을 수 없는것임
- 인덱스가 0부터 시작한다.
- for문 사용할때 편리함
for(int i=0; i<3; i++) {
sum += scores[i];
}
배열 생성
- 배열을 만드는 방법에는 값 목록으로 배열을 생성하는 방법과 new 연산자로 생성하는 방법, 2가지가 있다.
- 값 목록 vs new 연산자 배열 생성 방법 비교
// 값 목록을 통해 생성
int[] scores = {83, 90, 87};
// new를 사용한 배열 생성
int[] scores;
scores = new int[3];
//틀린 배열 선언
int[] scores;
scores = {83, 90, 87}; // 한 줄에 값 목록을 선언해주는게 아니라면 무조건 new 연산자로 두 줄로 생성해야함
System.out.println("score[0] : " + scores[0]);
System.out.println("score[1] : " + scores[1]);
System.out.println("score[2] : " + scores[2]);
int sum = 0;
for(int i=0; i<3; i++) {
sum += scores[i];
}
double avg = (double)sum / 3;
System.out.println("총합 : " + sum);
System.out.println("평균 : " + avg);
코드 중복 줄이고 재사용성 높이는법
- scores 같은 배열을 여러 개 선언해야할 경우에는 이렇게 메소드를 따로 만들어주는게 좋다
public static void main(String[] args) {
int[] scores;
scores = new int[] {83, 90, 87};
int sum1 = 0;
for(int i=0; i<3; i++) {
sum1 += scores[i];
}
System.out.println("총합 : " + sum1);
int sum2 = add( new int[] {83,90,87});
System.out.println("총합 : " + sum2);
int[] arr = new int[] {75,70,65} ;
int sum3 = add(arr);
System.out.println("총합 : " + sum3);
System.out.println();
}
private static int add(int[]/*타입*/ scores /*배열의 참조변수임 주소를 받음*/) {
int sum = 0;
for(int i=0; i<3; i++) {
sum += scores[i];
}
return sum;
}
** 아래 코드 분석하기
int sum2 = add( new int[] {83,90,87});
- new int[] {83, 90, 87} 이 부분은 힙 메모리에 생성된다.
- 주소 값을 리턴해준다.
- 주소 값을 add 메소드로 보내주는 것이다.
** new 연산자로 배열 생성하는 예제
public class ArrayCreateByNewExample {
public static void main(String[] args) {
int [] arr1 = new int[3];
for (int i=0; i<3; i++) {
System.out.println("arr1[" + i + "] : " + arr1[i]);
}
System.out.println();
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;
for(int i=0; i<3; i++) {
System.out.printf("arr1[%d] : %d\n",i,arr1[i]);
}
System.out.println();
double[] arr2 = new double[3];
for(int i=0; i<3; i++) {
System.out.printf("arr2[%d] : %s\n",i,arr2[i]);
}
System.out.println();
arr2[0] = 0.1;
arr2[1] = 0.2;
arr2[2] = 0.3;
for(int i=0; i<3; i++) {
System.out.printf("arr2[%d] : %s\n",i,arr2[i]);
}
System.out.println();
String[] arr3 = new String[3];
for(int i=0; i<3; i++) {
System.out.printf("arr3[%d] : %s\n", i, arr3[i]);
}
System.out.println();
arr3[0] = "1월";
arr3[1] = "2월";
arr3[2] = "3월";
for(int i=0; i<3; i++) {
System.out.printf("arr3[%d] : %s\n", i, arr3[i]);
}
}
}
배열의 길이
int[] scores = {83, 90, 87};
int sum = 0;
for(int i=0; i<scores.length; i++) {
sum += scores[i];
} System.out.println("총합 : " + sum);
double avg = (double) sum / scores.length;
System.out.println("평균 : " + avg);
ArrayIndexOutOfBoundsException 예외
- 배열의 인덱스를 초과해서 사용하면 발생하는 에러
public static void main(String[] args) 의미
- String[] args : 배열 선언이다. 이 부분을 제일 먼저 만든다
- args 에 주소 값이 담긴다
- main 메소드를 실행할 때 전달해준다
main 메소드의 매개변수
- 실행 시 특정 조건에 따른 실행을 명령하고 싶을 때 좋다.
- main문은 이미 실행이 시작될 때부터 다 잘 짜여져있다
public static void main(String[] args) {
System.out.println(args[0]);
String version ="";
if(args != null) {
version = args[0];
if(version.equals("kor")) {
System.out.println("안녕하세요~ " + args[1]);
} else {
System.out.println("Hello~ " + args[1]);
}
}
int var = add(7,3);
System.out.println(var);
}
private static int add(int i, int j) {
return 0;
}
** main 메소드 예제
if(args.length != 2) {
System.out.println("값의 수가 부족합니다.");
System.exit(0); // 프로그램 강제 종료
return; // 길이가 짧아서 메인 문 빠져나감
}
String strNum1 = args[0];
String strNum2 = args[1];
int num1 = Integer.parseInt(strNum1);
int num2 = Integer.parseInt(strNum2);
int result = num1 + num2;
System.out.println("합: " + result);
값의 수가 부족합니다.
JVM이 main 메소드를 찾아내는 원리
- 명령 프롬프트창에서 확인하기
C:\Dev211\Java_programing\Chapter05_ReferenceType>java -cp bin ch5_2_array.MainStringArrayArgument kor v2.2.2
안녕하세요~ v2.2.2
- Run Configurations... 이용하기
반응형
'👨💻 2. 웹개발_Back end > 2-1 Java' 카테고리의 다른 글
[JAVA] 05-3 열거 타입 (0) | 2021.07.30 |
---|---|
[JAVA] 05-2 다차원 배열 (0) | 2021.07.30 |
[이클립스] 한글 깨짐 현상 해결 (0) | 2021.07.29 |
[JAVA] 05-1 참조타입과 참조변수 (0) | 2021.07.28 |
[JAVA] 04-2 반복문 (for문, while문, do-while문) (0) | 2021.07.27 |
댓글