[JAVA]11일차(생성자/this/초기화블럭/배열/2차원 배열)

정효진·2021년 7월 28일
0

Developer Study

목록 보기
13/47
post-thumbnail

7월28일(수)

Test069~Test080
과제 Test078,Test080

◼ 생성자(Constructor)

▪ 생성자(Constructor)의 역할

  1. 메모리 할당
  2. 초기화

▪ 생성자(Constructor)의 특징

  1. 생성자는 메소드지만, 일반 메소드처럼 호출될 수 없으며,
    반환 자료형을 가질 수없다.
  2. 생성자는 클래스와 동일한 이름을 가져야 한다.
    (대소문자 명확히 구분)
  3. 생성자는 객체를 생성하는 과정에서 『new 생성자();』의 형태로 호출된다.
    (인스턴스 생성 시 단 한 번만의 호출)
  4. final 변수의 초기화가 가능하다..
  5. 사용자 정의 생성자가 존재하지 않을 경우
    default 생성자가 자동으로 삽입된다.

▪ 1번. 생성자코드

class numberTest
{
	int n;

	numberTest()
	{
		n = 10;
		System.out.println("사용자 정의 생성자 호출");
	}

	int getN()
	{
		return n;
	}
}
public class hyodii069
{
	public static void main(String[] args)
	{
		numberTest ob = new numberTest();

		//ob.numberTest();  에러남

		System.out.println(ob.getN());  //()붙이기!!
		ob.n = 100;
		System.out.println(ob.getN());

		numberTest ob2 = new numberTest();
		int result = ob2.getN();
		System.out.println(result);
	}
}

▪ 1번 코드 설명📝

class NumberTest
{
	int num;
	//Default 생성자
	//--컴파일 과정에서 자동으로 삽입되는(생성되는) 이 생성자는 
	//  사용자 정의 생성자가 존재하지 않을 경우에만 만들어진다.
	/*
	NumberTest()
	{
		//텅 비어있는 상태
	}
	*/
	
	// 사용자 정의 생성자
	NumberTest()
	{
		num = 10;
		System.out.println("사용자 정의 생성자 호출");
	}

	int getNum()
	{
		 return num;
	}
}

// ※ 모든 클래스에는 생성자가 존재한다.
//    (사용자 정의 생성자를 따로 만들지 않았을 경우...
//     컴파일 과정에서 default 생성자가 자동으로 삽입된다.)

public class Test069
{
	public static void main(String[] args)
	{
		//NumberTest 클래스 기반의 인스턴스 생성
		NumberTest nt1 = new NumberTest();
		//---인스턴스가 생성되는 시점에서
		//   이와 동시에 선택의 여지 없이 생성자 호출이 이루어진다.
		//                                ------
		//                               NumberTest()

		// NumberTest nt1 = new NumberTest
		//                          +
		//                      NemberTest()

		//nt1.NumberTest();
		//---==>> 에러 발생(컴파일 에러) //이미 위에서 생성자 호출됨

		System.out.println(nt1.getNum());
		//---==>> 0    -> 생성자 구성 이전
		//---==>> 10   -> 생성자 구성 이후

		nt1.num = 100;
		System.out.println(nt1.getNum());
		//---==>> 100

		NumberTest nt2 = new NumberTest();
		//---==>> 사용자 정의 생성자 호출

		int testResult = nt2.getNum(); // == 10;
		System.out.println(testResult);
		//---==>> 10

	}
}
/* 실행 결과
사용자 정의 생성자 호출
10
100
사용자 정의 생성자 호출
10
계속하려면 아무 키나 누르십시오 . . .
*/

▪ 2번. 매개변수 있는 생성자 코드

class NumberTest2
{
	int num;

	NumberTest2(int n)
	{
		num = n;
		System.out.println("생성사 호출 시 매개변수 전달 : " + n);
	}

	int getNum()
	{
		return num;
	}

}

public class hyodii070
{
	public static void main(String[] args)
	{
		//NumberTest2 ob1 = new NumberTest2(); 에러남

		NumberTest2 ob1 = new NumberTest2(10);
		NumberTest2 ob2 = new NumberTest2(5214);
		System.out.println("메소드 반환 값 : " + ob2.getNum());
	}
}

▪ 2번 코드 설명📝

class NumberTest2
{
	int num;

	/* 생성자
	NumberTest2()
	{
		
	}
	*/

	NumberTest2(int n)  //매개변수가 있는 생성자
	{
		num = n;
		System.out.println("생성자 호출 시 매개변수 전달 : " + n);
		
	}

	int getNum()
	{
		return num;
	}
}

