국비 7일차_1

강지수·2023년 12월 20일
0

국비교육

목록 보기
13/97

지난 시간 복습

행 : row
열 : column


지난 미션

이번 미션은 배열값과 random값과의 유사성이 있기 때문에 다음과 같이 코드를 좀 더 간결하게 압축시킬 수 있다.

		Random dice=new Random();
		int arr[]=new int[6];		
		
		for (int i = 0; i < 1000; i++) {
			++arr[dice.nextInt(6)];
		}
		
		for (int i = 0; i < arr.length; i++) {
			System.out.println((i+1)+"면 : "+arr[i]+"회");
		}

결과

1면 : 177회
2면 : 162회
3면 : 182회
4면 : 154회
5면 : 168회
6면 : 157회

random값을 받음과 동시에 배열의 번호로 넣어버리고, 반복문이 끝나면 최종값을 출력한다.


day005 project 생성
com.tech.gt001 package 생성
AnnomyArrays class 생성

익명 배열

익명 배열 = 무명 배열
배열이 한 차례 사용 되고, 재사용 하지 않을 때

		int[] aa= {1,1,1,1,1,1};
		System.out.println(Arrays.toString(aa));
//		무명 배열
		System.out.println(Arrays.toString(new int[] {1,2,4,5,6,7}));

결과

[1, 1, 1, 1, 1, 1]
[1, 2, 4, 5, 6, 7]

[1, 1, 1, 1, 1, 1] 는 'aa' 라는 이름을 가지고 있고 (배열 선언을 함) 다시 aa 라는 이름을 통해 재사용이 가능한데
[1, 2, 4, 5, 6, 7] 는 이름이 없고, 출력문 안에서만 1회 사용되고, 재사용할 수 없다.


public static void main(String[] args) {
//		익명 배열/무명 배열 2
		System.out.println("sum : "+sum(new int[] {1,2,4,5,6,7}));
		
	}
	
private static int sum(int[] arrs) {
	int total=0;
	for (int i = 0; i < arrs.length; i++) {
		total=total+arrs[i]; // 누적
	}
	
	return total;
}

결과

sum : 25

private ~ sum 함수 를 정의하고
main 함수에서 sum 을 불러와서 sum 함수기능을 사용함.

갑자기 함수 개념을 안배웠는데 함수 개념까지 나와서 이해하기 어렵..지만
저런 경우에도 사용할 수 있다는 것만 알고 넘어가면 된다고 함.


형변환

		byte b=10;
		int num=10000;
		
		num=b; // 자동형변환
		System.out.println(num);
		num=10000;
		b=(byte) num; // 강제형변환
		System.out.println("byte:"+b);
		System.out.println(num%128);

결과

10
byte:16
16

foreach 문

//		for문
		for (int i = 0; i < numbers.length; i++) {
			System.out.println(numbers[i]);
		}

결과

10
20
30
40
50

//		foreach문
		for (int num : numbers) {
			System.out.println(num);
		}

결과

10
20
30
40
50

for문과 같은 결과가 나오지만 for문 보다 더 간결하게 표현할 수 있다.
numbers 라는 배열에서 낱개 하나하나 (data) 뽑아와서 num 에 대입시키는 역할


열거형 타입

enum

// 열거형 변수
enum Season{
	봄,여름,가을,겨울,겨울2
}

public class EnumExample {

	public static void main(String[] args) {
		for (Season season : Season.values()) {
			System.out.println(season);
		}

	}

}

결과

봄
여름
가을
겨울
겨울2

Season 이라는 enum 객체에서 data 하나하나 가져온 다음 season에 각각 대입해서 출력

		Season season2=Season.가을;
		System.out.println(season2);

결과

가을

Season type의 season2 변수 선언하고 '가을' 로 초기화
season2 를 출력하면 '가을' 이라는 값이 나옴.


sort 메소드

		int[] arr= {50,40,20,80,90};
		System.out.println("정렬 전:"+Arrays.toString(arr));
		
