17 매개 변수의 수를 모를 경우
package BookExampleHomeWork;
public class Computer {
int sum1(int[] values) { //리턴타입은 int, 매개변수를 정수배열 values로 가지는 메소드 sum1 선언
int sum = 0;
for (int i = 0; i < values.length; i++) {
sum += values[i]; //sum은 누적 변수이기 때문에 for문 밖에 선언
}
return sum; //return값은 sum
}
int sum2(int... values) { //리턴타입은 int, 마찬가지로 매개변수를 정수 배열 values로 가지는 메소드 sum2 선언(단, 여기선 ...를 이용함)
int sum = 0;
for (int i = 0; i < values.length; i++) {
sum += values[i];
}
return sum;
}
}
=================================
18 매개 변수의 수를 모를 경우
package BookExampleHomeWork;
public class ComputerExample {
public static void main(String[] args) {
Computer myCom = new Computer();
int[] values1 = {1,2,3}; //호출방법1 : 배열선언
int result1 = myCom.sum1(values1);
//이후 배열명을 매개값으로 메소드 sum1호출 //리턴값은 result1에 넣는다.
System.out.println("result1: " + result1);
int result2 = myCom.sum1(new int[] {1,2,3,4,5});
//호출방법2 : 특정 값 목록을 가진 배열을 선언하는 명령어를 매개값으로 넣어 메소드 sum1호출
System.out.println("result2: " + result2);
int result3 = myCom.sum2(1,2,3);
//호출방법3 : 배열의 값을 일반 매개변수처럼 직접 입력하면, 메소드가 호출되면서 자동으로 해당 값을 가진 배열이 생성된다.
System.out.println("result3: " + result3);
//이때 라이브러리 클래스에는 ...를 사용한 배열을 매개변수로 가지는 메소드 선언 필요
int result4 = myCom.sum2(1,2,3,4,5);
System.out.println("result4: " + result4);
myCom.sum2(values1);
//사실 ...를 사용해서 메소드 선언한 경우에도 메소드 호출 방법1,2를 사용할 수 있다.
myCom.sum2(new int[] {1,2,3,4,5});
}
}

19 return문
package BookExampleHomeWork;
public class Car2 {
// 필드
int gas;
// 메소드
void setGas(int gas) { //gas 필드의 초기값을 주는 메소드
this.gas = gas; //리턴값이 없는 메소드로 매개값을 받아서 gas필드값을 변경
}
boolean isLeftGas() { //gas의 잔량 여부를 알렫주는 메소드
if (gas == 0) {//리턴값이 boolean인 메소드로 gas 필드값이 0이면 false,아니면 true를 리턴
System.out.println("gas가 없습니다.");
return false; // false를 리턴
}
System.out.println("gas가 있습니다");
return true; // true를 리턴
}
void run() { //gas의 잔량에 따라 자동차를 작동하거나 작동하지 않게 하는 메소드
while(true) {
if(gas > 0) {
System.out.println("달립니다. (gas 잔량: " + gas + ")");
gas -= 1;
} else {
System.out.println("멈춥니다. (gas 잔량: " + gas+ ")");
return; //메소드 실행 종료
(반복문 안에 있기 때문에 return이나 break가 필요하다.
사실 while문 뒤에 실행문이 더이상 없기 때문에 break도 가능함)
}
}
}
}
==============================================
20 return문
package BookExampleHomeWork;
public class CarExample2 {
public static void main(String[] args) {
Car2 myCar = new Car2();
myCar.setGas(5); //Car2의 setGas()메소드 호출 (리턴값 없음)
boolean gasState = myCar.isLeftGas();
//Car2의 isLeftGas()메소드 호출 (매개변수는 없음. 사실 위의 메소드에서 필드값 변경을 이미했기 때문)
if(gasState) {
//위에서 bollean리턴값이 담긴 gasState로 조건문 안에서 또다른 메소드를 호출할 수 있게 한다.
System.out.println("출발합니다");
myCar.run(); //Car의 run()메소드 호출
}
if(myCar.isLeftGas()) { //Car2의 isLeftGas() 메소드 호출
System.out.println("gas를 주입할 필요가 없습니다");
} else {
System.out.println("gas를 주입하세요.");
}
}
}

