1. 년도를 매개변수로 넘겨 받아 띠를 구하는 메소드

class Test13 {
	String tti; // 띠를 구하는 것이니까 나중에 결과값은 문자열 // 인스턴스 변수, 필드 
    
    public String tti(int year) {
    	// 인스턴스 메소드. 가인수 매개변수로 년도를 입력 받는다.
        // 리턴 타입은 String(문자열) 
        // 이 입력받은 수를 가지고 띠를 출력할 수 있도록 만들어야함
        // 12로 나눈 나머지가 0일 때 원숭이
        // 12로 나눈 나머지가 1일 때 닭
        // 12로 나눈 나머지가 2일 때 개
        // -> 나머지가 1개씩 늘어남에 따라 원숭이 닭 개 돼지 쥐 소 호랑이 토끼 용 뱀 말 양이 나온다.
        String []t = new String[] {"원숭이","닭",개","돼지","쥐","소","호랑이","토끼","용","뱀","말","양"};
        // 배열의 첫번째를 나타낼 때는 String[0] 이므로
        return t[year%12]; 	
    } 
}

2. 정수를 매개변수로 넘겨받아 정수의 자릿수 구하기

public int numberLen(int n) {		
		
/*		
		int len=1;
		if(n < 0) {
			n = -n;
		}
		while(n>=10) {
			n=n/10;
			len++;
		}
		return len;	
*/		
		if( n < 0 ) {
			n = -n; // 음수의 경우 양수로 바꿔주고 삼항연산자를 실행
		}
		return n>=10 ? 1+numberLen(n/10) : 1; 
        // 10으로 나누었을 때 몫이 1이면 두자리 몫이 2이면 세자리이므로 +1이고 
        // 재귀호출로 10으로 나누어질때마다 1을 더해준다.
        // 한자릿수의 경우 (1~9)는 1로 값을 되돌려준다.
	}

3. 서로 다른 3자릿수의 난수 생성하기

public int number3(){
		int m1, m2, m3;
		
		m1 = (int)(Math.random()*9)+1; // 1~9 // 100의자리
        // Math.random 은 0< Math.random<1 이렇게 수를 생성해 주므로  
        // 1<Math.random<10 
        // 1.xx ~ 9.xx 의 임의의 수를 생성하게 한다.
        // 이것은 int 형에 저장될 때 정수형으로 저장되므로
        // 1~9 사이의 수가 m1에 저장된다. m1은 백의 자리이므로 0이 될 수 없음.
		do {
			m2 = (int)(Math.random()*10); // 0~9
		} while(m1 == m2);
        // m2는 십의 자리이므로 0이 와도 된다. 하지만 서로 다른 수로 구성해야 하므로
        // m1에서 생성된 수와 같으면 안된다.
		
		do {
			m3 = (int)(Math.random()*10); // 0~9
		} while(m1 == m3 || m2 == m3);
        // m3는 일의 자리이므로 0이 와도 된다. 하지만 서로 다른 수로 구성해야 하므로
        // m1과 m2에서 생성된 수와 같으면 안된다.
		
		return m1*100 + m2*10 + m3;
	}
}

잘 만들었는지 확인해보자

public class Ex13 {
	public static void main(String[] args) {
		Test13 ob = new Test13();
		
		System.out.println(ob.tti(2021));
		System.out.println(ob.numberLen(345));
		System.out.println(ob.numberLen(-100));
		System.out.println(ob.number3());
	}
}

※ 지금은 배우고 있는 중이라서 이렇게 짰지만 실무에서는 한 개의 클래스는 한 개의 기능만을 수행해야한다.

 

	public static void main(String[] args) {
/*
		Test12 ob;
		ob.a=10; // 컴파일 오류. ob가 초기화가 되어 있지 않음.
		
*/
/*		
		Test12 ob=null; // null로 초기화. null은 메모리가 할당되지 않은 상태
		// ob.a=10; // 런타임오류 : NullPointerException	
		ob=new Test12();
		ob.a=10;
*/
		
		// 객체 배열
		Test12 []tt=new Test12[5]; // Test12 객체를 5개 저장 할 수 있는 배열
        			// 즉, 객체를 저장할 수 있는 배열 5개를 만들거야 라고 선언만 한 상태!!!!
					// 각 개체의 메모리가 할당 된 것은 아님. 
					// 할당은 생성자를 호출할 경우에만 메모리가 할당됨.
		
		// Test12 t1=null, t2=null, t3=null, t4=null, t5=null; 과 유사		
/*		
		// 런타임 오류
		// NullPointerException	
		tt[0].a = 10;
		tt[0].print(); 
*/	
		
		// 객체 배열의 메모리 할당
		for(int i=0; i<tt.length; i++) {
			tt[i] = new Test12();
		}
        // ★★★ 객체 배열은 하나씩 꼭 new 클래스명(); 으로 메모리를 할당 받아야 한다. 
		
		tt[0].a = 10;
		tt[0].print(); 
		
	}
}
class Test12 {
	int a;
	int b;
	