public class Test070
{
	public static void main(String[] args)
	{
		//NumberTest2 클래스 인스턴스 생성
		//NumberTest2 ob1 = new NumberTest2();
		//--==>> 에러 발생(컴파일 에러)  
		//       위에서 매개변수가 있는 생성자를 만들었기 때문에 생성자 만들어지지 않음
		// 사용자 정의 생성자가 존재하고 있는 상황이기 때문에
		// 『default 생성자』가 자동으로 삽입되지 않으며.
		//  사용자 정의 생성자는 매개변수를 갖는 형태이기 때문에
		//  위와 같은 매개변수 없는 생성자 호출시 문제가 발생하는 것이다.

		NumberTest2 ob1 = new NumberTest2(10);
		//--==>> 생성자 호출 시 매개변수 전달 : 10

		System.out.println("메소드 반환 값 : " + ob1.getNum());
		//--==>> 메소드 반환 값 : 10

		NumberTest2 ob2 = new NumberTest2(5214);
		//--==>> 생성자 호출 시 매개변수 전달 : 5214

		System.out.println("메소드 반환 값  :  " + ob2.getNum());
		//--==>> 메소드 반환 값 : 5214

	}
}
/*
생성자 호출 시 매개변수 전달 : 10
메소드 반환 값 : 10
생성자 호출 시 매개변수 전달 : 5214
메소드 반환 값  :  5214
계속하려면 아무 키나 누르십시오 . . .
*/

◼ this

▪ 1번 this 코드

public class hyodii071
{
	int x;
	
	hyodii071()
	{
		this(1000);
		x=10;
		System.out.println("인자가 없는 생성자");
		System.out.println("Test071이 갖고있는 x : "+x);
	}
	hyodii071(int x)
	{
		this.x = x;
		System.out.println("인자가 하나인 생성자");
		System.out.println("Test071이 갖고있는 x : "+x);
	}

	public static void main(String[] args)
	{
		hyodii071 ob1 = new hyodii071();
		hyodii071 ob2 = new hyodii071(100);

		System.out.println();
		System.out.println("main에서 ob1.x : " + ob1.x);
		System.out.println("main에서 ob2.x : " + ob2.x);

	}
}

▪ 1번 this 코드 설명📝

public class Test071
{
	int x;

	// ※ 생성자의 이름은 항상 예외없이 클래스의 이름과 동일해야 하며
	//    필요할 경우 인수를 받아들이는 것도 가능하고,
	//    같은 이름의 메소드를 정의하는 중복정의가 가능하지만
	//    리턴값(반환값)은 가질 수 없다.

	// ※ 생성자는 다른 일반 메소드처럼 호출될 수 없고,
	//    new 연산자를 이용하여 객체를 생성하기 위해 호출되며,
	//    각 클래스의 인스턴스인 객체를 생성한 후에
	//    생성된 객체의 멤버를 초기화시키는 작업을 수행한다.




	Test071()
	{
		
		// ※ 생성자 내부에서 다른 생성자를 호출하는 것은 가능하다.
		//    하지만, 생성자 내부에서 가장 먼저 실행되어야 한다.
		
		// 생성자 호출
		this(1000);
		//Test071(1000);	//  생성자에서 또다른 생성자를 호출하는 것이 가능하다! 단, 가장 먼저 실행해야함
		
		x = 10;

		System.out.println("인자가 없는 생성자");

		//System.out.println("Test071이 갖고있는 x : "+ this.x);
		System.out.println("Test071이 갖고있는 x : "+ x); //x가 하나밖에 없기때문에 생략가능
	}

	Test071(int x)
	{
		//Test071();	//  생성자에서 또다른 생성자를 호출하는 것이 가능하다!  단, 가장 먼저 실행해야함

		//Test071.x = x;
		this.x = x;
		//this 키워드가 있으면 이걸 품고있는 클래스를 찾아라! Test071이구나! 그러면 Test071.x라고 이해!
		System.out.println("인자가 하나인 생성자");

		//System.out.println("Test071이 갖고있는 x : "+ this.x);
		System.out.println("Test071이 갖고있는 x : "+ x); //x가 하나밖에 없기때문에 생략가능

		
	}

	public static void main(String[] args)
	{
		//Test071 클래스 기반 인스턴스 생성
		Test071 ob1 = new Test071();
		Test071 ob2 = new Test071(100);
		//--==>>
		/*
		인자가 없는 생성자
		Test071이 갖고있는 x : 10
		인자가 하나인 생성자
		Test071이 갖고있는 x : 100
		계속하려면 아무 키나 누르십시오 . . .
		*/

		//System.out.println("ob2.x : " + ob2.x);
		//--==> ob2.x : 100

		System.out.println();
		System.out.println("main 에서 ob1.x : " + ob1.x);
		System.out.println("main 에서 ob2.x : " + ob2.x);

		
	}

}
/* 실행 결과

인자가 하나인 생성자
Test071이 갖고있는 x : 1000
인자가 없는 생성자
Test071이 갖고있는 x : 10
인자가 하나인 생성자
Test071이 갖고있는 x : 100

main 에서 ob1.x : 10
main 에서 ob2.x : 100
계속하려면 아무 키나 누르십시오 . . .
*/

▪ 2번 this 코드


/*
int val1, val2 를 int x, y로 바꾸기
*/


public class hyodii072
{
	//int val1;
	//double val2;
	int x;
	double y;

	hyodii072()
	{
		//val1=0
		//val2=0;
		x=0;
		y=0;
		System.out.println("매개변수 없는 생성자...");
	}

