오늘보다 더 나은 내일의 나에게_

Java 객체 배열 본문

JAVA

Java 객체 배열

chan_96 2022. 1. 13. 06:17
728x90

객체 배열

자료 값을 담는 기본 배열과는 다르게 서로 다른 객체(타입은 동일)의 참조값을 연속된 공간에 저장하기 위한 자료구조

public class Main{
	public static void main (String[] args){
    	Person[] p; // 배열에 대한 레퍼런스 변수
	p = new Person[2]; // 레퍼런스 배열 생성 
    
	p[0] = new Person();
	p[1] = new Person();
    
	//객체배열사용    
	p[0].name="홍길동";
	p[0].age=25;
    
	p[1].name="김헌찬";
	p[1].age=27;
    }
}
public class Person{
	String name;
	int age;
}

예제 Student 클래스 작성


Student클래스의 필드
접근 지정자 타입 변수명 설명
private String name 학생 이름
private int ban
private int num 번호

더보기
package Student;

public class Student {
	
	//속성(필드)
	private String name;
	private int ban;
	private int num;
	
	//기능(메서드) : getter, setter
	public String getName() {
		return name;
	}
	public void setName(String name) {
		// this : 현재 생성된 인스턴스
		// this.변수 : 인스턴스의 필드값
		this.name = name;
	}
	public int getBan() {
		return ban;
	}
	public void setBan(int ban) {
		this.ban = ban;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	
	//Override = 부모의 기능 재정의
	@Override
	public String toString() {
		return name + ", " + ban + "반, " + num + "번";
	}
	
}

Student클래스의 메소드
이름 리턴타입 매개변수 설명
getName String - name 리턴
setName - String 변수이름 name 초기화
getBan int - age 리턴
setBan - int 변수이름 age 리턴
getNum int - num 리턴
setNum - String 변수이름 num 초기화

1. Student 객체 배열에 대한 레퍼런스를 선언하세요
2. 2명의 학생 데이터를 입력할 수 있도록 Student 배열을 생성하세요.
3. 각각의 인덱스에 객체를 생성하세요
4. st[0] 객체에 들어있는 name, ban, num을 초기화 하세요 ex) 김미희, 1반, 10번
5. st[1] 객체에 들어있는 name, ban, num을 초기화 하세요 ex} 이은비, 2반, 12번
6. st[0], st[1] 객체에 들어있는 name, ban, num을 출력

더보기
package Student;

public class StudentMain {
	public static void main(String[] args) {

		//1. Student 객체 배열 레퍼런스 변수 선언
		Student[] std_arr;
		
		//2. 2개의 Student객체의 참조값을 저장할 수 있는 레퍼런스 배열 생성
		std_arr = new Student[2];
		// Student[] std_arr = new Student[2];
		
		
		//3. 각 인덱스에 객체 참조값 저장
		//3-1. 생성된 Student 객체의 참조값을 바로 0번 인덱스에 할당
		std_arr[0] = new Student();
		
		//3-2. 객체 생성 후 변수에 저장된 참조값을 1번 인덱스에 할당
		Student std2 = new Student();
		std_arr[1] = std2;
		
		//4. 생성된 각 객체의 값 초기화
		//std_arr[0] : std_arr 변수가 가지고 있는 참조값 가지고
		//레퍼런스배열을 찾아가서 그중에서 0번인덱스에 저장되어 있는 Student
		//객체 참조값을 가지고 해당 객체를 찾아감
		std_arr[0].setName("김미희");
		std_arr[0].setBan(1);
		std_arr[0].setNum(10);
		
		std_arr[1].setName("박병관");
		std_arr[1].setBan(2);
		std_arr[1].setNum(20);
		
		System.out.println(std_arr[0].getName());
		System.out.println(std_arr[0].getBan() + "반");
		System.out.println(std_arr[0].getNum() + "번");
		
		for (int i = 0; i < std_arr.length; i++) {
			System.out.println(std_arr[i].toString());			
		}
		
	}
}

예제 2 StdScore 클래스를 작성

StdScore 클래스의 필드
접근 지정자 타입 변수명 설명
private String name 학생 이름
private int scoreJava Java 점수
private int scoreWeb Web 점수
private int scoreAndroid Android 점수
더보기
package StdScore;

public class StdScore {
	private String name;
	private int scoreJava;
	private int scoreWeb;
	private int scoreAndroid;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScoreJava() {
		return scoreJava;
	}
	public void setScoreJava(int scoreJava) {
		this.scoreJava = scoreJava;
	}
	public int getScoreWeb() {
		return scoreWeb;
	}
	public void setScoreWeb(int scoreWeb) {
		this.scoreWeb = scoreWeb;
	}
	public int getScoreAndroid() {
		return scoreAndroid;
	}
	public void setScoreAndroid(int scoreAndroid) {
		this.scoreAndroid = scoreAndroid;
	}
}


