메소드(method)란?
: 코드를 재사용할 수 있게 헤주는 것.
: 경제적으로 로직을 작성 할 수 있게 해줌.
public class Method{
public static void number(){
// number() 메소드 코드 내용 작성 부분
}
public static void main(String[] args){
number();
// number() 메소드 호출해서 number() 메소드 코드 내용을 사용할 수 있음.
}
}
local variable지역변수
: 특정 메소드 내에서만 사용되는 변수
main 메소드는 i
j
k
-> local variable
max 메소드는 result
parameter variable
: 메소드의 fomal paremeter list
max 메소드에서는 num1 num2
string 타입
문자열을 저장하는 메소드 class타입
null
배열이란?
c언어부터 오래동안 사용하고 있는 데이터 타입임.
배열 값들은 힙메모리에 연속으로 붙어 저장 됨.
<배열 사용 예시>
Array 배열
특정 타입의 원소가 연속적으로 메모리에 할당된 데이터 타입을 의미함.
int[] arr = {10,20,30,40};
형식으로 작성함.
int[]
는 배열 타입(배열 원소의 데이터 타입이 int라는 의미)arr
은 변수의 이름{10,20,30,40}
은 배열 초기 값, 각각의 데이터를 배열 원소의 데이터 값으로 설정한다는 의미arr[index]
index가 0인 경우 첫번째 원소를 가져옴
int[] arr = {10,20,30,40};
System.out.println("arr 첫번째 원소 : " +arr[0]);
System.out.println("arr 첫번째 원소 : " +arr[1]);
System.out.println("arr 첫번째 원소 : " +arr[2]);
System.out.println("arr 첫번째 원소 : " +arr[3]);
System.out.println("arr 전체 배열 원소 갯수 : " +arr.length); // 전체 원소의 길이(갯수)
int[] arr1 = { 50, 60, 70, 80 };
System.out.println("arr1 첫번째 원소 : " + arr1[0]);
System.out.println("arr1 첫번째 원소 : " + arr1[1]);
System.out.println("arr1 첫번째 원소 : " + arr1[2]);
System.out.println("arr1 첫번째 원소 : " + arr1[3]);
System.out.println("arr1 전체 배열 원소 갯수 : " + arr1.length);
// ---------------------------------------
double[] arr2 = { 1.2, 2, 3, 4 };
System.out.println("arr2 첫번째 원소 : " + arr2[0]);
System.out.println("arr2 첫번째 원소 : " + arr2[1]);
System.out.println("arr2 첫번째 원소 : " + arr2[2]);
System.out.println("arr2 첫번째 원소 : " + arr2[3]);
System.out.println("arr2 전체 배열 원소 갯수 : " + arr2.length);
배열만 선언하고 나중에 초기값을 넣는 방법.
arr3 = new int[]{5,6,7,8,9};
에서 new
메소드를 넣어 초기값을 넣음. int arr3[];
// new + data type(배열 타입인 경우는 예를 들면 int[])
arr3 = new int[]{5,6,7,8,9}; //
System.out.println("arr3 첫번째 원소 : " + arr3[0]);
System.out.println("arr3 첫번째 원소 : " + arr3[1]);
System.out.println("arr3 첫번째 원소 : " + arr3[2]);
System.out.println("arr3 첫번째 원소 : " + arr3[3]);
System.out.println("arr3 첫번째 원소 : " + arr3[4]);
System.out.println("arr3 전체 배열 원소 갯수 : " + arr3.length);
// ArrayBasic ab = new ArrayBasic();
배열에 원소의 값이 없는 배열 크기(길이) 생성
int[] 변수명 = new int[A];
형식 int[] arr4 = new int[4];
arr4[0] = 10;
arr4[1] = 20;
arr4[2] = 30;
arr4[3] = 40;
System.out.println("arr4의 전체 원소 개수 : "+arr4.length);
elemet 사용하기
int[] arr = { 10, 20, 30, 40, 50, 60 };
double[] arr2 = { 1.0, 2.0, 3.0, 4.0 };
for (int i = 0; i < arr.length; i++) { // arr.length = 6
sum += arr[i];
System.out.println("arr[" + i + "] : " + arr[i]);
}
for (int i = 0; i < arr2.length; i++) { // arr2.length = 4
System.out.println("arr[" + i + "] : " + arr2[i]);
}
//----------------------------------위 코드를 for문으로
//향상된 for문(배열 등 여러개의 원소를 갖은 타입에서 사용가능)
// arr 배열에서 첫번째 원소부터 마지막 원소의 값을 차례로 element에 넣어줌
for (int elemet : arr) {
//arr배열 값이 각각 element로 담긴다는 의미
System.out.println(elemet);
}
for (double elemet : arr2) {
System.out.println(elemet);
}
콘솔에서 배열의 크기와 원소의 값 읽어오기.
double[] myList;
Scanner in = new Scanner(System.in);
System.out.println("배열 전체 크기를 입력하세요");
int arrayLength = in.nextInt();
myList = new double[arrayLength];
for (int i = 0; i < myList.length; i++) {
System.out.println((i+1)+"번 째 원소를 입력하세요.");
myList[i] = in.nextDouble();
}
for (int i = 0; i < myList.length; i++) {
System.out.println("myList["+i+"] : " + myList[i]);
}
- 참고 : c 언어는 string이라는 데이터 타입 없음
배열.length 이용해서 평균값 구하기
double average = (double) sum / scores.length; // scores.length --> 배열 크기(길이)로 산술 가능
System.out.println("전체 합계 : " + sum);
System.out.println("전체 평균 : " + average);
배열.length로 최대값 구하기
double max = myList[0];
for (int i = 0; i < myList.length; i++) {
if (myList[i]>max) {
max = myList[i];
}
}
System.out.println("max : " + max);
배열을 사용해 코딩 단순화
String[] months = {"Jan", "Feb", "Mar", "Apr","May","Jun","Jul","Sep","Aug","Oct", "Nov","Dec"};
Scanner input = new Scanner(System.in);
System.out.println("달력 숫자를 입력하세요.");
int month = input.nextInt();
System.out.println("이번달은 " + months[month-1] + "입니다." );
배열 복사
A배열 원소들의 값을 전체 B배열 원소들로 값을 복사
System.arraycopy(A, 0, B, 0, A.length);
A배열
의 시작 위치는 0번째부터 , B배열
의 위치 0번째부터, A.length
만큼 복사int[] sourceArr = { 2, 3, 1, 5, 10 };
int[] targetArr = new int[sourceArr.length];
// 1. for문을 사용하여 단순 복사 하는 방법
for (int i = 0; i < sourceArr.length; i++) {
targetArr[i] = sourceArr[i];
}
for (int i = 0; i < targetArr.length; i++) {
System.out.println("targetArr[" + i + "] = " + targetArr[i]);
}
System.out.println("----------------------------------------");
// 2. System.arraycopy Method 사용하기
System.arraycopy(sourceArr, 0, targetArr, 0, sourceArr.length);
for (int i = 0; i < targetArr.length; i++) {
System.out.println("targetArr[" + i + "] = " + targetArr[i]);
}
number
numbers
스택 안에 main에서 testArray, testArray에서 heap메모리
순서로 데이터를 가져와서 출력함.
int x = 1;
int[] y = new int[10];
for (int i = 0; i < y.length; i++) {
y[i] = 100;
}
testArrayParameter(x, y);
System.out.println("x = " + x);
System.out.println("y[0] = " + y[0]);
System.out.println("---------------------------------");
for (int i = 0; i < y.length; i++) {
System.out.println("y[" + i + "] : " + y[i]);
}
}
public static void testArrayParameter(int number, int[] numbers) {
number = 1001;
numbers[0] = 3333;
int[] list = { 1, 2, 3, 4, 5 };
System.out.print("reverse 하기 전 :");
for (int i = 0; i < list.length; i++) {
System.out.print(list[i] + " ");
}
System.out.println();
// 스택에 있는 list의 값을 new list의 새로운 주소로 변경
reverse(list);
System.out.print("reverse 하기 후 :");
for (int i = 0; i < list.length; i++) {
System.out.print(list[i] + " ");
}
}
// return type: array return
public static void reverse(int[] list) {
int[] newList = new int[list.length];
for (int i = 0; i < list.length; i++) {
newList[i] = list[list.length - 1 - i];
}
// list = newList; --> 작동하지 않음. main에 list는 주소를 복사해오기만 했기 때문에.
// --> 아래 수정.
for (int i = 0; i < list.length; i++) {
list[i] = newList[i];
}
프로그램 외부에서 입력
for (int i = 0; i < args.length; i++) {
System.out.println("arge[" + i + "] : " + args[i]);
}
if (args.length != 3) {
System.out.println(" 사용법 예 : 2+3");
return;
// 메소드에 return 타입이 void인 경우 리턴 값이 없는 상태로 리턴 가능
}
int result = 0;
switch (args[1].charAt(0)) {
case '+':
result = Integer.parseInt(args[0]) + Integer.parseInt(args[2]);
break;
case '-':
result = Integer.parseInt(args[0]) - Integer.parseInt(args[2]);
break;
case '.':
result = Integer.parseInt(args[0]) * Integer.parseInt(args[2]);
break;
case '/':
result = Integer.parseInt(args[0]) / Integer.parseInt(args[2]);
break;
}
System.out.println(args[0] + " " + args[1] + " " + args[2] + "=" + result);
System.out.println("end of calculator");
int a = 1;
int b = 2;
int c = 3;
maxValue = max(a, b);
System.out.println("maxValue : " + maxValue);
maxValue = max(a, b, c);
System.out.println("maxValue : " + maxValue);
int[] numbers = { 1, 2, 3, 4, 5, 12, 15 };
maxValue = max(numbers);
System.out.println("maxValue : " + maxValue);
int maxValue;
maxValue = max(15, 24, 49, 77, 99, 120, 45);
System.out.println("maxValue : " + maxValue);
}// --> main
public static int max(int a, int b) {
int result;
if (a > b)
return a;
else
return b;
}
public static int max(int a, int b, int c) {
int result;
result = max(max(a, b), c);
return result;
}
// public static int max(int[] num) {
// int result = 0;
//
// for (int k : num)
// if (result < k)
// result = k;
// return result;
// }
//int...은 int[] 와 비슷한 표기법으로 같은 변수를 선언하면 오류가 뜸--> 위 max(int[] num)는 각주표기함.
public static int max(int... num) {
int result = 0;
for (int i = 1; i < num.length; i++) {
if (num[i] > result) {
result = num[i];
}
}
return result;