	hyodii072(int x)
	{
		//val1=x;
		//val2=0;
		this.x=x;
		y=0;
		System.out.println("int형 데이터를 매개변수로 받는 생성자...");
	}
	
	hyodii072(double y)
	{
		//val1=0;
		//val2=y;
		x=0;
		this.y=y;
		System.out.println("double형 데이터 매개변수로 받는 생성자...");
	}

	hyodii072(int x, double y)
	{
		//val1 = x;
		//val2 = y;
		this.x=x;
		this.y=y;
		System.out.println("int형 변수와 double형 변수를 매개변수로 받는 생성자...");

	}

	public static void main(String[] args)
	{
		hyodii072 ob1 = new hyodii072();
		hyodii072 ob2 = new hyodii072(4);
		hyodii072 ob3 = new hyodii072(0.0);
		hyodii072 ob4 = new hyodii072(4,0.0);

		System.out.println(ob1.x + ", " + ob1.y);
		System.out.println(ob2.x + ", " + ob2.y);
		System.out.println(ob3.x + ", " + ob3.y);
		System.out.println(ob4.x + ", " + ob4.y);

	}
	
}
/*
매개변수 없는 생성자...
int형 데이터를 매개변수로 받는 생성자...
double형 데이터 매개변수로 받는 생성자...
int형 변수와 double형 변수를 매개변수로 받는 생성자...
0, 0.0
4, 0.0
0, 0.0
4, 0.0
계속하려면 아무 키나 누르십시오 . . .
*/

◼ 초기화 블럭(Initialized Block)

▪ 초기화 블럭

public class hyodii073
{
	int n;
	int m;

	hyodii073()
	{
		n = 1000;
		m = 2000;
		System.out.println("생성자 실행...");
	}

	{
		n = 100;
		m = 200;
		System.out.println("초기화 블럭 실행...");
	}

	hyodii073(int n, int m)
	{
		this.n = n;
		this.m = m;
		System.out.println("매개변수가 있는 생성자 실행...");
	}
	
	void write()
	{
		System.out.println("n:" + n + ", m:" + m);
	}
	public static void main(String[] args)
	{
		hyodii073 ob1 = new hyodii073();
		ob1.write();

		hyodii073 ob2 = new hyodii073(1234,5678);
		ob2.write();
	}
}

▪ 초기화 블럭 코드 설명📝


public class Test073
{
	//int n=100;
	//int m=200;
	// 이건 초기화를 해주는 거여서 가능했고

	int n;
	int m;

	//n=100;
	//m=200;
	//--==>> 에러남!
	//이건 = 연산을 해준거여서 에러남 클래스에서는 연산을 할 수 없음!!
	
	// 생성자(Constructor)
	Test073()
	{
		n=1000;
		m=2000;
		System.out.println("생성자 실행...");
	}

	// 초기화 블럭(Initialized Block)
	//블레이스로 감싸면 에러 안남! 직접적으로 연산하는 거 안되니까! 이렇게하면됨
	{
		n=100;
		m=200;
		System.out.println("초기화 블럭 실행...");
	}
	
	
	//생성자(Constructor)
	Test073(int n, int m)
	{
		this.n=n;
		this.m=m;
		System.out.println("매개변수가 있는 생성자 실행...");
	}
	
	//출력메소드 정의
	void write()
	{
		System.out.println("n:" + n+ ", m:"+m);
	}
	
	public static void main(String[] args)
	{
		Test073 ob1 = new Test073();
		//인스턴스만 생성했는데 초기화 블럭도 실행
		// 우선순위는 생성자가 더 높음
		ob1.write();
		//--==>> n:1000,m:2000

		Test073 ob2 = new Test073(1234,5678);
		//--==>> 초기화 블럭 실행
		//--==>> 매개변수가 있는 생성자 실행...

		ob2.write();
		//--==>> n:1234, m:5678
	}
}
/*
초기화 블럭 실행...
생성자 실행...
n:1000, m:2000
초기화 블럭 실행...
매개변수가 있는 생성자 실행...
n:1234, m:5678
계속하려면 아무 키나 누르십시오 . . .

*/

◼ 배열

  • 배열이 어렵게 느껴지면 반복문을 더 공부하자!

▪ 배열의 개요

1. 배열이란 크기와 성격이 같은 일련의 원소들이 모여
   공동의 집합 구조를 갖는 자료의 집합체를 의미하는 것으로
   『동질적인 성격을 가진 자료들』에 대해
   개별적으로 자료형(Data Type)을 부여하지 않고
   하나의 이름을 가지고 일괄적으로 처리할 목적으로 사용된다.

2. 자바에서 배열은 다음과 같은 순서에 의해 사용된다.
   배열 선언 -> 배열에 메모리 할당 -> 배열 요소의 사용

▪ 형식 및 구조

/*
자료형[] 변수명;
변수명 = new 자료형[요소크기];
변수명[인덱스] = 값;

int[] arr;             //배열 선언
arr = new int[3];      //메모리 할당   int[3]은 3개 할당        

int[] arr = new int[3]; // 위에 두 줄을 합쳐서 쓸수있음

arr[0] = 10;          //배열 사용     arr[0]은 0번방 사용하겠다
arr[1] = 20;
arr[2] = 30;g

*/