StdScore 클래스의 메서드
이름 리턴 타입 매개변수 설명
getName String - name을 리턴
setName - String 변수 이름 name을 초기화
getScoreJava int - scoreJava를 리턴
setScoreJava - int 변수 이름 scoreJava를 초기화
getScoreWeb int - scoreWeb를 리턴
setScoreWeb - int 변수 이름 scoreWeb를 초기화
getScoreAndroid int - scoreAndroid를 리턴
setScoreAndroid - int 변수 이름 scoreAndroid를 초기화

1. StdScore객체 배열에 대한 레퍼런스 변수를 선언하세요
2. 3명의 학생 데이터를 입력할 수 있도록 레퍼런스 배열을 생성하세요
3. 각각의 인덱스에 객체를 생성하세요
4. 각각의 인덱스에 객체를 생성할 때 반복문을 사용하여 생성하세요
----------------------------------------------------------------------------
5. stdScore [0], stdScore [1], stdScore [2] 객체에 들어있는 name, scoreJava, scoreWeb, scoreAndroid를 아래와 같이 키보드로부터 입력받아 초기화하세요.
6. 각 학생의 총점과 평균을 다음과 같이 출력하시오
더보기
package StdScore;

import java.util.Scanner;

public class StdScoreMain {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		StdScore[] stdScore_arr = new StdScore[3];
		int[] sum = new int[3];
		
		for (int i = 0; i < stdScore_arr.length; i++) {
			stdScore_arr[i] = new StdScore();        
			System.out.print((i + 1) + "번째 학생의 이름을 입력하세요. >> ");
			stdScore_arr[i].setName(sc.next());
			System.out.print((i + 1) + "번째 학생의 Java점수를 입력하세요. >> ");
			stdScore_arr[i].setScoreJava(sc.nextInt());
			System.out.print((i + 1) + "번째 학생의 Web점수를 입력하세요. >> ");
			stdScore_arr[i].setScoreWeb(sc.nextInt());
			System.out.print((i + 1) + "번째 학생의 Android점수를 입력하세요. >> ");
			stdScore_arr[i].setScoreAndroid(sc.nextInt());
			
			sum[i] = stdScore_arr[i].getScoreJava()+stdScore_arr[i].getScoreWeb()+stdScore_arr[i].getScoreAndroid();
			System.out.println();
			
		}
		
		for (int i = 0; i < stdScore_arr.length; i++) {
			System.out.println(stdScore_arr[i].getName()+"의 총점은 "+sum[i]+"점, "+"평균은 "+(sum[i]/3)+"점 입니다.");			
		}
		
	}
}

예제 3 Product 클래스 작성

Product클래스의 필드
접근 지정자 타입 변수명 설명
private String name 물건 이름
private int unitPrice 단가
private int amount 수량

Product클래스의 메서드
이름 리턴 타입 매개변수 설명
Product X String 변수 이름,
int 변수 이름,
int변수 이름
3개의 매개변수를 가진 생성자로서
객체 생성 시 name, unitPrice, amount를 초기화
getName String - name을 리턴
getUnitPrice int - unitPrice 리턴
getAmount int - amount 리턴
더보기
package Product;

public class Product {
	//필드
	private String name;
	private int unitPrice;
	private int amount;
	
	//메서드(생성자포함)
	public Product(String name, int unitPrice, int amount) {
		this.name = name;
		this.unitPrice = unitPrice;
		this.amount = amount;
	}

	public String getName() {
		return name;
	}
	public int getUnitPrice() {
		return unitPrice;
	}
	public int getAmount() {
		return amount;
	}
}

1. 몇 개의 종류의 상품을 메뉴에 등록할 것인지 상품의 수를 입력하세요
2. Product객체 배열에 대한 레퍼런스를 선언하세요
3. 입력받은 수만큼 상품을 등록할 수 있도록 레퍼런스 배열을 생성하세요
------------------------------------------------------------------------------------
4. 물건의 제품명, 단가, 수량을 입력받아 p [0], p [1] 객체에 저장하세요
------------------------------------------------------------------------------------
5. 각각의 객체에 들어있는 물건의 제품명, 단가, 수량을 출력하고, 판매 시 총매출을 구하여 아래와 같이 출력하세요

더보기
package Product;

import java.util.Scanner;

public class ProductMain {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.print("등록할 상품 종류 : ");
		int num = sc.nextInt();
		
		Product[] p_arr = new Product[num];
		int sum = 0;
		
