행 : 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
// 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 를 출력하면 '가을' 이라는 값이 나옴.
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
프로그래밍 언어의 내용에 대해 잘 설명되어있는 사이트
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을 쓰는 이유는 지금과는 달리 더 깊이 들어가게 되면 각 함수별로 값이 나올 것이고, 그 값들을 모아 재연산을 한 후의 결과값이 나오고, 그러한 과정을 수번-수십번을 해야 프로젝트의 결과물이 나올 것이기 때문임.
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 : 과체중