▪ 1번 배열 코드

public class hyodii073
{
	int n;
	int m;

	hyodii073()
	{
		n = 1000;
		m = 2000;
		System.out.println("생성자 실행...");
	}

	{
		n = 100;
		m = 200;
		System.out.println("초기화 블럭 실행...");
	}

	hyodii073(int n, int m)
	{
		this.n = n;
		this.m = m;
		System.out.println("매개변수가 있는 생성자 실행...");
	}
	
	void write()
	{
		System.out.println("n:" + n + ", m:" + m);
	}
	public static void main(String[] args)
	{
		hyodii073 ob1 = new hyodii073();
		ob1.write();

		hyodii073 ob2 = new hyodii073(1234,5678);
		ob2.write();
	}
}

▪ 1번 배열 코드 설명📝

public class Test074
{
	public static void main(String[] args)
	{
		//배열 선언
		int[] arr;          //int arr[]; 이렇게 쓰기도 함

		//메모리 할당
		arr = new int[10];  //방 10개 주세요~  4byte메모리 10개니까 40byte
		
		//배열은 다음과 같이 선언과 동시에
		//메모리 할당 및 초기화가 가능하다.
		int[] arr2 = new int[10];            // 아직 이안에 뭘담을지는 모르겠지만 10방 배정(기본적으로 0이 채워짐)
											 // int[] arr2 = {0,0,0,0,0,0,0,0,0,0};
		int[] arr3 = {1,2,3,4,5,6,7,8,9,0};  // 뭘담을지 10개 가지고 왔음
		int arr4[] = {1,2,3,4,5,6,7,8,9,0};

		//배열 요소 사용(접근)
		arr[0] = 1;
		arr[1] = 2;
		arr[2] = 3;

		// ※ 값을 할당하지 않은 나머지 배열 공간은
		//    자동으로 초기화 된다. -> (int형 배열)

		int num = 10;
		System.out.println("num : " + num);
		//--==>> num : 10

		System.out.println("arr : " + arr);
		//--==>> arr : [I@15db9742
		// -- 배열을 출력하기 위해 배열변수를 일반 변수처럼 사용하여
		//    출력하는 구문으로 작성하게 되면
		//    배열의 각 방에 들어있는 데이터가 출력되는 것이 아니라
		//    우리가 알아볼 수 없는 코드가 출력된다.
		//    그리고, 이 코드는 메모리의 주소값이 아니다.
		//    (자바는 메모리 주소값에 사용자가 직접 접근하는 것을 허용하지 않기 때문에....)


		System.out.println("arr[0] : " + arr[0]);
		//--==>> arr[0] : 1
		System.out.println("arr[1] : " + arr[1]);
		//--==>> arr[1] : 2
		System.out.println("arr[2] : " + arr[2]);
		//--==>> arr[2] : 3

		System.out.println(" "+arr[0]+" "+arr[1]+" "+arr[2]+ " "+arr[3]+" "+arr[4]+" "+arr[5]+" " + arr[6]+" "+arr[7]+" "+arr[8]+" "+arr[9]);
		//--==>> 1 2 3 0 0 0 0 0 0 0

		//반복문을 화룡ㅇ하여 배열에 담긴 데이터 전체 출력
		for(int i=0;i<10;i++)   //i -> 0 1 2 3 4 5 6 7 8 9
		{
			//테스트
			//System.out.println("i : "+i);

			//테스트
			//System.out.printf("%2d",arr[i]);

			//테스트
			System.out.printf("arr 배열의 %d번째 방 : %2d\n",i,arr[i]);
			/* //--==>>
			arr 배열의 0번째 방 :  1
			arr 배열의 1번째 방 :  2
			arr 배열의 2번째 방 :  3
			arr 배열의 3번째 방 :  0
			arr 배열의 4번째 방 :  0
			arr 배열의 5번째 방 :  0
			arr 배열의 6번째 방 :  0
			arr 배열의 7번째 방 :  0
			arr 배열의 8번째 방 :  0
			arr 배열의 9번째 방 :  0
			*/

		}
		System.out.println();

	}
}
/*
num : 10
arr : [I@15db9742
arr[0] : 1
arr[1] : 2
arr[2] : 3
 1 2 3 0 0 0 0 0 0 0
arr 배열의 0번째 방 :  1
arr 배열의 1번째 방 :  2
arr 배열의 2번째 방 :  3
arr 배열의 3번째 방 :  0
arr 배열의 4번째 방 :  0
arr 배열의 5번째 방 :  0
arr 배열의 6번째 방 :  0
arr 배열의 7번째 방 :  0
arr 배열의 8번째 방 :  0
arr 배열의 9번째 방 :  0

계속하려면 아무 키나 누르십시오 . . .
*/

▪ 2번 배열 코드