//		버블정렬
		
		int tmp;
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr.length-1;j++) {
				if (arr[j]>arr[j+1]) {
					tmp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=tmp;
				}
			}
		}
		System.out.println("정렬 후:"+Arrays.toString(arr));

결과

정렬 전:[50, 40, 20, 80, 90]
정렬 후:[20, 40, 50, 80, 90]

이 정렬은 버블 정렬


//		선택정렬
		
		int tmp;
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr.length;j++) {
				if (arr[i]<arr[j]) {
					tmp=arr[j];
					arr[j]=arr[i];
					arr[i]=tmp;
				}
			}
		}
		System.out.println("정렬 후:"+Arrays.toString(arr));

결과

정렬 후:[20, 40, 50, 80, 90]

이 정렬은 선택정렬


		int[] arr= {50,40,20,80,90};
		Arrays.sort(arr);
		System.out.println("정렬 후:"+Arrays.toString(arr));

결과

정렬 후:[20, 40, 50, 80, 90]

sort 함수 안에 정렬 기능이 포함되어 있다.


메소드

method = 함수
특정 작업을 수행하기 위한 명령문의 집합

예시


TCP School
https://tcpschool.com

프로그래밍 언어의 내용에 대해 잘 설명되어있는 사이트


method 사용 + 객체

	public static void main(String[] args) {
//		객체 선언 (생성)
		MethodExample1 m1=new MethodExample1();
		m1.makeSum(); // makeSum method를 호출
	}
//    	매개변수가 없는 method
	public void makeSum() { // makeSum을 만든 목적 : 합계 구하기
		int sum=0;
		for (int i=0;i<10;i++) {
			sum+=i;
		}
		System.out.println("sum:"+sum);
	}

결과

sum:45

전체 class의 실행 순서는 무조건 main 함수가 우선적으로 실행된다.
makeSum method가 main method보다 위에 있어도 main이 우선적으로 실행된다.


위의 makeSum method 는 매개변수가 없기 때문에 반복호출해도 같은 값만 계산해서 나온다.

	public static void main(String[] args) {
//		객체 선언 (생성)
		MethodExample3 m1=new MethodExample3();
		m1.makeSum(1,10); // makeSum method를 호출
		m1.makeSum(10,20); // makeSum method를 호출
	}
	
//		매개변수가 있는 메소드
	public void makeSum(int a,int b) { // makeSum을 만든 목적 : 합계 구하기
		int start=a;
		int end=b;
		
		int sum=0;
		for (int i=start;i<end;i++) {
			sum+=i;
		}
		System.out.println("시작:"+start);
		System.out.println("종료:"+end);
		System.out.println("sum:"+sum);
		System.out.println("=========");
	}

결과

시작:1
종료:10
sum:45
=========
시작:10
종료:20
sum:145
=========

makeSum(int a,int b) 를 통해 int형 a 와 b 값을 받을 것이라는 method를 생성하고,
makeSum(1, 10) / makeSum(10, 20) 과 같이 호출할 때 매개변수를 지정함으로써 원하는 값으로 계산할 수 있다.


return이 있는 method

return 타입과 return해주는 결과값의 타입이 일치해야 한다.
return값은 호출한 곳으로 반환된다.


	public static void main(String[] args) {
//		객체 선언 (생성)
		MethodExample4 m1=new MethodExample4();
		int rsum=m1.makeSum(1,10); // makeSum method를 호출
		int rsum2=m1.makeSum(50, 100);
		System.out.println("rsum:"+rsum);
		System.out.println("rsum2:"+rsum2);
	}
	
//		return이 있는 메소드
	public int makeSum(int a,int b) { // makeSum을 만든 목적 : 합계 구하기
//		void : return이 없다
//		return값은 호출한 곳으로 반환된다.
		int start=a;
		int end=b;
		
		int sum=0;
		for (int i=start;i<end;i++) {
			sum+=i;
		}
		return sum;
	}

결과

rsum:45
rsum2:3725

m1.makeSum(1,10); // makeSum method 호출
public int makeSum(int a,int b) // a, b 에 1과 10값 대입
.
.
진행
.
.
return sum; // 호출한 곳으로 return됨.
int rsum=m1.makeSum(1,10) // return값을 rsum에 저장