		for (int i = 0; i < p_arr.length; i++) {
			System.out.print((i+1)+ ") 물건 이름 : ");
			String name = sc.next();
			
			System.out.print((i+1)+ ") 단가 : ");
			int unitPrice = sc.nextInt();
			
			System.out.print((i+1)+ ") 수량 : ");
			int amount = sc.nextInt();
			
			p_arr[i] = new Product(name, unitPrice, amount);
			System.out.println();
		}
		
		System.out.println("제품명\t단가\t수량");
		for (int i = 0; i < num; i++) {
			System.out.printf("%s\t%d\t%d\n",p_arr[i].getName(), p_arr[i].getUnitPrice(), p_arr[i].getAmount());
			sum += p_arr[i].getUnitPrice() * p_arr[i].getAmount();
		}
		System.out.println("총 금액 : " + sum);
	}
}

예제 4 BookData

BookData클래스의 필드
접근 지정자 타입 변수명 설명
private String title 책 이름
private int price 책 가격
private String writer 책 저자

더보기
package BookData;
public class BookData {
	private String title;
	private int price;
	private String writer;
	
	public BookData() {}
	
	public BookData(String title, int price, String writer) {
		super();
		this.title = title;
		this.price = price;
		this.writer = writer;
	}
	public String getTitle() {
		return title;
	}
	public int getPrice() {
		return price;
	}
	public String getWriter() {
		return writer;
	}
}

BookData클래스의 메서드
이름 리턴 타입 매개변수 설명
BookData X String 변수 이름,
int 변수 이름,
String 변수 이름
3개의 매개변수를 가진 생성자로서
객체 생성 시 title, price, writer를 초기화
getTitle String - title 리턴
getPrice int - price 리턴
getWriter String - writer 리턴

1. BookData객체 arraylist에 대한 레퍼런스를 선언하세요
2. BookData 참조값을 저장할 수 있는 레퍼런스 arraylist를 생성하세요
3. 다음과 같이 메뉴를 반복문을 사용하여 출력하고 4) 종료를 선택 시 프로그램을 종료하시오

4. 생성한 레퍼런스 arraylist에 다음 5권의 책을 추가하시오

인덱스 Title Price Writer
0 Java 21000 홍길동
1 C++ 29000 박문수
2 Database 31000 김장독
3 Android 18000 이순신
4 Web 26000 김철수


5. 삭제하고 싶은 책의 번호를 선택하면 arraylist에 저장된 모든 BookData 객체의 값을 다음과 같이 출력하고 arraylist에서 해당 책을 삭제하시오

7. 다음과 같이 키보드로부터 금액을 입력받고 입력받은 가격보다 저렴한 책의 목록과 가격을 아래와 같이 출력하세요


더보기
package BookData;

import java.util.ArrayList;
import java.util.Scanner;

public class BookDataMain {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList<BookData> al = new ArrayList<BookData>();
		int menu = 0; // 사용자가 사용하고 싶은 메뉴 저장 변수
		
		while(true) {
			System.out.print("1)책추가 2)책 삭제 3)내가 살 수 있는 책 4)종료 ");
			menu = sc.nextInt();
			
			if(menu == 1) {
				System.out.print("책 이름 : ");
				String name = sc.next();
				System.out.print("가격 : ");
				int price = sc.nextInt();
				System.out.print("작가 : ");
				String writer = sc.next();
				
				al.add(new BookData(name, price, writer));
			}else if(menu == 2) {
				for(int i = 0;i < al.size();i++) {
					System.out.printf("%d.\t%s\t%d\t%s\n",i+1 , al.get(i).getTitle(), al.get(i).getPrice(), al.get(i).getWriter());
				}
				
				System.out.print("삭제하고 싶은 책 >> ");
				int del_num = sc.nextInt();
				al.remove(del_num - 1);
			}else if(menu == 3) {
				System.out.print("금액을 입력하시오 : ");
				int money = sc.nextInt();
				System.out.println("구매 가능한 책 목록");
				
				for(int i = 0;i < al.size();i++) {
					if(money >= al.get(i).getPrice()) {
						System.out.printf("%d.\t%s\t%d\t%s\n",i+1 , al.get(i).getTitle(), al.get(i).getPrice(), al.get(i).getWriter());						
					}
				}
			}else if(menu == 4) {
				System.out.println("종료");
				break;
			}
		}
		
	}
}

728x90

'JAVA' 카테고리의 다른 글

Java 상속  (0) 2022.01.13
Java MVC Pattern  (0) 2022.01.13
Java 메소드(Method)  (0) 2022.01.13
Java OOP, 생성자  (0) 2022.01.13
Java 배열  (0) 2022.01.13
Comments