public class hyodii074
{
	public static void main(String[] args)
	{
		int[] arr;
		arr = new int[10];
		//int[] arr = new int[10];

		int[] arr2 = new int[10];

		int[] arr3 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
		int[] arr4 = {1,2,3,4,5,6,7,8,9,0};

		arr[0] = 1;
		arr[1] = 2;
		arr[2] = 3;

		int num = 10;
		System.out.println("num : " + num);

		System.out.println("arr : " + arr);

		System.out.println("arr[0] : " + arr[0]);
		System.out.println("arr[1] : " + arr[1]);
		System.out.println("arr[2] : " + arr[2]);

		System.out.println(arr[0]+" "+arr[1]+" "+arr2[2]+" "+arr[3]+" "
							+arr[4]+" "+arr[5]+" "+arr[6]+" "+arr[7]+" "+arr[8]+" "+arr[9]);
		for (int i=0; i<10;i++)
		{
			System.out.println("arr 배열의 "+ i +"번째 방 : " + arr[i]);

		}


	}
}

▪ 2번 배열 코드 설명📝

public class Test074
{
	public static void main(String[] args)
	{
		//배열 선언
		int[] arr;          //int arr[]; 이렇게 쓰기도 함

		//메모리 할당
		arr = new int[10];  //방 10개 주세요~  4byte메모리 10개니까 40byte
		
		//배열은 다음과 같이 선언과 동시에
		//메모리 할당 및 초기화가 가능하다.
		int[] arr2 = new int[10];            // 아직 이안에 뭘담을지는 모르겠지만 10방 배정(기본적으로 0이 채워짐)
											 // int[] arr2 = {0,0,0,0,0,0,0,0,0,0};
		int[] arr3 = {1,2,3,4,5,6,7,8,9,0};  // 뭘담을지 10개 가지고 왔음
		int arr4[] = {1,2,3,4,5,6,7,8,9,0};

		//배열 요소 사용(접근)
		arr[0] = 1;
		arr[1] = 2;
		arr[2] = 3;

		// ※ 값을 할당하지 않은 나머지 배열 공간은
		//    자동으로 초기화 된다. -> (int형 배열)

		int num = 10;
		System.out.println("num : " + num);
		//--==>> num : 10

		System.out.println("arr : " + arr);
		//--==>> arr : [I@15db9742
		// -- 배열을 출력하기 위해 배열변수를 일반 변수처럼 사용하여
		//    출력하는 구문으로 작성하게 되면
		//    배열의 각 방에 들어있는 데이터가 출력되는 것이 아니라
		//    우리가 알아볼 수 없는 코드가 출력된다.
		//    그리고, 이 코드는 메모리의 주소값이 아니다.
		//    (자바는 메모리 주소값에 사용자가 직접 접근하는 것을 허용하지 않기 때문에....)


		System.out.println("arr[0] : " + arr[0]);
		//--==>> arr[0] : 1
		System.out.println("arr[1] : " + arr[1]);
		//--==>> arr[1] : 2
		System.out.println("arr[2] : " + arr[2]);
		//--==>> arr[2] : 3

		System.out.println(" "+arr[0]+" "+arr[1]+" "+arr[2]+ " "+arr[3]+" "+arr[4]+" "+arr[5]+" " + arr[6]+" "+arr[7]+" "+arr[8]+" "+arr[9]);
		//--==>> 1 2 3 0 0 0 0 0 0 0

		//반복문을 화룡ㅇ하여 배열에 담긴 데이터 전체 출력
		for(int i=0;i<10;i++)   //i -> 0 1 2 3 4 5 6 7 8 9
		{
			//테스트
			//System.out.println("i : "+i);

			//테스트
			//System.out.printf("%2d",arr[i]);

			//테스트
			System.out.printf("arr 배열의 %d번째 방 : %2d\n",i,arr[i]);
			/* //--==>>
			arr 배열의 0번째 방 :  1
			arr 배열의 1번째 방 :  2
			arr 배열의 2번째 방 :  3
			arr 배열의 3번째 방 :  0
			arr 배열의 4번째 방 :  0
			arr 배열의 5번째 방 :  0
			arr 배열의 6번째 방 :  0
			arr 배열의 7번째 방 :  0
			arr 배열의 8번째 방 :  0
			arr 배열의 9번째 방 :  0
			*/

		}
		System.out.println();

	}
}
/*
num : 10
arr : [I@15db9742
arr[0] : 1
arr[1] : 2
arr[2] : 3
 1 2 3 0 0 0 0 0 0 0
arr 배열의 0번째 방 :  1
arr 배열의 1번째 방 :  2
arr 배열의 2번째 방 :  3
arr 배열의 3번째 방 :  0
arr 배열의 4번째 방 :  0
arr 배열의 5번째 방 :  0
arr 배열의 6번째 방 :  0
arr 배열의 7번째 방 :  0
arr 배열의 8번째 방 :  0
arr 배열의 9번째 방 :  0

계속하려면 아무 키나 누르십시오 . . .
*/

▪ 배열의 길이(array.length) 코드

