▶향상된 for문 써보기
String [] fruits= {"사과","딸기","바나나","복숭아","포도"};
//향상된 for문을 사용하여 모든 과일을 출력하는 코드를 작성하세요.
for(String num: fruits) {
System.out.print(num+" ");
}
/*
int [] lotto = new int[6];
lotto[0] = 7;
lotto[1] = 12;
lotto[2] = 19;
lotto[3] = 25;
lotto[4] = 33;
lotto[5] = 40;
for(int num: lotto) { //향상된 for 반복문 int num: 반복변수
System.out.print(num+" ");
}
for(int i =0; i< lotto.length; i++) {
System.out.print(lotto[i]+" ");
}
*/
Time [] timeArr;
timeArr = new Time[3]; //가지고올수있는 양 제한
/*
for(Time time: timeArr) { //원래배열을 바꾸는게 아니라 복사된 time배열만 바뀌는거였음.
time = new Time(); //배열에 저장된값을 '읽기'목적으로만 사용할때만 새로운 for문 사용가능
} //배열에 저장된값을 바꿀려먼 쓰면안됨.
*/
for(int i=0; i<timeArr.length; i++) {
timeArr[i]=new Time();
}
timeArr[0].setHour(14);timeArr[0].setMinute(30);timeArr[0].setSecond(25); //새로운 for문그대로하면 timeArr[null]이됨
timeArr[1].setHour(14);timeArr[1].setMinute(30);timeArr[1].setSecond(25);
timeArr[2].setHour(14);timeArr[2].setMinute(30);timeArr[2].setSecond(25);
int i =0;
for(Time time: timeArr) {
System.out.printf("time%d %s \n",i+1,time.currentTime());
}
/*
for(int i = 0; i<timeArr.length; i++) {
System.out.printf("time%d %s \n",i+1,timeArr[i].currentTime());
}
*/
-이해 안되면-
int [] arr1 = {1,2,3,4,5}; //num이라는 변수는 배열을 복사하기 위해 만들었을뿐
int [] arr2 = {1,2,3,4,5};
for(int num:arr1) {
num = num*2; //곱하기를 해도 num안에있는 변수가 바뀌기때문에 원래 arr안에있던 변수는 안바뀜
}
for(int i= 0; i<arr2.length; i++) {
arr2[i] = arr2[i] *2; //원래 배열에있는 값을 직접 변경 하는거임!
}
for(int num:arr2) { //arr2가 직접 바꼈기 때문에 num으로 복사를 하면 바뀐 arr2가 복사됨.
System.out.print(num+ " ");
}
향상된 for문은 상황보고 쓰기
Tv t;
-Tv타입의 래퍼런스 t
Circle c1 ,c2; //c1초기화해주기
c1 = new Circle();
c2 = new Circle();
System.out.println("c1] pi: "+ c1.pi+", radius: "+ c1.radius+ ", Area: "+c1.getArea());
System.out.println("c2] pi: "+ c2.pi+", radius: "+ c2.radius+ ", Area: "+c2.getArea());
//c1.radius = 5;
c1.setRadius(7);
c1.pi = 3.141592;
System.out.println("c1] pi: "+ c1.pi+", radius: "+ c1.radius + ", Area: "+c1.getArea());
c2.setRadius(7);
c2.pi = 3.14; //자기만의 PI값을 가질수 있음.
System.out.println("c2] pi: "+ c2.pi+", radius: "+ c2.radius + ", Area: "+c2.getArea());
모든 인스턴스가 공유하는 하나의 PI를 만들어줘야 좋음.
이걸 하나의 PI만들어주는게 = 클래스 변수
-메서드는 객체가 제공하는 기능
-class Circle2-
static double pi=3.141592; //3.141592값 고정
int radius;
void setRadius(int rad) {
radius = rad;
}
double getArea() {
double area;
area = radius * radius * pi;
return area;
}
System.out.println("pi: "+ Circle2.pi);
Circle2 c1,c2;
c1 = new Circle2();
c2 = new Circle2();
System.out.println("c1.pi: "+ c1.pi);
System.out.println("c2.pi: "+ c2.pi);
Circle2.pi=3.14;
c1.pi=3.14;
System.out.println("c1.pi: "+ c1.pi);
System.out.println("c2.pi: "+ c2.pi);
메서드유형4가지↓
1.입력값의 유무
2.반환의 유무
--> 1.입력값o 반환값 o
2.입력값o 반환값x
3.입력값x 반환값o
4.입력값x 반환값x
argument- 인수,인자
parameter- 매개변수
메소드가 호출할때 넘겨주는 입력값 - 인수,인자
메소드 입장에서 받아서(인수를 받아서) 어딘가(매개변수) 저장해서 사용함
ex)
add(int a,int b)
add(10,20)
여기서 10,20이 argument 값
값을 반환할때는 return
메소드안에서 return을 사용하는 나오는 효과
1.return이 사용된 위치에서 메소드의 실행은 무조건 종료됨.
2.return을 사용해서 메소드의 실행결과를 반환할수있음. 단, 그 위치에서 메소드는 무조건 종료
-class ReturnTest-
void noReturn() {
System.out.println("첫 번째 문장");
System.out.println("두 번째 문장");
System.out.println("세 번째 문장");
}
void return1() {
System.out.println("Return1()메소드 호출");
return;
//return뒤로는 실행못해서 주석처리나 지워야함
//System.out.println("세 번째 문장");
}
String return2() {
System.out.println("Return2()메소드 호출");
return "호출결과"; //void를 String으로 바꿔도 return뒤에는 무조건 종료라서 안돌아감
}
//noReturn()메서드를 호출하여 실행하는 코드를 작성하세요.
ReturnTest ts = new ReturnTest();
ts.noReturn();
ts.return1();
//String returnValue = ts.return2();
//System.out.println("returnValue: "+returnValue);
System.out.println("returnValue: "+ts.return2());
void noReturn() {
System.out.println("첫 번째 문장");
System.out.println("두 번째 문장");
System.out.println("세 번째 문장");
}
void return1() {
System.out.println("Return1()메소드 호출");
return;
}
String return2() {
System.out.println("Return2()메소드 호출");
return "호출결과";
}
public static void main(String[] args) {
//ex5 실행결과와 동일한 결과를 출력하는 코드를 작성하세요.
Ex6 ex6 = new Ex6();
ex6.noReturn();
ex6.return1();
System.out.println("returnValue: "+ex6.return2());
/*
noReturn();
return1();
return2();
System.out.println("returnValue: "+return2());
*/
package chap06;
public class Ex7 {
//프로그램의 제목을 출력하는 메서드
void printTitle() {
System.out.println("\n 원의 넓이 계산 프로그램");
}
//입력으로 주어진 문자를 count만큼 출력하는 메서드
void printCharacter(char ch,int count) {
for(int i=0; i<count; i++) {
System.out.print(ch);
}
System.out.println();
}
//PI값을 반환하는 메서드
double getPi() {
double pi = 3.141592;
return pi;
}
//반지름을 입력으로 받아 원의 넓이를 계산하여 반환하는 메서드
double getCircleArea(int radius) {
double result;
result = radius * radius * getPi();
return result;
}
public static void main(String[] args) {
Ex7 ex7 = new Ex7();
int radius = 7;
ex7.printCharacter('*', 35);
ex7.printTitle();
ex7.printCharacter('*', 35);
System.out.printf("반지름이 %d인 원의 넓이는 %f 입니다.\n",radius,ex7.getCircleArea(radius));
}
}
왜 안돌아가나 했더니 %f 인데 %.f라해서 안돌아갔었다..
오류코드에 .이 문제라고 말해줬는데... 머쓲
public class Exam1 {
void up(double num1) {
if(num1 == (int)num1) {
System.out.println("올림: "+(int)(num1));
}else{
System.out.println("올림: "+(int)(num1+1));
}
}
void down(double num) {
System.out.println("버림: "+(int)num);
}
void banup(double num) {
System.out.println("반올림: "+(int)(num+0.5));
}
public static void main(String[] args) {
Exam1 ex1 = new Exam1();
double num1=5.647;
ex1.up(num1);
ex1.down(num1);
ex1.banup(num1);
}
}
잘돌아간다!
참고문헌- 자바의정석 (남궁성)