package BookExampleHomeWork;
public class Calculator {
int plus(int x, int y) { //3. 세번째 호출되는 메소드 (x=7, y=10)
int result = x + y; //4. 처음으로 연산 후 result값을 리턴한다.
return result; //result = 17
}
double avg(int x, int y) { //2. 두번째 호출되는 메소드
double sum = plus(x,y); //plus 메소드 호출
double result = sum /2 ; //5. plus메소드를 실행한 후 바로 직전 호출해준 여기로 돌아와 연산 수행 (이 때 result =17이란 리턴값을 가지고 왔다)
return result; //result = 17/2 = 8.5
}
void execute() { //1.실행클래스에서 호출된 메소드
double result = avg(7,10); //avg 메소드 호출
println("실행결과: " + result); //6. result = 8.5을 가지고 돌아옴. 괄호 안은 문자열 연산이 됨(문자열 + 8.5 = String) > println메소드를 호출한다.
}
void println(String message) { //7. message = "실행결과: 8.5"란 문자열이다.
System.out.println(message); //8.문자열을 출력한다.
}
}
================================================
package BookExampleHomeWork;
public class CalculatorExample {
public static void main(String[] args) {
Calculator myCalc = new Calculator();
myCalc.execute(); //단 하나의 메소드만 호출
}
}

23 클래스 외부에서 메소드 호출
package BookExampleHomeWork;
public class Car3 {
//필드
int speed;
//메소드
int getSpeed() { //단순히 필드 speed의 값을 return해주는 메소드
return speed;
}
void keyTurnOn() { //
System.out.println("키를 돌립니다.");
}
void run() {
for(int i=10; i<=50; i+=10) {
speed = i; //필드 값 speed = 50을 저장하고 끝남.
System.out.println("달립니다.(시속:" + speed + "km/h)");
}
}
}
============================================
24 클래스 외부에서 메소드 호출
package BookExampleHomeWork;
public class CarExample3 {
public static void main(String[] args) {
Car3 myCar = new Car3();
myCar.keyTurnOn();
myCar.run();
int speed = myCar.getSpeed();
//getSpeed 메소드를 통해 Car3의 필드 speed값을 받아와 실행 클래스에서도 저장한다.
System.out.println("현재 속도: " + speed + "km/h");
}
}

25 메소드 오버로딩
package BookExampleHomeWork;
public class Calculator2 {
// 정사각형의 넓이
double areaRectangle(double width) {
return width * width;
}
// 직사각형의 넓이
double areaRectangle(double width, double height) {
return width * height;
}
}
==================================
26 메소드 오버로딩
package BookExampleHomeWork;
public class CalculatorExample2 {
public static void main(String[] args) {
Calculator2 myCalcu = new Calculator2();
//정사각형의 넓이 구하기
double result1 = myCalcu.areaRectangle(10);
//자동형변환으로 areRectangle(double width)를 알아서 찾는다. 이때 warning혹은 error가 뜨지만 정상적으로 실행된다.
//직사각형의 넓이 구하기
double result2 = myCalcu.areaRectangle(10, 20);
//결과 출력
System.out.println("정사각형 넓이=" + result1);
System.out.println("직사각형 넓이=" + result2);
}
}

'Java > BookExample' 카테고리의 다른 글
열거 객체의 메소드 (0) | 2021.03.03 |
---|---|
열거 타입과 열거 상수 (0) | 2021.03.03 |
배열복사 (0) | 2021.03.02 |
add메소드와 배열생성 (0) | 2021.02.28 |
배열 속의 배열 (0) | 2021.02.28 |