/*
임의의 정수들이 들어있는 배열의 숫자 데이터들 중
짝수인 요소만 골라서 출력하고, 3의 배수인 요소만 골라서 출력하는
프로그램을 구현하다.

배열을 구성하는 임의의 정수 = 4 7 9 1 3 2 5 6 8

실행 예)
배열 요소 전체 출력
4 7 9 1 3 2 5 6 8
짝수 선택적 출력
4 2 6 8
3의 배수 선택적 출력
9 3 6
계속하려면 아무 키나 누르세...
*/
public class hyodii075
{
	public static void main(String[] args)
	{
		int[]arr = {4,7,9,1,3,2,5,6,8};
				
		System.out.println("배열 요소 전체 출력");
		for (int i=0; i<arr.length; i++)
			System.out.print(arr[i]+" ");
		System.out.println();
		
		System.out.println();
		System.out.println("짝수 선택적 출력");
		for (int i=0; i<arr.length; i++)
			if(arr[i]%2==0)
				System.out.print(arr[i]+" ");
			System.out.println();
			
			
		System.out.println("3의 배수 선택적 출력");
		for (int i=0; i<arr.length; i++)
			if(arr[i]%3!=0)
				System.out.print(arr[i]+" ");
			System.out.println();
		
	}
}

▪ 배열의 길이(array.length) 코드 설명📝

public class Test075
{
	public static void main(String[] args)
	{
		/* 방법1
		int[] arr = new int[9];
		arr[0] = 4;
		arr[1] = 7;
		arr[2] = 9;
		arr[3] = 1;
		arr[4] = 3;
		arr[5] = 2;
		arr[6] = 5;
		arr[7] = 6;
		arr[8] = 8;
		*/

		// 방법2
		int[] arr = {4,7,9,1,3,2,5,6,8};

		//System.out.print(arr);
		//--==>> [I@15db9742

		// ※ 일반적인 변수에 담긴 내용을 출력하는 형식(방법)으로는
		//	  배열에 담긴 데이터들을 출력할 수 없다.

		/*
		System.out.println("배열 요소 전체 출력");
		for(int i=0;i<9;i++)  //범위 9까지!!!!-----check~!!
		{

			System.out.print(arr[i]+" ");
		}
		
		System.out.println();
		//테스트
		int[] arr2 = {4,7,5,3,6,9,8,4,2,1,5,3,2,1,6,5,4,8,7,9,5,4,3,2,1,6,5,4,5,3,2,1,6,5,7,9,5,4,3,2,1,3,5,1,3,5,7,5,7,9,5,4,5};
		System.out.println(arr2[52]+" "); //이거 52개인지 알려면 다 세봐야하는데 편하려고 이렇게 썻는데 더 불편해!
		

		System.out.println("arr.length : " + arr.length);  //그래서 길이를 구하는 법 알려줄께! .length
		//--==>>arr.length : 9
		System.out.println("arr.length : " + arr2.length);
		//--==>>arr.length : 53

		//--==>> ※ 배열 arr의 길이(방의 갯수) 확인 : arr.length
		*/
		
		System.out.println("배열 요소 전체 출력");
		for (int i=0; i<arr.length; i++)
		
			System.out.print(arr[i]+" ");
		System.out.println();
		/* //--==>>
		배열 요소 전체 출력
		4 7 9 1 3 2 5 6 8
		*/

		
		System.out.println("짝수 선택적 출력");
		for(int i=0; i<arr.length; i++) //for(int i=0;i<9;i++)
			if(arr[i]%2==0)  //i%2라면 이 아니라 arr[i]%2로 해줘야함!!! 
				System.out.print(arr[i]+" ");
		/* //--==>>
		짝수 선택적 출력
		4 2 6 8
		*/
		
		
		System.out.println();

		System.out.println("3의 배수 선택적 출력");
		for(int i=0;i<9;i++)
			if(arr[i]%3==0)
				System.out.print(arr[i]+" ");
		System.out.println();
		/* //--==>>
		홀수 선택적 출력
		9 3 6
		*/
	
	}
}
/*
배열 요소 전체 출력
4 7 9 1 3 2 5 6 8
짝수 선택적 출력
4 2 6 8
홀수 선택적 출력
9 3 6
계속하려면 아무 키나 누르십시오 . . .
*/

▪ 알파벳 배열출력하기 코드 설명📝

/* =====================
■■■ 배열 ■■■
- 배열의 선언과 초기화
- 배열의 기본적 활용
=========================*/

/*
『char』자료형의 배열을 만들어
그 배열에 각 방에 알파벳 대문자를 채우고
채워진 그 배열의 전체 요소를 출력하는 프로그램을 구현한다.
단, 채우는 구문과 출력하는 구문을 따로 분리하여 처리한다.

실행 예)
A B C D E F G ... W X Y Z
계속하려면 아무 키나 누르세요...
*/


