본문 바로가기
프로그래밍/JAVA

2021년 8월 16일 - 객체 '명시적 연산자' 배열 vs Scanner 입력 객체 배열

by 철제백조 2021. 8. 16.
Q.

객체를 활용한 배열 출력

명시적 생성자
제목 메소드
출력 메소드


 

package SelfStudy;

class Info{
	
	private String name;
	private String blood;
	private String hp;
	private int age;
	
	//명시적 생성자
	//!!!명시적 생성자는 void가 없다!!!
	//!!!public + 클래스 네임과 동일!!!
	public Info(String name, String blood, String hp, int age) {
		this.name = name;
		this.blood=blood;
		this.hp=hp;
		this.age=age;
	}
	
	//재목
	public static void TITLE() {
		System.out.println("이름\t혈액형\t연락처\t\t나이");
		System.out.println("====================================");
	}
	
	//출력값에 get 앞에 붙이기
	public void getAllOut() {
		System.out.println(this.name + "\t" + this.blood + "\t" + this.hp + "\t" + "\t" + this.age );
	}
}

public class ReQuiz_2021_08_16 {
	
	public static void main(String[] args) {
		
		//객체 배열 선언
		Info info [] = new Info[2];
		
		//명시적 생성자 배열값 할당
		//!!!방법 주의
		//info [i] = new Info(인자값);
		info [0] = new Info("이승준", "A형", "1234567", 25);
		info [1] = new Info("김수환", "B형", "654321", 26);
		
		
		//제목
		Info.TITLE();
		//출력
		for (Info info2 : info) {
			//명시적 생성자 for each 출력 방법
			info2.getAllOut();
		}
	}

}

 

!!! 명시적 생성자void 없이, public + 클래스 네임

!!! 배열 객체 값 설정법 - 객체 배열이므로 뒤에는 늘 new 값이 나온다.

 

※ 이미 명시적 생성자로 저장된 값이므로 get을 통해 접근

 


 

Q. ★

가족 수당: 가족수*50000(단, 4인 이상은 무조건 20만원)

시간 수당: 초과근무시간*30000(단 5시간 이상은 무조건 15만원)

실수령액: pay+가족수당+시간수당

 

package SelfStudy;

import java.util.Scanner;

class Emp{
	
	//Scanner로 각각 입력받아서 계산하기
	
	private String name;
	private int pay;
	private int famsu;	//가족수 - 1인당 5만원, 4인 이상 20만원
	private int timesu;	//초과시간 - 1시간 3마누언, 5시간 이상 15만원

	//getter, setter
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPay() {
		return pay;
	}
	public void setPay(int pay) {
		this.pay = pay;
	}
	public int getFamsu() {
		return famsu;
	}
	public void setFamsu(int famsu) {
		this.famsu = famsu;
	}
	public int getTimesu() {
		return timesu;
	}
	public void setTimesu(int timesu) {
		this.timesu = timesu;
	}
	
	//제목
	public static void TITLE () {
		System.out.println("***우리회사 직원 급여현황***");
		System.out.println("사원명\t급여\t가족수\t초과시간\t가족수당\t시간외수당\t총급여");
	}
	
	//가족수당
	public int payFamilyMem() {
		int payFamilyMem = famsu * 50000;
		if (famsu >= 5) {
			payFamilyMem = 200000;
		}
		return payFamilyMem;
	}
	
	//초과근무 수당
	public int payOverTime() {
		int payOverTime = timesu * 30000;
		if (timesu >= 5) {
			payOverTime = 150000;
		}
		return payOverTime;
	}
	
	//총급여
	//같은 클래스라서 this가 생략이 되었음
	public int allPay() {
		int allPay = pay + payFamilyMem() + payOverTime();
		return allPay;
	}
	
	//총출력
	//void 추가
	public void lastPay (Emp e) {
		System.out.println(name + "\t" + pay+ "\t" + famsu + "\t" + timesu + "\t" + payFamilyMem() + "\t" + payOverTime() + "\t" + allPay());
	}

	
}

public class ReQuiz_2021_08_15 {

	public static void main(String[] args) {
		
		//변수 설정
		Scanner scanner = new Scanner(System.in);
		int inwon;
		String name;
		int pay;
		int famsu;
		int timesu; 
		
		//배열 선언
		//!!! 객체 배열 생성 !!!
		Emp arr [];
		
		System.out.println("사원수를 입력하세요.");
		inwon = Integer.parseInt(scanner.nextLine());
		//배열 형식 기억하기
		arr = new Emp[inwon]; 
		
		//입력(수정) - getter
		for (int i = 0; i < arr.length; i++) {
			
			//!!!
			//배열을 객체 인자값으로 입력받겠다고 선언
			arr [i] = new Emp();
			
			System.out.println("이름을 입력하세요.");
			name = scanner.nextLine();
			
			System.out.println("수입을 입력하세요.");
			pay = Integer.parseInt(scanner.nextLine());
			
			System.out.println("가족수를 입력하세요.");
			famsu = Integer.parseInt(scanner.nextLine());
			
			System.out.println("초과근무 시간을 입력하세요.");
			timesu = Integer.parseInt(scanner.nextLine());
			
			//Scanner 입력값 대입
			//!!! 배열에 값 대입하는 형식 기억 !!!
			//객체 형식 배열이므로, get 메소드 대입하는 . 방식으로
			//입력한 값 전달을 위해 인자값이 존재
			arr [i].setName(name);
			arr [i].setPay(pay);
			arr [i].setFamsu(famsu);
			arr [i].setTimesu(timesu);

		}
		
		//제목 출력
		Emp.TITLE();
		//각 배열값 출력
		for (Emp e : arr) {
			e.lastPay(e);
		}
	}
}

 

 

Emp arr [ ];

!!! 배열 객체 생성 (클래스명으로)

 

 

arr [i] = new Emp();

!!! 배열을 객체 인자값으로 입력받겠다고 선언

 

arr [i].setName(name);
arr [i].setPay(pay);

!!! Scanner 입력값 대입
!!! 배열에 값 대입하는 형식 기억 !!!
!!! 객체 형식 배열이므로, set 메소드 입력하는 방식 . 방식으로

객체이름.setter메소드( Scanner 인자값 )

arr [i].setPay(pay);


!!! 입력한 값 전달을 위해 setter 메소드에 인자값이 존재

댓글