	public void print() {
		System.out.println(a+":"+b);
	}
}

// 비정형인자
public class Ex11_method {

	public static void main(String[] args) {
		Test11 t = new Test11();
		
		int s1 = t.sum(1,2,3,4,5);
		System.out.println(s1);
		
		int s2 = t.sum(1,2,3);
		System.out.println(s2);
		
	}

}
class Test11 {
	public int sum(int ...args) {
		int s=0;
		for(int n : args) {
			s+=n;
		}
/*		
		for (int i=0; i<args.length; i++){
		s+=args[i];
		}
*/		
		return s;
	}
}

비정형 인자는 가인수에 ...args 를 넣으면 메인 클래스에서 받은 실인수의 갯수만큼 받는다.

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0714_Ex13_method 만들기 예제  (0) 2021.07.15
0714_Ex12_객체 배열  (0) 2021.07.15
0714_Ex10_overloading : 오버로딩  (0) 2021.07.14
0714_Ex08_recursion  (1) 2021.07.14
0714_Ex07_recursion : 재귀호출  (0) 2021.07.14
// overloading : 메소드 중복정의
//	메소드 이름은 같지만 메소드 괄호안에 있는 매개변수의 개수가 다르거나 자료형이 다르면 다른메소드이다. 
public class Ex10_overloading {
	public static void main(String[] args) {
		Test10 ob = new Test10();
		
		ob.print();
		
		short a = 10;
		ob.print(a); // int: 10
					 // 동일한 기본자료형의 인수를 가진 메소드가 없으면 
		             // 기본자료형중에 가장 가까운 큰 자료형의 메소드 호출
		
		Short b = 10; 
		ob.print(b); // Short: 10
		
		int c=10;
		ob.print(c); // int: 10
		
		long d=10;
		ob.print(d); // Long: 10
			// 매개변수 인수가 기본자료형 중 같거나 큰 것이 없는 경우
			// Wrapper 클래스가 존재하면 Wrapper에서 찾는다. 
			// Wrapper 클래스도 없으면 컴파일 오류
			// 기본자료형이 우선순위가 높음. 
            // long 은 8byte 이므로 기본자료형의 인스턴스 메소드에서 기본자료형은 int(4byte)형
            // 밖에 없으므로 Wrapper 클래스 Long 으로 가서 출력!
		
	}
}
class Test10 {
	
	public void print() {
		System.out.println("인자가 없는 메소드");
	}
	
	
/*	// 컴파일 오류. 메소드 오버로딩이 아니다. 오버로딩은 매개변수의 개수가 다르거나 자료형이 달라야한다.
	public int print() {
		return 1;
	}
	매개변수의 타입이 다르거나, 매개변수의 개수가 달라야 한다. 
	자료형이 다르다고 메소드 이름을 다 다르게 주면 가독성이 떨어짐.
	System.out.println() 메소드의 중복정의의 예.
	데이터타입이 달라도 출력하는 것은 다 같음
	
	
	리턴타입으로 구분하는 것이 아님!
*/
	// Wrapper 클래스 : 기본 자료형에 대응하는 클래스로 Short, Integer, Long 등...
	// Short : Wrapper 클래스. 기본자료형인 short를 클래스로 작성한 것★★★
	public void print(Short a) {
		System.out.println("Short: "+a);
	}
	
	public void print(int a) {
		System.out.println("int: "+a);
	}
	// Long : Wrapper 클래스. 기본자료형인 long을 클래스로 작성한 것.
	public void print(Long a) {
		System.out.println("long: "+a);
	}
	public void print(int a, int b) {
		System.out.println("매개변수 2개: "+a+","+b);
	}
	
}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0714_Ex12_객체 배열  (0) 2021.07.15
0714_Ex11_method : 비정형인자  (0) 2021.07.15
0714_Ex08_recursion  (1) 2021.07.14
0714_Ex07_recursion : 재귀호출  (0) 2021.07.14
0714_Ex06_객체는 레퍼런스 변수이다.  (0) 2021.07.14
// 재귀호출
public class Ex08_recursion {
	public static void main(String[] args) {
		Test8 tt = new Test8();
		int s;
		
		s = tt.sum(10);
		System.out.println(s);

		s = tt.pow2(10);
		System.out.println(s);
		
		System.out.println(tt.pow(2, 5)); // 32.0
		System.out.println(tt.pow(2, -2)); //0.25
		
		// 최대공약수
		System.out.println(tt.gcd(12, 8)); // 4
		
	}
}
class Test8 {
	public int sum(int n) {
		return n>1 ? n+sum(n-1) : n;
	}
/*
		int s=0;
		for(int i=1; i<=n; i++){
			s+=i;
		}
		return s;
 */
		