public class Test076
{
	public static void main(String[] argss)
	{
		/*
		//영문 알파벳 대문자 배열 구성
		// 방법 1
		char[] arr1;
		arr1 = new int[26];
		arr1[0] = 'A';
		arr1[1] = 'B';
		arr1[2] = 'C';
		arr1[3] = 'D';
		arr1[4] = 'E';
		arr1[5] = 'F';
		arr1[6] = 'G';
		arr1[7] = 'H';
		arr1[8] = 'I';
		arr1[9] = 'J';
		arr1[10] = 'K';
		arr1[11] = 'L';
		arr1[12] = 'M';
		arr1[13] = 'N';
		arr1[14] = 'O';
		arr1[15] = 'P';
		arr1[16] = 'Q';
		arr1[17] = 'R';
		arr1[18] = 'S';
		arr1[19] = 'T';
		arr1[20] = 'U';
		arr1[21] = 'V';
		arr1[22] = 'W';
		arr1[23] = 'X';
		arr1[24] = 'Y';
		arr1[25] = 'Z';
		*/
	
		// 방법 2
		//char[] arr2 = {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z};
		//char[] arr2 = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
		
		
		
		// 방법 3  대문자 총갯수 26
		char[] arr = new char[26];

		
		
		for (int i=0, ch=65; i<arr.length ; i++, ch++) //for에는 여러개 가능 조건식은 2개이상은 논리연산 ----check~!! 
		{
			arr[i] = (char) ch;
				   //(char)(i+65); //arr 배열이 char형이니까 ----check~!!
				   //(char)i+65; 는 에러남
		}

		for (int i=0; i<arr.length;i++ )
		{
			System.out.print(arr[i] + " ");
		}
		System.out.println();

		
	}
}
/*
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
계속하려면 아무 키나 누르십시오 . . .
*/

▪ 이름 전화번호 입력받고 출력하기 코드 설명📝

/*
사용자로부터 처음 입력받은 인원 수 만큼의
학생 이름과 전화번호를 입력받고
입력받은 내용을 전체 출력하는 프로그램을 구현한다.
단, 배열을 활용하여 처리할 수 있도록 한다.
이름과 전화번호 배열 따로 처리

실행 예)
입력 처리할 학생 수 입력(명, 1~10) : 24
입력 처리할 학생 수 입력(명, 1~10) : 3
이름 전화번호 입력[1](공백 구분) : 정효진 010-1111-1111
이름 전화번호 입력[2](공백 구분) : 황선우 010-2222-2222
이름 전화번호 입력[3](공백 구분) : 김연경 010-3333-3333

----------------------
전체 학생 수 : 3명
----------------------
   이름     전화번호
  정효진 010-1111-1111
  황선우 010-2222-2222
  김연경 010-3333-3333
----------------------
계속하려면 아무 키나 누르세요...
*/
import java.util.Scanner;

public class Test077
{
	public static void main(String[] args)
	{
		int n;
		//Scanner 인스턴스 생성
		Scanner sc = new Scanner(System.in);
		

		//String[] name = new String[10];
		//String[] number = new String[10];

		//사용자가 입력하는 학생 수를 담아둘 변수
		do
		{
			System.out.print("입력 처리할 학생 수 입력(명, 1~10) : ");
			n = sc.nextInt();
		}
		while (n<1 || n>10);


		//배열 생성(이름 배열, 전화번호 배열)
		// - 사용자로부터 입력받은 인원수 만큼의 배열방 구성

		// 이름 저장 배열
		String[] name = new String[n];
		// 전화번호 저장 배열 - 주민번호, 번호, 학번 등 int가 아니라 String 으로 만들어야함 ---check~!!
		String[] number = new String[n];
		//String[] number = new String[name.length]; 와 동일한 구문!!---check~!!

		for (int i=0; i<n; i++) //i<n 은 i<name.length  또는 i<number.length  가능
		{
			
			System.out.printf("이름 전화번호 입력[%d](공백 구분) : ",(i+1));  // (i+1) ---check~!!
			name[i] = sc.next();
			number[i] = sc.next();
		}
		System.out.println();

		//최종 결과 출력
		System.out.println("----------------------");
		System.out.printf("전체 학생 수 : %d명\n",n);
		System.out.println("----------------------");

		System.out.println("   이름     전화번호");

		for (int i=0; i<n; i++)
		
			System.out.printf("  %4s %14s\n", name[i], number[i]);
		
		System.out.println("----------------------");

	}
}
/*
입력 처리할 학생 수 입력(명, 1~10) : -1
입력 처리할 학생 수 입력(명, 1~10) : 456
입력 처리할 학생 수 입력(명, 1~10) : 23
입력 처리할 학생 수 입력(명, 1~10) : 3
이름 전화번호 입력[1](공백 구분) : 정효진 010-8989-8989
이름 전화번호 입력[2](공백 구분) : 황선우 010-8958-8565
이름 전화번호 입력[3](공백 구분) : 김연경 010-7545-8565

----------------------
전체 학생 수 : 3명
----------------------
   이름    전화번호
 정효진 010-8989-8989
 황선우 010-8958-8565
 김연경 010-7545-8565
----------------------
계속하려면 아무 키나 누르십시오 . . .

*/

▪ 입력받은 수 중에서 가장 큰 수 출력 코드

import java.util.Scanner;

public class hyodii078
{
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		int n, temp=0;
		System.out.print("입력할 데이터의 갯수 : ");
		n = sc.nextInt();
		
		int[] arr = new int[n];
		System.out.print("데이터 입력(공백 구분) : ");
		for (int i=0; i<arr.length; i++)
		{
			arr[i] = sc.nextInt();
			System.out.print(arr[i] + " ");
		}