return을 쓰는 이유는 지금과는 달리 더 깊이 들어가게 되면 각 함수별로 값이 나올 것이고, 그 값들을 모아 재연산을 한 후의 결과값이 나오고, 그러한 과정을 수번-수십번을 해야 프로젝트의 결과물이 나올 것이기 때문임.


MainArgs

public static void main(String[] args) {
		System.out.println(args[0]);
	}

class 우클릭 - Run As - Run Configurations

상단 Arguments 탭

Program arguments 에 원하는 값 입력 후 Apply - Run

첫번째값

여러개의 값을 입력하면

	public static void main(String[] args) {
		for (int i = 0; i < args.length; i++) {
			System.out.println(args[i]);			
		}

	}

결과

첫번째값
두번째값
세번째값
네번째값

위와 같이 출력할 수 있다.


메모장으로 코딩해보기

결과

arguments를 설정해주면 그렇게 출력이 나온다.


미션
method 이름 : makeAverage
1, 100을 전달받아
평균을 구해서 return 받아서
평균을 출력하세요

	public static void main(String[] args) {
		MakeAvg avg=new MakeAvg();
		float returnAvg=avg.makeAverage(1,100);
		
		System.out.println(returnAvg);

	}	
	public float makeAverage(float a, float b) {
		float avg=(a+b)/2;
		
		return avg;
	}

결과

50.5

강사님의 코드

//	method 이름 : makeAverage
//	1,100 을 전달받아
//	평균을 구해서 return 받아서
//	평균을 출력하세요
	
//	강사님의 코드
	public static void main(String[] args) {
		MakeAvg2 m2=new MakeAvg2();
		float avg=m2.makeAverage(1, 100);
		System.out.println("avg:"+avg);
	}	
	public float makeAverage(int start, int end) {
		int sum=0;
		
		for (int i = start;i <= end; i++) {
			sum+=i;
		}
		float avg=sum/100;
		
		return avg;
	}

결과

avg:50.0

...?

어떤 기능을 쓰라는 지는 이해했는데, 원하는 결과값이 무엇이었는지 이해가 안됨.
1,100을 전달받아 평균을 받으라는것 = 1과 100의 평균 = 50.5
1부터 100까지의 수의 합의 평균을 구하시오 = 50.5

...?

아마 float형을 제대로 설정을 안해주어서 50.5에서 50만 나온 것 같음.


		1차 : bmi지수구하기
		함수 이름 : calculate
		입력 : 몸무게, 키
		
		2차 : bmi지수를 이용해서 저체중/정상 을 판단하여
		return값 출력
		return값 이름 : getResult
	public static void main(String[] args) {
		BMIExample bmi = new BMIExample();
		Scanner scan = new Scanner(System.in);
		System.out.println("키를 입력하세요: (cm)");
		float a = scan.nextFloat();
		Scanner scan2 = new Scanner(System.in);
		System.out.println("몸무게를 입력하세요: (kg)");
		float b = scan2.nextFloat();
		float getResult = bmi.calculate(a, b);
		System.out.println("bmi 지수 : "+getResult);
		String bmiGrade = "";
		if (getResult >= 35.0) {
			bmiGrade = "고도비만";
		} else if (getResult >= 30.0) {
			bmiGrade = "2단계비만";
		} else if (getResult >= 25.0) {
			bmiGrade = "1단계비만";
		} else if (getResult >= 23.0) {
			bmiGrade = "과체중";
		} else if (getResult >= 18.5) {
			bmiGrade = "정상";
		} else {
			bmiGrade = "저체중";
		}
		System.out.println("bmiGrade : "+bmiGrade);
	}

	public float calculate(float cm, float kg) {
		float calculate = 0.0f;
		calculate = (kg / (cm * cm)) * 10000;
		return calculate;
	}

결과

키를 입력하세요: (cm)
170
몸무게를 입력하세요: (kg)
70
bmi 지수 : 24.221453
bmiGrade : 과체중
profile
개발자 준비의 준비준비중..

0개의 댓글