	// 2의 x승 결과
	public int pow2(int n) {
		return n>=1 ? 2 * pow2(n-1) : 1;			
	}
	
	// x의 y승 결과
	public double pow(int x, int y) {
		if(y>=0) {
			return y>=1 ? x * pow(x, y-1) : 1;
		} else {
			return (1.0 / x) * pow(x, y+1);			
		}
	}
	
	// 최대공약수
	public int gcd(int a, int b) {
		return b==0 ? a : gcd(b, a%b);
	}
}

재귀호출 : 메소드에서 자신의 메소드를 다시 호출, 처리하지 못한 데이터는 스택!(저장공간)에 저장

// 재귀호출 : 메소드에서 자신의 메소드를 다시 호출. 처리하지 못한 데이터는 스택에 저장
public class Ex07_recursion {
	public static void main(String[] args) {
		Test7 ob = new Test7();
		ob.print(5);
		 // stack이 넘치면 StackOverflowError 발생
	}
}
class Test7 {
	public void print(int n) {
		if(n>1) {
			print(n-1); // 메소드에서 자신의 메소드를 호출
		}
		System.out.println(n);
		
	}
}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0714_Ex10_overloading : 오버로딩  (0) 2021.07.14
0714_Ex08_recursion  (1) 2021.07.14
0714_Ex06_객체는 레퍼런스 변수이다.  (0) 2021.07.14
0714_Ex05_method  (0) 2021.07.14
0714_Ex04_method  (0) 2021.07.14
public class Ex06 {

	public static void main(String[] args) {
		Test6 ob1; // 레퍼런스 변수
		// ob1.print(); 컴오류. 메모리할당이 안되었으므로
		
		ob1 = new Test6(); // 메모리 할당이 되고 a=10, b=20으로 초기화 
		// 필드 a=10, b=20을 갖고 있는 주소값을 가지고 있다.
		Test6 ob2 = new Test6(); // 필드 a,b는 메모리 할당이 되고 a=10, b=20으로 초기화

		System.out.println(ob1 == ob2); // 주소가 같냐? false
		ob1.a+=100;
		System.out.println(ob1.a + ":"+ ob2.a); // 110 : 10
		
		Test6 ob3 = ob2; // ob와 ob3은 같은 주소를 나타낸다. 같은 객체
		System.out.println(ob2 == ob3); // 주소가 같냐? true
		ob3.a +=200;
		System.out.println(ob2.a+":"+ob3.a); // 210 : 210
		
		// 클래스명@해쉬코드 : 자바가 객체를 찾을 때 쓰는 코드 
		// 같은 객체는 해쉬코드가 같지만, 해쉬코드가 같다고 같은 객체는 아니다.★
		System.out.println(ob1); // ex0714.Test6@15db9742
		System.out.println(ob2); // ex0714.Test6@6d06d69c
		System.out.println(ob3); // ex0714.Test6@6d06d69c

	}

}
class Test6 {
	int a=10;
	int b=20;
	
	public void print() {
		System.out.println(a+":"+b);
	}
}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0714_Ex08_recursion  (1) 2021.07.14
0714_Ex07_recursion : 재귀호출  (0) 2021.07.14
0714_Ex05_method  (0) 2021.07.14
0714_Ex04_method  (0) 2021.07.14
0714_Ex03_method  (0) 2021.07.14
public class Ex05_method {
	public static void main(String[] args) {
		Test5 tt = new Test5();
		Test5 tt2 = new Test5();
		
		tt.x = 10; tt2.x = 10;
		tt.sub();
		System.out.println(tt.x+":"+tt2.x); // 15 : 10
		
		tt.x = 10; tt2.x = 10;
		tt.sub2(tt2);
		System.out.println(tt.x+":"+tt2.x); // 10 : 15

	}
}
class Test5 {
	int x;
	public void sub() {
		x+=5; // x는 메소드를 호출한 객체의 것 
	}
	public void sub2(Test5 t) { // call by reference
		t.x+=5;
	}
}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0714_Ex07_recursion : 재귀호출  (0) 2021.07.14
0714_Ex06_객체는 레퍼런스 변수이다.  (0) 2021.07.14
0714_Ex04_method  (0) 2021.07.14
0714_Ex03_method  (0) 2021.07.14
0714_Ex02_method  (0) 2021.07.14

+ Recent posts