		/* 방법1
		for (int i=0; i<n-1; i++)
		{
			if(arr[i]>temp)
				temp = arr[i];
		}
		System.out.printf("\n>> 가장 큰 수 -> %d\n",temp);
		*/

		//방법2
		for (int i=0; i<n-1; i++)
		{
			if (arr[i]>arr[i+1])
			{
				arr[i] = arr[i]^arr[i+1];
				arr[i+1] = arr[i+1]^arr[i];
				arr[i] = arr[i+1];
			}
		}
		System.out.printf("\n>> 가장 큰 수 -> %d\n",arr[n-1]);

	}
}

▪ 입력받은 수 중에서 전체 학생 점수의 합, 평균, 편차 출력 코드 설명📝

/* ○ 과제
사용자로부터 학생 수를 입력받고
그만큼의 점수(정수 형태)를 입력받아
전체 학생 점수의 합, 평균, 편차를 구하여
결과를 출력하는 프로그램을 구현한다.
단, 배열을 활용하여 처리할 수 있도록 한다.

실행 예)
학생 수 입력 : 5
1번 학생의 점수 입력 : 90
2번 학생의 점수 입력 : 82
3번 학생의 점수 입력 : 64
4번 학생의 점수 입력 : 36
5번 학생의 점수 입력 : 98

>> 합 : 370
>> 평균 : 74.0
>> 편차
90 : 16.0
82 : 8.0
64 : -10.0
36 : -38.0
98 : 24.0
계속하려면 아무 키나 누르세요...
*/

import java.util.Scanner;

public class Test079
{
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		int n;      //학생수
		int sum=0;  //합
		double avg; //평균
		

		//학생수 입력받기
		System.out.print("학생 수 입력 :");
		n = sc.nextInt();
		int[] score = new int[n];

		//학생수만큼 점수 입력하기
		for (int i=0; i<score.length;i++ )
		{
			System.out.printf("%d번 학생의 점수 입력: ", i+1);
			score[i] = sc.nextInt();
			sum += score[i];
		}
		System.out.println();
		
		//입력된 수만큼 평균구하기
		avg = sum/score.length;
		
		//출력하기
		System.out.printf(">> 합 : %d\n",sum);
		System.out.printf(">> 평균 : %.2f\n",avg);
		System.out.println(">> 편차");

		//점수별로 편차 나오게 하기
		for (int i=0; i<score.length; i++)
		{
			System.out.printf("%d : %.2f\n",score[i],score[i]-avg);
		}
		
	}
}
/*
학생 수 입력 :7
1번 학생의 점수 입력: 99
2번 학생의 점수 입력: 88
3번 학생의 점수 입력: 77
4번 학생의 점수 입력: 66
5번 학생의 점수 입력: 55
6번 학생의 점수 입력: 44
7번 학생의 점수 입력: 33

>> 합 : 462
>> 평균 : 66.00
>> 편차
99 : 33.00
88 : 22.00
77 : 11.00
66 : 0.00
55 : -11.00
44 : -22.00
33 : -33.00
계속하려면 아무 키나 누르십시오 . . .
*/

◼ 2차원 배열

▪ 2차원 배열 출력 코드 설명📝


public class Test080
{
	public static void main(String[] args)
	{
		// 배열의 배열 선언과 초기화
		// 방법 1
		//int[] arr1 = new int[3];
		int[][] arr1 = new int[3][3]; //3층에 사무실 3개

		//arr1[0] = 1;
		arr1[0][0]=1;
		arr1[0][1]=2;
		arr1[0][2]=3;
		arr1[1][0]=4;
		arr1[1][1]=5;
		arr1[1][2]=6;
		arr1[2][0]=7;
		arr1[2][1]=8;
		arr1[2][2]=9;

		// 방법 2
		//int[] arr2 = {1,2,3};
		int[][] arr2={{1,2,3},{4,5,6},{7,8,9}};

		//방법 3
		int[][] arr3 = new int[3][3];                 //arr[0].length  arr[1].length   arr[2].length
		int n=1;
		for (int i=0; i<arr3.length; i++)             // 웅~~~ 0    1    2       -> 층
		{
			for (int j=0;j<arr3[i].length ; j++)    //쑝쑝쑝 012   012   012     -> 사무실
			{
				//테스트
				System.out.println("i: "+i+",j:"+j);
				arr3[i][j] = n;
				n++;
			}
		}
		for (int i=0;i<arr3.length ;i++ )
		{
			for (int j=0; j<arr3[i].length;j++ )
			{
				System.out.printf("%2d",arr3[i][j]);

			}
			System.out.println();

		}

	}
}

/*
i: 0,j:0
i: 0,j:1
i: 0,j:2
i: 1,j:0
i: 1,j:1
i: 1,j:2
i: 2,j:0
i: 2,j:1
i: 2,j:2
 1 2 3
 4 5 6
 7 8 9
계속하려면 아무 키나 누르십시오 . . .
*/
profile
개발새발

0개의 댓글

관련 채용 정보