프로그래밍/자바(java) 융합개발자 2차

[자바 5일차] 24일 - ArrayList

aSpring 2021. 1. 18. 16:34
728x90
728x90

 

2021/01/15 - [공부/자바(java) 융합개발자 2차] - [자바 4일차] 23일차 - 클래스

2021/01/14 - [공부/자바(java) 융합개발자 2차] - [자바 3일차 2] 22일차 2 - 클래스, 객체

2021/01/14 - [공부/자바(java) 융합개발자 2차] - [자바 3일차] 22일차 - 배열, 난수

2021/01/13 - [공부/자바(java) 융합개발자 2차] - [자바 2일차] 21일차 - 반복문(for, while, do ~ while)

2021/01/12 - [공부/자바(java) 융합개발자 2차] - [자바 1일차] 20일차 일지 - Eclipse에서 Hello 출력, 변수, if문


2021/01/13 - [공부/자바 복습] - [1일차] 복습 & 자바 기본 익히기(p.18~)

2021/01/15 - [공부/자바 복습] - [복습] 2일차 복습 - 자바 기본(for, while, do ~ while, 이중 for문)

2021/01/15 - [공부/자바 복습] - [복습] 3일차 복습 - 자바 기본(21일차 배열, 난수)

2021/01/16 - [공부/자바 복습] - [복습] 4일차 복습 - 22일차2 ~ 23일차 복습(클래스, 객체) 진행 중

2021/01/16 - [분류 전체보기] - Do it! 공부단


지난 시간 복습

com.day05_object

Circle.java를 만드는데, CircleMain.java(main 포함) 두개로 만듦

 

CircleMain.java에 다음과 같이 입력

package com.day05_object;

public class CircleMain {

	public static void main(String[] args) {

		Circle c1 = new Circle("피자", 10); //이름: 피자, 반지름 : 10 -> 생성자1(매개변수2개)
		c1.getArea();//피자 넓이는 314

		Circle c2 = new Circle(); //-> 생성자2(인자X)
		c2.name ="도넛"; //멤버 변수
		c2.r = 5;
		c2.getArea(); //함수

	}

}

 

오류가 나지 않도록 Circle.java 수정하기

내 답

package com.day05_object;

public class Circle {
		
		String name; //멤버 변수 선언
		int r;
		final double PI = 3.14;
	
		Circle() { //생성자
			
		}
		
		Circle(String name, int r) { //생성자1 -> name, r을 입력 받음
			this.name = name; 
			this.r = r;
		}
		
		
		
		public void getArea() { //함수
			System.out.println(name + " 넓이 : " + r*r*PI);
		}
}

피자 넓이 : 314.0
도넛 넓이 : 78.5

 

그러나 하나의 객체를 만들 때는 캡슐화 -> 멤버 변수는 private

아무 것도 안 적을 땐 default -> 같은 패키지 안에서는 접근 가능, public -> 모두 접근 가능

이 경우 Circle에서 CircleMain으로 값을 주는게 아니라 CircleMain에서 Circle로 값을 집어넣기 때문에

getter가 아닌 setter를 사용

package com.day05_object;

public class Circle {
		
		private String name; //멤버 변수 선언
		private int r;
	
		Circle() { //생성자
			
		}
		
		Circle(String name, int r) { //생성자1 -> name, r을 입력 받음
			this.name = name; 
			this.r = r;
		}
		
		
		
		public void getArea() { //함수
			System.out.println(name + " 넓이 : " + r*r*3.14);
		}
		
		//setter -> 값을 넣기 때문에
		public void setName(String name) {
			this.name = name;
		}
		public void setR(int r) {
			this.r = r;
		}
}
package com.day05_object;

public class CircleMain {

	public static void main(String[] args) {

		Circle c1 = new Circle("피자", 10); //이름: 피자, 반지름 : 10 -> 생성자1(매개변수2개)
		c1.getArea();//피자 넓이는 314

		Circle c2 = new Circle(); //-> 생성자2(인자X)
		c2.setName("도넛"); //멤버 변수
		c2.setR(5);
		c2.getArea(); //함수

	}

}

==> 자동으로 만들기

package com.day05_object;

public class Circle {
		
		private String name; //멤버 변수 선언
		private int r;
	
		Circle() { //생성자
			
		}
		
		Circle(String name, int r) { //생성자1 -> name, r을 입력 받음
			this.name = name; 
			this.r = r;
		}
		
		
		
		public void getArea() { //함수
			System.out.println(name + " 넓이 : " + r*r*3.14);
		}
		
		
}

자동 완성됨

 

pi를 변하지 않는 수로 정의

package com.day05_object;

public class Circle {
		
		final double PI = 3.14;
		private String name; //멤버 변수 선언
		private int r;
	
		Circle() { //생성자
			
		}
		
		Circle(String name, int r) { //생성자1 -> name, r을 입력 받음
			this.name = name; 
			this.r = r;
		}
		
		
		
		public void getArea() { //함수
			System.out.println(name + " 넓이 : " + r*r*PI);
		}

		public void setName(String name) {
			this.name = name;
		}

		public void setR(int r) {
			this.r = r;
		}
		
		
}

결과 동일

피자 넓이 : 314.0
도넛 넓이 : 78.5

 

Circle(String name, int r) { //생성자1 -> name, r을 입력 받음
			this.name = name; 
			this.r = r;
		}

이 생성자의 역할 = 멤버 변수에 값을 넣는다

//setter

		public void setName(String name) {
			this.name = name;
		}

		public void setR(int r) {
			this.r = r;
		}

setter의 역할 = 멤버 변수에 값을 넣는다.

=> 역할 동일, 생성자에 값을 넣어주면 사실 setter는 필요 없다.

 

총 넓이를 구해주세요 = 피자의 넓이 + 도넛의 넓이

package com.day05_object;

public class CircleMain {

	public static void main(String[] args) {

		Circle c1 = new Circle("피자", 10); //이름: 피자, 반지름 : 10 -> 생성자1(매개변수2개)
		c1.getArea();//피자 넓이는 314

		Circle c2 = new Circle(); //-> 생성자2(인자X)
		c2.setName("도넛"); //멤버 변수
		c2.setR(5);
		c2.getArea(); //함수
		
		// 총 넓이를 구해주세요 = 피자의 넓이 + 도넛의 넓이
		System.out.println("총 넓이 : " + c1.getArea() + c2.getArea());
	}

}

그러나 오류가 남 -> return 값이 없기 때문

 

Circle.java에서

package com.day05_object;

public class Circle {
		 
		final double PI = 3.14;
		private String name; //멤버 변수 선언
		private int r;
	
		Circle() { //생성자
			
		}
		
		Circle(String name, int r) { //생성자1 -> name, r을 입력 받음
			this.name = name; 
			this.r = r;
		}
		
		
		
		public void getArea() { //함수
			System.out.println(name + " 넓이 : " + r*r*PI);
		}
		
		public double getTotal() {
			return r*r*PI;
		}
		
		//setter

		public void setName(String name) {
			this.name = name;
		}

		public void setR(int r) {
			this.r = r;
		}
		
		
}
package com.day05_object;

public class CircleMain {

	public static void main(String[] args) {

		Circle c1 = new Circle("피자", 10); //이름: 피자, 반지름 : 10 -> 생성자1(매개변수2개)
		c1.getArea();//피자 넓이는 314

		Circle c2 = new Circle(); //-> 생성자2(인자X)
		c2.setName("도넛"); //멤버 변수
		c2.setR(5);
		c2.getArea(); //함수
		
		// 총 넓이를 구해주세요 = 피자의 넓이 + 도넛의 넓이
		System.out.println("총 넓이 : " + c1.getTotal() + c2.getTotal());
	}

}

피자 넓이 : 314.0
도넛 넓이 : 78.5
총 넓이 : 314.078.5

 

객체가 3개 이상이라면??

package com.day05_object;

public class CircleMain {

	public static void main(String[] args) {

		Circle c1 = new Circle("피자", 10); //이름: 피자, 반지름 : 10 -> 생성자1(매개변수2개)
		c1.getArea();//피자 넓이는 314

		Circle c2 = new Circle(); //-> 생성자2(인자X)
		c2.setName("도넛"); //멤버 변수
		c2.setR(5);
		c2.getArea(); //함수
		
		Circle c3 = new Circle("피자", 15);
		Circle c4 = new Circle("피자", 20);
		Circle c5 = new Circle("피자", 25);
		
		// 총 넓이를 구해주세요 = 피자의 넓이 + 도넛의 넓이
		System.out.println("총 넓이 : " + c1.getTotal() + c2.getTotal() + c3.getTotal() + c4.getTotal() + c5.getTotal());
	}

}

피자 넓이 : 314.0
도넛 넓이 : 78.5
총 넓이 : 314.078.5706.51256.01962.5

 

객체가 여러개 

// 총 넓이를 구해주세요 = 피자의 넓이 + 도넛의 넓이
		System.out.println("총 넓이 : " + c1.getTotal() + c2.getTotal() + c3.getTotal() + c4.getTotal() + c5.getTotal());

너무 번거로움 -> 반복문으로 나타내자! : 배열에 담으면 된다.

//int형 크기 5인 배열
		int[] arr = new int[5];
		//문자형 크기 5인 배열
		String[] str = new String[5];

이런 식으로 만들어주면 됨!

배열은 크기를 반드시 정해주어야 함 -> 잘 모르겠다면 넉넉하게 잡아주기

 

Circle형 크기 5인 배열 -> 자료형으로 객체가 들어간다.

Circle[] cirArr = new Circle[5];
//Circle형 크기 5인 배열 -> 자료형으로 객체가 들어간다.
		Circle[] cirArr = new Circle[5];
		cirArr[0] = c1;
		cirArr[1] = c2;
		cirArr[2] = c3;
		cirArr[3] = c4;
		cirArr[4] = c5;

이제 for 돌리기

CircleMain.java

package com.day05_object;

public class CircleMain {

	public static void main(String[] args) {

		Circle c1 = new Circle("피자", 10); //이름: 피자, 반지름 : 10 -> 생성자1(매개변수2개)
		c1.getArea();//피자 넓이는 314

		Circle c2 = new Circle(); //-> 생성자2(인자X)
		c2.setName("도넛"); //멤버 변수
		c2.setR(5);
		c2.getArea(); //함수
		
		Circle c3 = new Circle("피자", 15);
		Circle c4 = new Circle("피자", 20);
		Circle c5 = new Circle("피자", 25);
		
		// 총 넓이를 구해주세요 = 피자의 넓이 + 도넛의 넓이
		System.out.println("총 넓이 : " + (c1.getTotal() + c2.getTotal() + c3.getTotal() + c4.getTotal() + c5.getTotal()));
		
		//Circle형 크기 5인 배열 -> 자료형으로 객체가 들어간다.
		Circle[] cirArr = new Circle[5];
		cirArr[0] = c1;
		cirArr[1] = c2;
		cirArr[2] = c3;
		cirArr[3] = c4;
		cirArr[4] = c5;
		
		double sum = 0;
		for(int i=0; i < cirArr.length; i++) {
			sum += cirArr[i].getTotal();
		}
		System.out.println("합 : " + sum);
		
	}

}

Circle.java

package com.day05_object;

public class Circle {
		 
		final double PI = 3.14;
		private String name; //멤버 변수 선언
		private int r;
	
		Circle() { //생성자
			
		}
		
		Circle(String name, int r) { //생성자1 -> name, r을 입력 받음
			this.name = name; 
			this.r = r;
		}
		
		
		
		public void getArea() { //함수
			System.out.println(name + " 넓이 : " + r*r*PI);
		}
		
		public double getTotal() {
			return r*r*PI;
		}
		
		//setter

		public void setName(String name) {
			this.name = name;
		}

		public void setR(int r) {
			this.r = r;
		}
				
}

 

배열을 만들면 반드시 값을 넣어서 초기화를 해주어야 함

Circle[] cirArr = new Circle[5];
cirArr[0] = c1;
cirArr[1] = c2;
cirArr[2] = c3;
cirArr[3] = c4;
cirArr[4] = c5;

c1, c2, c3, c4, c5 객체의 의미가 있는가?

왜냐하면 이것들은 다 cirArr[i]에 들어있는 값과 같다 -> 굳이 이름을 c1, c2... 이렇게 만들어줄 필요가 없다.

 

다른 방식으로 해보자.

CircleMain2.java

package com.day05_object;

public class CircleMain2 {
	public static void main(String[] args) {
		Circle[] arr = new Circle[5];
		arr[0] = new Circle("피자", 10);
		
	}
}

이렇게 써줄 수 있다.

package com.day05_object;

public class CircleMain2 {
	public static void main(String[] args) {
		Circle[] arr = new Circle[5];
		
		/* Circle[] cirArr = new Circle[5];
		* cirArr[0] = c1;
		* cirArr[1] = c2;
		* cirArr[2] = c3;
		* cirArr[3] = c4;
		* cirArr[4] = c5;
		*/
		
		arr[0] = new Circle("피자", 10);
		arr[1] = new Circle("피자", 15);
		arr[2] = new Circle("피자", 20);
		arr[3] = new Circle("피자", 25);
		arr[4] = new Circle("피자", 30);
		
		double sum = 0;
		for(int i=0; i<arr.length;i++) {
			sum += arr[i].getTotal();
		}
		System.out.println("총합" + sum);
		
	}
}

총합7065.0
 

간략하게

package com.day05_object;

public class CircleMain2 {
	public static void main(String[] args) {
		Circle[] arr = new Circle[5];
		
		/*arr[0] = new Circle("피자", 10);
		*arr[1] = new Circle("피자", 15);
		*arr[2] = new Circle("피자", 20);
		*arr[3] = new Circle("피자", 25);
		*arr[4] = new Circle("피자", 30);
		*이것도 규칙성이 있으니 간략하게
		*/
		
		int k = 0;
		for(int i = 0; i<arr.length; i++) {
			arr[i] = new Circle("피자", 10+k);
			k+=5;
		}
		
		double sum = 0;
		for(int i=0; i<arr.length;i++) {
			sum += arr[i].getTotal();
		}
		System.out.println("총합" + sum);
		
	}
}

총합7065.0

결과 동일


Book.java -> 책을 객체화 시켰다고 생각

package com.day05_object;

public class Book {
	
	//제목, 저자만 있다.
	private String title, writer; //제목, 저자 존재
	
	//생성자
	public Book(String title, String writer) {
		this.title = title;
		this.writer = writer;
	}

	//getter 만들기
	public String getTitle() {
		return title;
	}
	public String getWriter() {
		return writer;
	}

}

BookMain.java -> 책 판매

- 책이 입고 되면 전체 리스트가 있다고 생각해보자.

- 직원을 1명 만들기 bm

package com.day05_object;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() {
		
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		
	}
	
	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		bm.showMenu();
	}

}

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>

 

이제 필요한 것 : 번호 입력 받아서 해당하는 것 실행하기

Scanner sc = new Scanner(System.in); 필요

 

package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() {
		
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		
	}
	
	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		bm.showMenu();
		int choice = sc.nextInt();
	}

}

에러남

static 내에서 선언된 것은 static 내에서만 사용할 수 있기 때문

 

package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() {
		
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		
	}
	
	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		bm.showMenu();
		int choice = sc.nextInt(); //에러남
		switch(choice) {
		case 1 : bm.bookInsert(); break;
		case 2 : bm.bookList(); break;
		case 3 : System.out.println("종료");
				 System.exit(0); //전형적인 종료
		default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
		}
	}

}

 

실행되는지 확인

package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() {
		System.out.println("입고");
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		System.out.println("리스트");
	}

	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		bm.showMenu();
		int choice = sc.nextInt(); //에러남
		switch(choice) {
		case 1 : bm.bookInsert(); break;
		case 2 : bm.bookList(); break;
		case 3 : System.out.println("종료");
				 System.exit(0); //전형적인 종료
		default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
		}
	}

}
1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1
입고
1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
2
리스트
1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
3
종료
1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
4
입력오류

그러나 업무를 몇 번 할지 모른다(종료를 눌러줄 때까지 무한 루프 돌려야 함 -> while문 사용)

반복할 업무를 while(true) 안에 넣어주기

while(true) {
			bm.showMenu();
			int choice = sc.nextInt(); //에러남
			switch(choice) {
			case 1 : bm.bookInsert(); break;
			case 2 : bm.bookList(); break;
			case 3 : System.out.println("종료");
					 System.exit(0); //전형적인 종료
			default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
			}
		}

==> 전체

package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() {
		System.out.println("입고");
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		System.out.println("리스트");
	}

	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		
		while(true) {
			bm.showMenu();
			int choice = sc.nextInt(); //에러남
			switch(choice) {
			case 1 : bm.bookInsert(); break;
			case 2 : bm.bookList(); break;
			case 3 : System.out.println("종료");
					 System.exit(0); //전형적인 종료
			default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
			}
		}
	}

}

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1
입고
1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
2
리스트
1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
4
입력오류
1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
3
종료

 

3 종료를 누를 때까지 계속 실행이 된다.

 

1. 책 추가 시 실제로 책 제목, 저자를 받아서 책을 입고시켜보자.

//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() { //실제로 책 제목, 저자 입력받기
		System.out.println("책 입고>>");
		System.out.println("책 제목 입력 : ");
		String title = sc.nextLine();
		System.out.println("책 저자 입력 : ");
		String writer = sc.nextLine();
	}

==> 전체

package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() { //실제로 책 제목, 저자 입력받기
		System.out.println("책 입고>>");
		System.out.println("책 제목 입력 : ");
		String title = sc.nextLine();
		System.out.println("책 저자 입력 : ");
		String writer = sc.nextLine();
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		System.out.println("리스트");
	}

	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		
		while(true) {
			bm.showMenu();
			int choice = sc.nextInt();
			switch(choice) {
			case 1 : bm.bookInsert(); break;
			case 2 : bm.bookList(); break;
			case 3 : System.out.println("종료");
					 System.exit(0); //전형적인 종료
			default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
			}
		}
	}

}

 

 

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1
책 입고>>
책 제목 입력 : 
책 저자 입력 : 

 

nextLine(); //한 줄 입력 -> Enter를 치면 한 줄로 구분함

 

package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() { //실제로 책 제목, 저자 입력받기
		System.out.println("책 입고>>");
		System.out.println("책 제목 입력 : ");
		String title = sc.nextLine(); //한 줄 입력 -> Enter를 치면 한 줄로 구분함
		System.out.println("책 저자 입력 : ");
		String writer = sc.nextLine();
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		System.out.println("리스트");
	}

	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		
		while(true) {
			bm.showMenu();
			int choice = sc.nextInt(); //1엔터 -> 엔터가 남아있는 것
			sc.nextLine(); // Enter 처리 위해 넣음
			switch(choice) {
			case 1 : bm.bookInsert(); break;
			case 2 : bm.bookList(); break;
			case 3 : System.out.println("종료");
					 System.exit(0); //전형적인 종료
			default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
			}
		}
	}

}

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1
책 입고>>
책 제목 입력 : 
22
책 저자 입력 : 
22222
1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>

 

이제는 받은 title, writer를 저장 하게 해보자

package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	//cnt를 전역으로 써야 하니까 선언
	private int cnt;
	
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() { //실제로 책 제목, 저자 입력받기
		System.out.println("책 입고>>");
		System.out.println("책 제목 입력 : ");
		String title = sc.nextLine(); //한 줄 입력 -> Enter를 치면 한 줄로 구분함
		System.out.println("책 저자 입력 : ");
		String writer = sc.nextLine();
		arr[cnt] = new Book(title, writer); //cnt는 0~49 까지 변하는 값 -> 전역 변수로 위에 선언
		cnt++; //책을 담고 나면 cnt++ 시켜줌
		
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		System.out.println("리스트");
	}

	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		
		while(true) {
			bm.showMenu();
			int choice = sc.nextInt(); //1엔터 -> 엔터가 남아있는 것
			sc.nextLine(); // Enter 처리 위해 넣음
			switch(choice) {
			case 1 : bm.bookInsert(); break;
			case 2 : bm.bookList(); break;
			case 3 : System.out.println("종료");
					 System.exit(0); //전형적인 종료
			default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
			}
		}
	}

}

 

책 리스트 작업하기

public void bookList() {
		System.out.println("리스트...");
		for(int i = 0; i<cnt; i++) {
			System.out.println("책제목 : " + arr[i].getTitle());
			System.out.println("책저자 : " + arr[i].getWriter());
			System.out.println();
		}
	}

==> 전체

package com.day05_object;

public class Book {
	
	//제목, 저자만 있다.
	private String title, writer; //제목, 저자 존재
	
	//생성자
	public Book(String title, String writer) {
		this.title = title;
		this.writer = writer;
	}

	//getter 만들기
	public String getTitle() {
		return title;
	}
	public String getWriter() {
		return writer;
	}


}
package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	//cnt를 전역으로 써야 하니까 선언
	private int cnt;
	
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() { //실제로 책 제목, 저자 입력받기
		System.out.println("책 입고>>");
		System.out.println("책 제목 입력 : ");
		String title = sc.nextLine(); //한 줄 입력 -> Enter를 치면 한 줄로 구분함
		System.out.println("책 저자 입력 : ");
		String writer = sc.nextLine();
		arr[cnt] = new Book(title, writer); //cnt는 0~49 까지 변하는 값 -> 전역 변수로 위에 선언
		cnt++; //책을 담고 나면 cnt++ 시켜줌
		
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		System.out.println("리스트...");
		for(int i = 0; i<cnt; i++) {
			System.out.println("책제목 : " + arr[i].getTitle());
			System.out.println("책저자 : " + arr[i].getWriter());
			System.out.println();
		}
	}

	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		
		while(true) {
			bm.showMenu();
			int choice = sc.nextInt(); //1엔터 -> 엔터가 남아있는 것
			sc.nextLine(); // Enter 처리 위해 넣음
			switch(choice) {
			case 1 : bm.bookInsert(); break;
			case 2 : bm.bookList(); break;
			case 3 : System.out.println("종료");
					 System.exit(0); //전형적인 종료
			default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
			}
		}
	}

}

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1
책 입고>>
책 제목 입력 : 
asdf
책 저자 입력 : 
Witer1 1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1
책 입고>>
책 제목 입력 : 
asdg2
책 저자 입력 : 
Wirtere2

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1
책 입고>>
책 제목 입력 : 
책이름
책 저자 입력 : 
저자5

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
2

리스트...
책제목 : asdf
책저자 : Witer1


책제목 : asdg2
책저자 : Wirtere2

책제목 : 책이름
책저자 : 저자5

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
3
종료

 

arr[cnt] = new Book(title, writer); //cnt는 0~49 까지 변하는 값 -> 전역 변수로 위에 선언
cnt++; //책을 담고 나면 cnt++ 시켜줌

 

이걸 한 줄로 축약 => 후위 연산자 사용

arr[cnt++] = new Book(title, writer);

package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	//cnt를 전역으로 써야 하니까 선언
	private int cnt;
	
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() { //실제로 책 제목, 저자 입력받기
		System.out.println("책 입고>>");
		System.out.println("책 제목 입력 : ");
		String title = sc.nextLine(); //한 줄 입력 -> Enter를 치면 한 줄로 구분함
		System.out.println("책 저자 입력 : ");
		String writer = sc.nextLine();
	
		arr[cnt++] = new Book(title, writer);
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		System.out.println("리스트...");
		for(int i = 0; i<cnt; i++) {
			System.out.println("책제목 : " + arr[i].getTitle());
			System.out.println("책저자 : " + arr[i].getWriter());
			System.out.println();
		}
	}

	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		
		while(true) {
			bm.showMenu();
			int choice = sc.nextInt(); //1엔터 -> 엔터가 남아있는 것
			sc.nextLine(); // Enter 처리 위해 넣음
			switch(choice) {
			case 1 : bm.bookInsert(); break;
			case 2 : bm.bookList(); break;
			case 3 : System.out.println("종료");
					 System.exit(0); //전형적인 종료
			default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
			}
		}
	}

}

package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	//cnt를 전역으로 써야 하니까 선언
	private int cnt;
	
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() { //실제로 책 제목, 저자 입력받기
		System.out.println("책 입고>>");
		System.out.println("책 제목 입력 : ");
		String title = sc.nextLine(); //한 줄 입력 -> Enter를 치면 한 줄로 구분함
		System.out.println("책 저자 입력 : ");
		String writer = sc.nextLine();
	
		arr[cnt++] = new Book(title, writer);
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		System.out.println("리스트...");
		for(int i = 0; i<arr.length; i++) {
			System.out.println("책제목 : " + arr[i].getTitle());
			System.out.println("책저자 : " + arr[i].getWriter());
			System.out.println();
		}
	}

	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		
		while(true) {
			bm.showMenu();
			int choice = sc.nextInt(); //1엔터 -> 엔터가 남아있는 것
			sc.nextLine(); // Enter 처리 위해 넣음
			switch(choice) {
			case 1 : bm.bookInsert(); break;
			case 2 : bm.bookList(); break;
			case 3 : System.out.println("종료");
					 System.exit(0); //전형적인 종료
			default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
			}
		}
	}

}

 

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1
책 입고>>
책 제목 입력 : 
111
책 저자 입력 : 
11111
1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1
책 입고>>
책 제목 입력 : 
222
책 저자 입력 : 
2222222
1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
2
리스트...
Exception in thread "main" 책제목 : 111
책저자 : 11111

책제목 : 222
책저자 : 2222222

에러.....

-> 방은 50개인데 값은 2개밖에 없어서 에러가 남.. 

따라서 

public void bookList() {
		System.out.println("리스트...");
		for(int i = 0; i<arr.length; i++) {
			System.out.println("책제목 : " + arr[i].getTitle());
			System.out.println("책저자 : " + arr[i].getWriter());
			System.out.println();
		}
	}

arr.length 까지 돌면 안되고

public void bookList() {
		System.out.println("리스트...");
		for(int i = 0; i<cnt; i++) {
			System.out.println("책제목 : " + arr[i].getTitle());
			System.out.println("책저자 : " + arr[i].getWriter());
			System.out.println();
		}
	}

입력해준 수인 cnt 까지만 돌려주어야 에러가 나지 않는다.

 

for-each문으로 바꾸기 -> 처음부터 끝까지 돌게 만든다.

public void bookList() {
		System.out.println("리스트...");
	//	for(int i = 0; i<cnt; i++) {
	//		System.out.println("책제목 : " + arr[i].getTitle());
	//		System.out.println("책저자 : " + arr[i].getWriter());
	//		System.out.println();
	//	}
	//}
		//for-each
		for(Book b : arr) { //arr의 형 Book형 이름 b 내맘대로
			System.out.println("책 제목 : " + b.getTitle());
			System.out.println("책 저자:  : " + b.getWriter());
			System.out.println();
		}
	}

끝까지 돌면 안되기 때문에 if 넣어주기

public void bookList() {
		System.out.println("리스트...");
	//	for(int i = 0; i<cnt; i++) {
	//		System.out.println("책제목 : " + arr[i].getTitle());
	//		System.out.println("책저자 : " + arr[i].getWriter());
	//		System.out.println();
	//	}
	//}
		//for-each
		for(Book b : arr) { //arr의 형 Book형 이름 b 내맘대로
			if(b==null) break;
			System.out.println("책 제목 : " + b.getTitle());
			System.out.println("책 저자:  : " + b.getWriter());
			System.out.println();
		}
	}

==> 전체 코드

package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	//cnt를 전역으로 써야 하니까 선언
	private int cnt;
	
	
	public void showMenu() {
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() { //실제로 책 제목, 저자 입력받기
		System.out.println("책 입고>>");
		System.out.println("책 제목 입력 : ");
		String title = sc.nextLine(); //한 줄 입력 -> Enter를 치면 한 줄로 구분함
		System.out.println("책 저자 입력 : ");
		String writer = sc.nextLine();
	
		arr[cnt++] = new Book(title, writer);
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		System.out.println("리스트...");
	//	for(int i = 0; i<cnt; i++) {
	//		System.out.println("책제목 : " + arr[i].getTitle());
	//		System.out.println("책저자 : " + arr[i].getWriter());
	//		System.out.println();
	//	}
	//}
		//for-each
		for(Book b : arr) { //arr의 형 Book형 이름 b 내맘대로
			if(b==null) break;
			System.out.println("책 제목 : " + b.getTitle());
			System.out.println("책 저자:  : " + b.getWriter());
			System.out.println();
		}
	}

	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		
		while(true) {
			bm.showMenu();
			int choice = sc.nextInt(); //1엔터 -> 엔터가 남아있는 것
			sc.nextLine(); // Enter 처리 위해 넣음
			switch(choice) {
			case 1 : bm.bookInsert(); break;
			case 2 : bm.bookList(); break;
			case 3 : System.out.println("종료");
					 System.exit(0); //전형적인 종료
			default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
			}
		}
	}

}

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1
책 입고>>
책 제목 입력 : 
초집중
책 저자 입력 : 
니르 이얄

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1
책 입고>>
책 제목 입력 : 
미라클 모닝
책 저자 입력 : 
모름

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
2

리스트...
책 제목 : 초집중
책 저자:  : 니르 이얄

책 제목 : 미라클 모닝
책 저자:  : 모름

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>

3

종료

 

==> 조금 더 보기 편하게

package com.day05_object;

import java.util.Scanner;

public class BookMain {

	//직원이 하는 일 : 책 입고, 책 리스트
	//그러나 직원이 책을 몇개 입고할지는 모른다 -> 넉넉히 50개 잡아주기
	Book[] arr = new Book[50];
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	//cnt를 전역으로 써야 하니까 선언
	private int cnt;
	
	
	public void showMenu() {
		System.out.println();
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() { //실제로 책 제목, 저자 입력받기
		System.out.println();
		System.out.println("책 입고>>");
		System.out.println("책 제목 입력 : ");
		String title = sc.nextLine(); //한 줄 입력 -> Enter를 치면 한 줄로 구분함
		System.out.println("책 저자 입력 : ");
		String writer = sc.nextLine();
	
		arr[cnt++] = new Book(title, writer);
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		System.out.println();
		System.out.println("리스트...");
	//	for(int i = 0; i<cnt; i++) {
	//		System.out.println("책제목 : " + arr[i].getTitle());
	//		System.out.println("책저자 : " + arr[i].getWriter());
	//		System.out.println();
	//	}
	//}
		//for-each
		for(Book b : arr) { //arr의 형 Book형 이름 b 내맘대로
			if(b==null) break;
			System.out.println("책 제목 : " + b.getTitle());
			System.out.println("책 저자:  : " + b.getWriter());
			System.out.println();
		}
	}

	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain bm = new BookMain();
		
		while(true) {
			bm.showMenu();
			int choice = sc.nextInt(); //1엔터 -> 엔터가 남아있는 것
			sc.nextLine(); // Enter 처리 위해 넣음
			switch(choice) {
			case 1 : bm.bookInsert(); break;
			case 2 : bm.bookList(); break;
			case 3 : System.out.println("종료");
					 System.exit(0); //전형적인 종료
			default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
			}
		}
	}

}


1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1

책 입고>>
책 제목 입력 : 
초집중
책 저자 입력 : 
니르 이얄, 줄리 리

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
1

책 입고>>
책 제목 입력 : 
긍정의 한줄
책 저자 입력 : 
린다 피콘

1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
2

리스트...
책 제목 : 초집중
책 저자:  : 니르 이얄, 줄리 리

책 제목 : 긍정의 한줄
책 저자:  : 린다 피콘


1. 책 추가
2. 책 전체보기
3. 종료
업무를 선택하세요>>
3
종료

 

Student.java -> 이름, 성적을 가진다. 출력 : 학생 이름, 총점

Teacher.java -> 학생의 성적 관리

 

Student.java

- 이름, 성적(국어, 영어, 수학)을 가짐

- 총점

- 평균

package com.day05_object;

public class Student {
	//이름, 성적(국어, 영어, 수학)을 가진다.
	private String name;
	private int kor, eng, math;
	
	//총점 구하기
	public int getTotal() {
		return kor + eng + math;
	}
	
	//평균 구하기
	public double getAverage() {
		return getTotal()/3;
	}
}

 여기 까지만 해주면 값을 입력 받아서 계산을 할수가 없다.

 

-> 생성자 만들어 주어야 함

package com.day05_object;

public class Student { //이름, 성적(국어, 영어, 수학)을 가진다.
	private String name;
	private int kor, eng, math;
	
	public Student(String name, int kor, int eng, int math) { //값을 받아야 하니까 생성자 만들어줌
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	
	public int getTotal() { //총점 구하기
		return kor + eng + math;
	}
	
	public double getAverage() { //평균 구하기
		return getTotal()/3;
	}
}

Teacher.java -> 선생님이 할 수 있는 일 : 성적 입력, 성적 확인

- 몇 명정도의 학생을 관리를 하는가? 약 20명

- 성적 입력

- 성적 확인

- 선생님 만들어 줘야함

package com.day05_object;

public class Teacher { //학생의 성적 관리
	
	//20명의 학생 관리
	Student[] studentArr = new Student[20];
	
	//성적 입력
	public void inputData() {
		
	}
	
	//성적 확인
	public void viewData() {
		
	}
	
	public static void main(String[] args) { 
		Teacher t = new Teacher(); //학생을 관리할 선생님 만들기
	}
}

==> 더 작성

package com.day05_object;

import java.util.Scanner;

public class Teacher { //학생의 성적 관리
	
	//20명의 학생 관리
	Student[] studentArr = new Student[20];
	static Scanner sc = new Scanner(System.in);
	
	//무슨 업무를 할지 물어보고 입력 받기
	public void showMenu() {
	
	}
	
	//성적 입력
	public void inputData() {
		
	}
	
	//성적 확인
	public void viewData() {
		
	}
	
	public static void main(String[] args) { 
		Teacher t = new Teacher(); //학생을 관리할 선생님 만들기
		t.showMenu(); //업무 목록 보여주고 입력 받아야 함
		int no = sc.nextInt(); //원하는 업무를 받음
		}
	}
}

- BookMain에서 만든 Scanner는 static으로 해놨기 때문에 여기서도 사용 가능 -> 굳이 또 안만들고 갖다 쓰면 됨

그러나 sc는 BookMain의 sc이므로

BookMain.sc로 적어주어야 함

 

 

package com.day05_object;

public class Teacher { //선생님이 할 수 있는 일 : 성적 입력, 성적 확인
	//선생님이 학생을 몇명 관리하는가? 약 20명
	Student[] arr = new Student[20];
	//업무 목록 선택
	public void showMenu() {
		
	}
	
	//성적 입력
	public void intputDtata() {
		
	}
	
	//성적 리스트
	public void veiwtDtata() {
		
	}
	

	public static void main(String[] args) {
		Teacher teacher = new Teacher();
		teacher.showMenu();
		int no = BookMain.sc.nextInt(); //BookMain에서 만든 Scanner는 static으로 해놨기 때문에 여기서도 사용 가능 -> 굳이 또 안만들고 갖다 쓰면 됨
	}
}

 

 더 작성하기

package com.day05_object;

import java.util.Scanner;

public class Teacher { // 학생의 성적 관리

	// 20명의 학생 관리
	Student[] studentArr = new Student[20];
	private int cnt;

	// 무슨 업무를 할지 물어보고 입력 받기
	public void showMenu() {
		System.out.println();
		System.out.println("1. 성적 입력");
		System.out.println("2. 성적 확인");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요 >>");
	}

	// 성적 입력
	public void inputData() { // 이름, 국어, 영어, 수학 점수 입력
		System.out.println("성적입력..");
		System.out.println("학생 이름 입력");
		String name = BookMain.sc.next();
		System.out.println("국어 성적 입력");
		int kor = BookMain.sc.nextInt();
		System.out.println("영어 성적 입력");
		int eng = BookMain.sc.nextInt();
		System.out.println("수학 성적 입력");
		int math = BookMain.sc.nextInt();

		studentArr[cnt++] = new Student(name, kor, eng, math); // 후위 연산자 -> 0부터 받고 그 후 ++되어서 1 2 3 .. 이렇게 받음
	}

	// 성적 확인 : 성적 리스트
	public void viewData() {
		System.out.println();
		System.out.println("성적 리스트...");
		for (Student s : studentArr) { // studentArr형 Student형 이름 내맘대로 s라고 함
			if (s == null)
				break; // 안적어주면 에러남
			System.out.println("이름 : " + s.getName());
			System.out.println("총점 : " + s.getTotal());
			System.out.println("평균 : " + s.getAverage());
			System.out.println();
		}
	}

	public static void main(String[] args) {
		Teacher t = new Teacher(); // 학생을 관리할 선생님 만들기 -> 이하 종료 선택시까지 반복
		while (true) {
			t.showMenu(); // 업무 목록 보여주고 입력 받아야 함
			int no = BookMain.sc.nextInt(); // 원하는 업무를 받음
			switch (no) {
			case 1: t.inputData(); break;
			case 2: t.viewData();; break;
			case 3: System.out.println("종료");
					System.exit(0);
			default: System.out.println("입력오류");
			} 
		}
	}
}

Student.java

package com.day05_object;

public class Student { //이름, 성적(국어, 영어, 수학)을 가진다.
	private String name;
	private int kor, eng, math;
	
	public Student(String name, int kor, int eng, int math) { //값을 받아야 하니까 생성자 만들어줌
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	
	public int getTotal() { //총점 구하기
		return kor + eng + math;
	}
	
	public double getAverage() { //평균 구하기
		return getTotal()/3;
	}
	
	public String getName() { //getter 만들기
		return name;
	}
}


1. 성적 입력
2. 성적 확인
3. 종료
업무를 선택하세요 >>
1
성적입력..
학생 이름 입력
홍길동
국어 성적 입력
50
영어 성적 입력
30
수학 성적 입력
40

1. 성적 입력
2. 성적 확인
3. 종료
업무를 선택하세요 >>
1
성적입력..
학생 이름 입력
강감찬
국어 성적 입력
80
영어 성적 입력
60
수학 성적 입력
80

1. 성적 입력
2. 성적 확인
3. 종료
업무를 선택하세요 >>
2

성적 리스트...
이름 : 홍길동
총점 : 120
평균 : 40.0

이름 : 강감찬
총점 : 220
평균 : 73.0


1. 성적 입력
2. 성적 확인
3. 종료
업무를 선택하세요 >>
3
종료

 

studentArr[cnt++] = new Student(name, kor, eng, math);

배열 안에 들어가는 것 보기

 

 

학급 총점, 평균 구하기

package com.day05_object;

import java.util.Scanner;

public class Teacher { // 학생의 성적 관리

	// 20명의 학생 관리
	Student[] studentArr = new Student[20];
	private int cnt;

	// 무슨 업무를 할지 물어보고 입력 받기
	public void showMenu() {
		System.out.println();
		System.out.println("1. 성적 입력");
		System.out.println("2. 성적 확인");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요 >>");
	}

	// 성적 입력
	public void inputData() { // 이름, 국어, 영어, 수학 점수 입력
		System.out.println("성적입력..");
		System.out.println("학생 이름 입력");
		String name = BookMain.sc.next();
		System.out.println("국어 성적 입력");
		int kor = BookMain.sc.nextInt();
		System.out.println("영어 성적 입력");
		int eng = BookMain.sc.nextInt();
		System.out.println("수학 성적 입력");
		int math = BookMain.sc.nextInt();

		studentArr[cnt++] = new Student(name, kor, eng, math); // 후위 연산자 -> 0부터 받고 그 후 ++되어서 1 2 3 .. 이렇게 받음
	}

	// 성적 확인 : 성적 리스트 + 학급 총점, 평균 추가
	public void viewData() {
		int sum=0; //학급 총점 저장하기 위해서
		System.out.println();
		System.out.println("성적 리스트...");
		for (Student s : studentArr) { // studentArr형 Student형 이름 내맘대로 s라고 함
			if (s == null)
				break; // 안적어주면 에러남
			System.out.println("이름 : " + s.getName());
			System.out.println("총점 : " + s.getTotal());
			System.out.println("평균 : " + s.getAverage());
			System.out.println();
			sum += s.getTotal();
		}
		//학급 총점, 학급 평균
		System.out.println("학급 총점 : " + sum);
		System.out.println("학급 평균 : " + (double)(sum/cnt));
	}

	public static void main(String[] args) {
		Teacher t = new Teacher(); // 학생을 관리할 선생님 만들기 -> 이하 종료 선택시까지 반복
		while (true) {
			t.showMenu(); // 업무 목록 보여주고 입력 받아야 함
			int no = BookMain.sc.nextInt(); // 원하는 업무를 받음
			//BookMain.sc.nextline(); -> 위에서 nextInt();로 썼으면 상관없으나 nextline();으로 썼으면 적어줘야 함
			switch (no) {
			case 1: t.inputData(); break;
			case 2: t.viewData(); break;
			case 3: System.out.println("종료");
					System.exit(0);
			default: System.out.println("입력오류");
			} 
		}
	}
}



1. 성적 입력
2. 성적 확인
3. 종료
업무를 선택하세요 >>
1
성적입력..
학생 이름 입력
aaa
국어 성적 입력
0
영어 성적 입력
80
수학 성적 입력
50

1. 성적 입력
2. 성적 확인
3. 종료
업무를 선택하세요 >>
1
성적입력..
학생 이름 입력
bbb
국어 성적 입력
60
영어 성적 입력
80
수학 성적 입력
90

1. 성적 입력
2. 성적 확인
3. 종료
업무를 선택하세요 >>
1
성적입력..
학생 이름 입력
ccc
국어 성적 입력
100
영어 성적 입력
100
수학 성적 입력
100

1. 성적 입력
2. 성적 확인
3. 종료
업무를 선택하세요 >>
2

성적 리스트...
이름 : aaa
총점 : 130
평균 : 43.0

이름 : bbb
총점 : 230
평균 : 76.0

이름 : ccc
총점 : 300
평균 : 100.0

학급 총점 : 660
학급 평균 : 220.0

1. 성적 입력
2. 성적 확인
3. 종료
업무를 선택하세요 >>
3
종료

 

석차, 등수 구하기

Ex) 45 55 60 70 33 이 있으면

1등 70

2등 60

3등 55

4등 45

5등 33

일일히 다 비교해야 함

 

-> 처음부터 모두 1등으로 부여 후 첫 번째 숫자 45를 나머지와 비교 후 작으면 +1

45  55  60  70  33 -> 45를 55, 60, 70, 30과 비교

1   1    1   1   1

+1                      ->55보다 작음

+1                      ->60보다 작음

+1                      ->70보다 작음

                  +1   ->33이 더 작음

--------------------

4    1    1   1  2      

 

45  55  60  70  33 -> 55를 60, 70, 33과 비교

4   1    1   1   2

    +1                   ->60보다 작음

    +1                   ->70보다 작음

                  +1     ->33이 더 작음

--------------------

4    3    1   1  3 

    

45  55  60  70  33 -> 60을 70, 33과 비교

4    3    1   1  3 

          +1            ->70보다 작음

                  +1     ->33이 더 작음

--------------------

4    3    2   1  4 

 

45  55  60  70  33 -> 70을 33과 비교

4    3    2   1  4 

                  +1     ->33이 더 작음

--------------------

4    3    2   1  5

 

45  55  60  70  33 -> 33은 나머지와 비교할 필요 없음

4    3    2   1  5

 

-> 이중 for문 필요

 

Student.java에서

private int rank=1; -> 모두 1등으로 부여하고 시작

package com.day05_object;

public class Student { //이름, 성적(국어, 영어, 수학)을 가진다.
	private String name;
	private int kor, eng, math;
	private int rank = 1;
	
	public Student(String name, int kor, int eng, int math) { //값을 받아야 하니까 생성자 만들어줌
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	
	public int getTotal() { //총점 구하기
		return kor + eng + math;
	}
	
	public double getAverage() { //평균 구하기
		return getTotal()/3;
	}
	
	public String getName() { //getter 만들기
		return name;
	}
}

Teacher.java 에 석차 구하는 메소드 추가

package com.day05_object;

import java.util.Scanner;

public class Teacher { // 학생의 성적 관리

	// 20명의 학생 관리
	Student[] studentArr = new Student[20];
	private int cnt;

	// 무슨 업무를 할지 물어보고 입력 받기
	public void showMenu() {
		System.out.println();
		System.out.println("1. 성적 입력");
		System.out.println("2. 성적 확인");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요 >>");
	}

	// 성적 입력
	public void inputData() { // 이름, 국어, 영어, 수학 점수 입력
		System.out.println("성적입력..");
		System.out.println("학생 이름 입력");
		String name = BookMain.sc.next();
		System.out.println("국어 성적 입력");
		int kor = BookMain.sc.nextInt();
		System.out.println("영어 성적 입력");
		int eng = BookMain.sc.nextInt();
		System.out.println("수학 성적 입력");
		int math = BookMain.sc.nextInt();

		studentArr[cnt++] = new Student(name, kor, eng, math); // 후위 연산자 -> 0부터 받고 그 후 ++되어서 1 2 3 .. 이렇게 받음
	}

	// 성적 확인 : 성적 리스트 + 학급 총점, 평균 추가
	public void viewData() {
		int sum=0; //학급 총점 저장하기 위해서
		System.out.println();
		System.out.println("성적 리스트...");
		for (Student s : studentArr) { // studentArr형 Student형 이름 내맘대로 s라고 함
			if (s == null)
				break; // 안적어주면 에러남
			System.out.println("이름 : " + s.getName());
			System.out.println("총점 : " + s.getTotal());
			System.out.println("평균 : " + s.getAverage());
			System.out.println();
			sum += s.getTotal();
		}
		//학급 총점, 학급 평균
		System.out.println("학급 총점 : " + sum);
		System.out.println("학급 평균 : " + (double)(sum/cnt));
	}
	
	private void rankMethod() { //석차 구하는 메소드
		
	}

	public static void main(String[] args) {
		Teacher t = new Teacher(); // 학생을 관리할 선생님 만들기 -> 이하 종료 선택시까지 반복
		while (true) {
			t.showMenu(); // 업무 목록 보여주고 입력 받아야 함
			int no = BookMain.sc.nextInt(); // 원하는 업무를 받음
			//BookMain.sc.nextline(); -> 위에서 nextInt();로 썼으면 상관없으나 nextline();으로 썼으면 적어줘야 함
			switch (no) {
			case 1: t.inputData(); break;
			case 2: t.viewData(); break;
			case 3: System.out.println("종료");
					System.exit(0);
			default: System.out.println("입력오류");
			} 
		}
	}
}

 

 

Teacher.java

package com.day05_object;

import java.util.Scanner;

public class Teacher { // 학생의 성적 관리

	// 20명의 학생 관리
	Student[] studentArr = new Student[20];
	private int cnt;

	// 무슨 업무를 할지 물어보고 입력 받기
	public void showMenu() {
		System.out.println();
		System.out.println("1. 성적 입력");
		System.out.println("2. 성적 확인");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요 >>");
	}

	// 성적 입력
	public void inputData() { // 이름, 국어, 영어, 수학 점수 입력
		System.out.println("성적입력..");
		System.out.println("학생 이름 입력");
		String name = BookMain.sc.next();
		System.out.println("국어 성적 입력");
		int kor = BookMain.sc.nextInt();
		System.out.println("영어 성적 입력");
		int eng = BookMain.sc.nextInt();
		System.out.println("수학 성적 입력");
		int math = BookMain.sc.nextInt();

		studentArr[cnt++] = new Student(name, kor, eng, math); // 후위 연산자 -> 0부터 받고 그 후 ++되어서 1 2 3 .. 이렇게 받음
	}

	// 성적 확인 : 성적 리스트 + 학급 총점, 평균 추가
	public void viewData() {
		rankMethod(); //성적 구하는 메소드
		int sum=0; //학급 총점 저장하기 위해서
		System.out.println();
		System.out.println("성적 리스트...");
		for (Student s : studentArr) { // studentArr형 Student형 이름 내맘대로 s라고 함
			if (s == null)
				break; // 안적어주면 에러남
			System.out.println("이름 : " + s.getName());
			System.out.println("총점 : " + s.getTotal());
			System.out.println("평균 : " + s.getAverage());
			System.out.println("석차 : " + s.getRank());
			System.out.println();
			sum += s.getTotal();
		}
		//학급 총점, 학급 평균
		System.out.println("학급 총점 : " + sum);
		System.out.println("학급 평균 : " + (double)(sum/cnt));
	}
	
	private void rankMethod() { //석차 구하는 메소드
		for(int i=0; i<cnt-1; i++) { //  -1해주는 이유 : 마지막 석차는 for 할 필요 없음
			for(int j=i+1; j<cnt; j++) { //0번째와 1, 2, 3 .. 비교 -> 1번째와 2, 3, 4, .. 비교 -> 자기 자신+1과 비교 시작
				if(studentArr[i].getTotal() > studentArr[j].getTotal()) {
					studentArr[j].setRank();
				} else if(studentArr[i].getTotal() < studentArr[j].getTotal()) {
					studentArr[i].setRank();
				}
			}
		}
	}

	public static void main(String[] args) {
		Teacher t = new Teacher(); // 학생을 관리할 선생님 만들기 -> 이하 종료 선택시까지 반복
		while (true) {
			t.showMenu(); // 업무 목록 보여주고 입력 받아야 함
			int no = BookMain.sc.nextInt(); // 원하는 업무를 받음
			//BookMain.sc.nextline(); -> 위에서 nextInt();로 썼으면 상관없으나 nextline();으로 썼으면 적어줘야 함
			switch (no) {
			case 1: t.inputData(); break;
			case 2: t.viewData(); break;
			case 3: System.out.println("종료");
					System.exit(0);
			default: System.out.println("입력오류");
			} 
		}
	}
}

Student.java

package com.day05_object;

public class Student {
	private String name;
	private int kor, eng, math;
	private int rank=1;
	
	
	public Student(String name, int kor, int eng, int math) { //생성자
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	
	//총점
	public int getTotal() {
		return kor + eng + math;
	}
	
	//평균
	public double getAvergage() {
		return getTotal()/3;
	}
	
	//getter 만들기
	public String getName() {
		return name;
	}
	
	public void setRank() {
		this.rank++;
	}
	
	public int getRank() {
		return rank;
	}

}


1. 성적입력
2. 성적 전체보기
3. 종료
업무를 선택하세요>>
1
성적입력..
학생 이름 입력
김아무개
국어 성적 입력 : 
80
영어 성적 입력 : 
90
수학 성적 입력 : 
50

1. 성적입력
2. 성적 전체보기
3. 종료
업무를 선택하세요>>
1
성적입력..
학생 이름 입력
김길자
국어 성적 입력 : 
15
영어 성적 입력 : 
30
수학 성적 입력 : 
50

1. 성적입력
2. 성적 전체보기
3. 종료
업무를 선택하세요>>
1
성적입력..
학생 이름 입력
장하림
국어 성적 입력 : 
80
영어 성적 입력 : 
99
수학 성적 입력 : 
100

1. 성적입력
2. 성적 전체보기
3. 종료
업무를 선택하세요>>
2

성적 리스트...
이름 : 김아무개
총점 : 220
평균 : 73.0
석차 : 2

이름 : 김길자
총점 : 95
평균 : 31.0
석차 : 4

이름 : 장하림
총점 : 279
평균 : 93.0
석차 : 1

학급총점 : 594
학급평균 : 198

1. 성적입력
2. 성적 전체보기
3. 종료
업무를 선택하세요>>
3
종료

 

배열 : 내가 크기를 결정해야 함, 중간에 바꿀 수 없음

ex) 학생 중 한명을 삭제하고싶다, 책 중 하나를 삭제하고 싶다.

1 2 3 4 5 6 7  중 4번이 삭제됐다 -> 1 2 3   5 6 7 을 -> 1 2 3 4 5 6 으로 바꿔주어야 함

 

https://docs.oracle.com/javase/8/docs/api/

 

Java Platform SE 8

 

docs.oracle.com

 

ArrayListTest.java

배열과 비교해보기

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		// 배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있다.
		alist.add(1);
		alist.add("two");
		alist.add(2);
		System.out.println("배열 길이 : " + arr.length); //배열 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못 씀
	}

}

배열 길이 : 5
alist 길이 : 4

 

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		//배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있음
		alist.add(1);
		alist.add("two");
		alist.add(2);
		System.out.println("배열 길이 : " + arr.length); //배열의 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못씀
		
		
		for(int i=0; i<alist.size(); i++) {
			System.out.println(alist.get(i));
		}
	}

}

배열 길이 : 5
alist 길이 : 4
One
1
two
2

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		//배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있음
		alist.add(1);
		alist.add("two");
		alist.add(2);
		System.out.println("배열 길이 : " + arr.length); //배열의 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못씀
		alist.add(1, "apple");
		
		for(int i=0; i<alist.size(); i++) {
			System.out.println(alist.get(i));
		}
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못씀
	}

}

배열 길이 : 5
alist 길이 : 4
One     
apple -> [1] 위치에 apple이 들어감
1
two
2

alist 길이 : 5 -> 자동으로 길이 변함

 

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		//배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있음
		alist.add(1);
		alist.add("two");
		alist.add(2);
		System.out.println("배열 길이 : " + arr.length); //배열의 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못씀
		alist.add(1, "apple");
		alist.add("three");
		
		for(int i=0; i<alist.size(); i++) {
			System.out.println(alist.get(i));
		}
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못씀
	}

}

배열 길이 : 5
alist 길이 : 4
One
apple
1
two
2
three

alist 길이 : 6

 

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		// 배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있다.
		alist.add(1);
		alist.add("two");
		alist.add(2);
		System.out.println("배열 길이 : " + arr.length); //배열 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못 씀
		alist.add(1, "apple");
		alist.add("three");
		
		//for(int i=0;i<alist.size();i++) {
		//	System.out.println(alist.get(i));
		//}
		
		System.out.println(alist.get(2));
	}

}

배열 길이 : 5
alist 길이 : 4
1

 

alist에 마지막에 있는 값을 출력하고싶다.

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		// 배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있다.
		alist.add(1);
		alist.add("two");
		alist.add(2);
		System.out.println("배열 길이 : " + arr.length); //배열 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못 씀
		alist.add(1, "apple");
		alist.add("three");
		
		for(int i=0;i<alist.size();i++) {
			System.out.println(alist.get(i));
		}
		
		System.out.println("alist 2의 값 : " + alist.get(2));
		System.out.println("alist의 마지막 원소 : " + alist.get(alist.size()-1)); //alist.size는 갯수 -> 인덱스 주소보다 한 개가 더 많다. 그러므로 -1해줌
	}

}

배열 길이 : 5
alist 길이 : 4
One
apple
1
two
2
three
alist 2의 값 : 1
alist의 마지막 원소 : three

 

마지막 값이 바뀐다

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		// 배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있다.
		alist.add(1);
		alist.add("two");
		alist.add(2);
		System.out.println("배열 길이 : " + arr.length); //배열 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못 씀
		alist.add(1, "apple");
		alist.add("three");
		alist.add("딸기");
		
		for(int i=0;i<alist.size();i++) {
			System.out.println(alist.get(i));
		}
		
		System.out.println("alist 2의 값 : " + alist.get(2));
		System.out.println("alist의 마지막 원소 : " + alist.get(alist.size()-1)); //alist.size는 갯수 -> 인덱스 주소보다 한 개가 더 많다. 그러므로 -1해줌
	}

}

배열 길이 : 5
alist 길이 : 4
One
apple
1
two
2
three
딸기
alist 2의 값 : 1
alist의 마지막 원소 : 딸기

 

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		// 배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있다.
		alist.add(1);
		alist.add("two");
		alist.add(2);
		System.out.println("배열 길이 : " + arr.length); //배열 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못 씀
		alist.add(1, "apple");
		alist.add("three");
		alist.add("딸기");
		alist.add("바나나");
		
		for(int i=0;i<alist.size();i++) {
			System.out.println(alist.get(i));
		}
		
		System.out.println("alist 2의 값 : " + alist.get(2));
		System.out.println("alist의 마지막 원소 : " + alist.get(alist.size()-1)); //alist.size는 갯수 -> 인덱스 주소보다 한 개가 더 많다. 그러므로 -1해줌
	}

}

배열 길이 : 5
alist 길이 : 4
One
apple
1
two
2
three
딸기
alist 2의 값 : 1
alist의 마지막 원소 : 바나나

 

삭제

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		// 배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있다.
		alist.add(1);
		alist.add("two");
		alist.add(2);
		System.out.println("배열 길이 : " + arr.length); //배열 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못 씀
		alist.add(1, "apple");
		alist.add("three");
		alist.add("딸기");
		alist.add("바나나");
		alist.remove("딸기");
		
		for(int i=0;i<alist.size();i++) {
			System.out.println(alist.get(i));
		}
		
		System.out.println("alist 2의 값 : " + alist.get(2));
		System.out.println("alist의 마지막 원소 : " + alist.get(alist.size()-1)); //alist.size는 갯수 -> 인덱스 주소보다 한 개가 더 많다. 그러므로 -1해줌
	}

}

배열 길이 : 5
alist 길이 : 4
One
apple
1
two
2
three
바나나
alist 2의 값 : 1
alist의 마지막 원소 : 바나나

 

alist.clrear(); 로 모두 삭제 시켜줄 수 있는데 에러가 나는 이유는

값이 없는데 alist.get(2), alist.get(alist.size()-1) 처럼 접근하려고 해서!

 

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		// 배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있다.
		alist.add(1);
		alist.add("two");
		alist.add(2);
		System.out.println("배열 길이 : " + arr.length); //배열 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못 씀
		alist.add(1, "apple");
		alist.add("three");
		alist.add("딸기");
		alist.add("바나나");
		alist.remove("딸기");
		//alist.clrear();
		alist.remove(0); //이렇게 번호로도 접근 가능
		
		for(int i=0;i<alist.size();i++) {
			System.out.println(alist.get(i));
		}
		
		System.out.println("alist 2의 값 : " + alist.get(2));
		System.out.println("alist의 마지막 원소 : " + alist.get(alist.size()-1)); //alist.size는 갯수 -> 인덱스 주소보다 한 개가 더 많다. 그러므로 -1해줌
	}

}

배열 길이 : 5
alist 길이 : 4
apple
1
two
2
three
바나나
alist 2의 값 : two
alist의 마지막 원소 : 바나나

 

<ArrayList 객체를 취급함>

- 삭제, 추가 되어도 배열의 위치? 순서?를 우리가 일일히 바꾸어 주지 않아도 된다. -> 알아서 바뀐다. -> 동적이다.

 

자바의 기본 데이터형 8가지(값을 가진다)

boolean char

byte short int long

float double

=====

참조변수 3가지(주소값을 가진다)

배열    객체     인터페이스

 

ArrayList 객체 취급

-> 위의 자바의 기본 데이터형 8가지는 사용 불가 -> 그러나 우리는 사용했는데 -> 버전이 업 되면서 사용 가능해진 것!

(boolean char byte short int long float double)

자바가 내부적으로 내가 사용한 기본 데이터형을 객체로 바꾸어준 것

ex)

기본데이터형 <===>  클래스(ArrayList에서는 이 클래스를 사용해주어야 함)

int               <===> Integer(래퍼클래스)

byte            <===> Byte

char            <===> Character

 

자바가 ArrayList를 쓸 때 기본데이터형을 쓰면 이를 래퍼클래스로 바꾸어주기 때문에 사용이 가능해진 것

원래는 사용이 불가능하다.

원래는 위같이가 아니라 아래와 같이 써주어야 한다.

그러나 자바 가상머신이 알아서 한번 더 바꾸어 주어서(래퍼클래스) 사용 가능

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		// 배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있다.
		alist.add(1);
		alist.add("two");
		alist.add(2);
		alist.add(new Integer(2));
		System.out.println("배열 길이 : " + arr.length); //배열 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못 씀
		alist.add(1, "apple");
		alist.add("three");
		alist.add("딸기");
		alist.add("바나나");
		alist.remove("딸기");
		//alist.clrear();
		alist.remove(0); //이렇게 번호로도 접근 가능
		
		for(int i=0;i<alist.size();i++) {
			System.out.println(alist.get(i));
		}
		
		System.out.println("alist 2의 값 : " + alist.get(2));
		System.out.println("alist의 마지막 원소 : " + alist.get(alist.size()-1)); //alist.size는 갯수 -> 인덱스 주소보다 한 개가 더 많다. 그러므로 -1해줌
	}

}

배열 길이 : 5
alist 길이 : 5
apple
1
two
2
2
three
바나나
alist 2의 값 : two
alist의 마지막 원소 : 바나나

 

for-each문 써보기

//for-each
for() { //어떤 건 int형, 어떤 건 String형이 들어가있어서 뭐라고 써줘야할까?
	
}

그러나 위를 보면 어떤 건 int형(2, 5), 어떤 건 String형(딸기, 바나나)이 들어가있어서 자료형을 어떤 걸 써줘야할까?

모든 걸 아루는 Object를 써주면 된다.

//for-each
	for(Object obj : alist) { //어떤 건 int형, 어떤 건 String형이 들어가있어서 뭐라고 써줘야할까?
		System.out.println(obj);
	}

전체

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		// 배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있다.
		alist.add(1);
		alist.add("two");
		alist.add(2);
		alist.add(new Integer(2));
		System.out.println("배열 길이 : " + arr.length); //배열 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못 씀
		alist.add(1, "apple");
		alist.add("three");
		alist.add("딸기");
		alist.add("바나나");
		alist.remove("딸기");
		//alist.clrear();
		alist.remove(0); //이렇게 번호로도 접근 가능
		
		for(int i=0;i<alist.size();i++) {
			System.out.println(alist.get(i));
		}
		
		System.out.println("alist 2의 값 : " + alist.get(2));
		System.out.println("alist의 마지막 원소 : " + alist.get(alist.size()-1)); //alist.size는 갯수 -> 인덱스 주소보다 한 개가 더 많다. 그러므로 -1해줌
		System.out.println("================================");
		
		//for-each
		for(Object obj : alist) { //어떤 건 int형, 어떤 건 String형이 들어가있어서 뭐라고 써줘야할까?
			System.out.println(obj);
		}
	}

}

배열 길이 : 5
alist 길이 : 5
apple
1
two
2
2
three
바나나
alist 2의 값 : two
alist의 마지막 원소 : 바나나
================================
apple
1
two
2
2
three
바나나

 

ArrayList blist = new ArrayList();
		blist.add("과일");
		blist.add(1);
		for(Object ob : blist) {
			System.out.println(ob);
		}

생성

object로 접근하기에는 불편 -> String만 넣을 수 있다고 정의

당연히 String형이 아닌 1은 못옴 -> 에러

 

E는 정해진게 아니고 Element라는 뜻

 

package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		// 배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있다.
		alist.add(1);
		alist.add("two");
		alist.add(2);
		alist.add(new Integer(2));
		System.out.println("배열 길이 : " + arr.length); //배열 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못 씀
		alist.add(1, "apple");
		alist.add("three");
		alist.add("딸기");
		alist.add("바나나");
		alist.remove("딸기");
		//alist.clrear();
		alist.remove(0); //이렇게 번호로도 접근 가능
		
		for(int i=0;i<alist.size();i++) {
			System.out.println(alist.get(i));
		}
		
		System.out.println("alist 2의 값 : " + alist.get(2));
		System.out.println("alist의 마지막 원소 : " + alist.get(alist.size()-1)); //alist.size는 갯수 -> 인덱스 주소보다 한 개가 더 많다. 그러므로 -1해줌
		System.out.println("================================");
		
		//for-each
		for(Object obj : alist) { //어떤 건 int형, 어떤 건 String형이 들어가있어서 뭐라고 써줘야할까?
			System.out.println(obj);
		}
		
		
		//제네릭 -> 이렇게 유형을 정하는 것
		ArrayList<String> blist = new ArrayList<>(); //object로 접근하기에는 불편 -> String만 넣을 수 있다고 정의
		blist.add("과일");
		//blist.add(1);
		for(String ob : blist) { 
			System.out.println(ob);
		}
	}

}
package com.day05_object;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		// 배열
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		
		ArrayList alist = new ArrayList();
		alist.add("One"); //반드시 add라는 명령어에 의해 넣을 수 있다.
		alist.add(1);
		alist.add("two");
		alist.add(2);
		alist.add(new Integer(2));
		System.out.println("배열 길이 : " + arr.length); //배열 길이
		System.out.println("alist 길이 : " + alist.size()); //ArrayList 길이 -> length 못 씀
		alist.add(1, "apple");
		alist.add("three");
		alist.add("딸기");
		alist.add("바나나");
		alist.remove("딸기");
		//alist.clrear();
		alist.remove(0); //이렇게 번호로도 접근 가능
		
		for(int i=0;i<alist.size();i++) {
			System.out.println(alist.get(i));
		}
		
		System.out.println("alist 2의 값 : " + alist.get(2));
		System.out.println("alist의 마지막 원소 : " + alist.get(alist.size()-1)); //alist.size는 갯수 -> 인덱스 주소보다 한 개가 더 많다. 그러므로 -1해줌
		System.out.println("================================");
		
		//for-each
		for(Object obj : alist) { //어떤 건 int형, 어떤 건 String형이 들어가있어서 뭐라고 써줘야할까?
			System.out.println(obj);
		}
		
		
		//제네릭 -> 이렇게 유형을 정하는 것
		ArrayList<String> blist = new ArrayList<>(); //object로 접근하기에는 불편 -> String만 넣을 수 있다고 정의
		blist.add("과일");
		//blist.add(1);
		for(String ob : blist) { 
			System.out.println(ob);
		}
		
		//제네릭 -> 이렇게 유형을 정하는 것
		ArrayList<Integer> clist = new ArrayList<>(); //object로 접근하기에는 불편 -> String만 넣을 수 있다고 정의

		clist.add(1);
		clist.add(2);
		//clist.add("과일");		
		for(int i : clist) { 
			System.out.println(i);
		}
		
	}

}

배열 길이 : 5
alist 길이 : 5
apple
1
two
2
2
three
바나나
alist 2의 값 : two
alist의 마지막 원소 : 바나나
================================
apple
1
two
2
2
three
바나나
과일
1
2

 

제네릭 : Object형이 아닌 특정 형으로 정해주는 것을 말함

 

Student.java, Teacher.java에서는 배열 형태로 넣었기 때문에 학생 수를 정확히 정했어야 했음

Teacher.java를 복사해보자

Teacher.java 선택 -> Ctrl + C

패키지 com.day05_object 선택 -> Ctral + V

 

package com.day05_object;

import java.util.ArrayList;

public class Teacher2 { //선생님이 할 수 있는 일 : 성적 입력, 성적 확인
	//앞의 Teacher.java에서 배열을 ArrayList로 바꾸기
	ArrayList alist = new ArrayList();
	//private int cnt; 배열이 알아서 추가됨 -> cnt필요 없음
	
	//업무 목록 선택
	public void showMenu() {
		rankMethod(); //석차 구하는 메소드
		System.out.println();
		System.out.println("1. 성적입력");
		System.out.println("2. 성적 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	//성적 입력
	public void intputDtata() {
		// 이름, 국어, 영어, 수학 점수 입력
		System.out.println("성적입력..");
		System.out.println("학생 이름 입력");
		String name = BookMain.sc.next();
		System.out.println("국어 성적 입력 : ");
		int kor = BookMain.sc.nextInt();
		System.out.println("영어 성적 입력 : ");
		int eng = BookMain.sc.nextInt();
		System.out.println("수학 성적 입력 : ");
		int math = BookMain.sc.nextInt();
	
		//에러 : arr[cnt++] = new Student(name, kor, eng, math);
		alist.add(new Student(name, kor, eng, math));
	}
	
	//성적 리스트
	public void veiwtDtata() {
		int sum=0;
		System.out.println();
		System.out.println("성적 리스트...");
		for(Object s : alist) {
			if(s==null) break;
			System.out.println("이름 : " + ((Student)s).getName()); //getName() student가 가지는 것 -> Object형은 정확하게 적어주어야 함
			System.out.println("총점 : " + ((Student)s).getTotal());
			System.out.println("평균 : " + ((Student)s).getAvergage());
			System.out.println("석차 : " + ((Student)s).getRank());
			System.out.println();
			sum += ((Student)s).getTotal();
		}
		//학급 총점, 평균 구하기		
		System.out.println("학급총점 : " + sum);
		System.out.println("학급평균 : " + sum/alist.size());
	}
	
	private void rankMethod() { //석차 구하는 메소드
		for(int i=0; i<alist.size()-1; i++) { 
			for(int j=i+1; j<alist.size(); j++) { //0번째 1, 0번째 2 .. 이렇게 비교 -> 자기 자신+1 과 비교
				if(((Student)alist.get(i)).getTotal() > ((Student)alist.get(j)).getTotal()) {
					((Student)alist.get(j)).setRank();
				} else if (((Student)alist.get(i)).getTotal() < ((Student)alist.get(j)).getTotal()) {
					((Student)alist.get(i)).setRank();
				}
			}
		}
	}
	

	public static void main(String[] args) {
		Teacher2 teacher = new Teacher2();
		while(true) {
			teacher.showMenu();
			int num = BookMain.sc.nextInt(); //BookMain에서 만든 Scanner는 static으로 해놨기 때문에 여기서도 사용 가능 -> 굳이 또 안만들고 갖다 쓰면 됨
			// BookMain.sc.nextLine(); -> 위에서 nextInt();로 썼으면 상관없으나 nextLine();으로 받았으면 이걸 적어줘야 함
			switch(num) {
			case 1 : teacher.intputDtata(); break;
			case 2 : teacher.veiwtDtata(); break;
			case 3 : System.out.println("종료");
				     System.exit(0);
			default : System.out.println("입력오류");
			
			}
		}
	}
}

[배열을 ArrayList로 전환]


1. 성적입력
2. 성적 전체보기
3. 종료
업무를 선택하세요>>
1
성적입력..
학생 이름 입력
aa
국어 성적 입력 : 
11 11 11
영어 성적 입력 : 
수학 성적 입력 : 

1. 성적입력
2. 성적 전체보기
3. 종료
업무를 선택하세요>>
1
성적입력..
학생 이름 입력
bb
국어 성적 입력 : 
22 22 22
영어 성적 입력 : 
수학 성적 입력 : 

1. 성적입력
2. 성적 전체보기
3. 종료
업무를 선택하세요>>
2

성적 리스트...
이름 : aa
총점 : 33
평균 : 11.0
석차 : 2

이름 : bb
총점 : 66
평균 : 22.0
석차 : 1

학급총점 : 99
학급평균 : 49

1. 성적입력
2. 성적 전체보기
3. 종료
업무를 선택하세요>>
3
종료

 

Teacher3.java : Teacher.java를 ArrayList<Student> blist = new ArrayList<>();로 변경 ->

Teacher2.java보다 제네릭을 이용한 이게 훨씬 편하다

package com.day05_object;

import java.util.ArrayList;

public class Teacher3 { //선생님이 할 수 있는 일 : 성적 입력, 성적 확인
	
	ArrayList<Student> blist = new ArrayList<>();
	
	//업무 목록 선택
	public void showMenu() {
		rankMethod(); //석차 구하는 메소드
		System.out.println();
		System.out.println("1. 성적입력");
		System.out.println("2. 성적 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	//성적 입력
	public void intputDtata() {
		// 이름, 국어, 영어, 수학 점수 입력
		System.out.println("성적입력..");
		System.out.println("학생 이름 입력");
		String name = BookMain.sc.next();
		System.out.println("국어 성적 입력 : ");
		int kor = BookMain.sc.nextInt();
		System.out.println("영어 성적 입력 : ");
		int eng = BookMain.sc.nextInt();
		System.out.println("수학 성적 입력 : ");
		int math = BookMain.sc.nextInt();
	
		//arr[cnt++] = new Student(name, kor, eng, math);
		blist.add(new Student(name, kor, eng, math)); //반드시 add
	}
	
	//성적 리스트
	public void veiwtDtata() {
		int sum=0;
		System.out.println();
		System.out.println("성적 리스트...");
		for(Student s : blist) { //blist로만 수정. Student형으로 했으니 이건 그대로 둠
			if(s==null) break;
			System.out.println("이름 : " + s.getName());
			System.out.println("총점 : " + s.getTotal());
			System.out.println("평균 : " + s.getAvergage());
			System.out.println("석차 : " + s.getRank());
			System.out.println();
			sum += s.getTotal();
		}
		//학급 총점, 평균 구하기		
		System.out.println("학급총점 : " + sum);
		System.out.println("학급평균 : " + sum/blist.size());
	}
	
	private void rankMethod() { //석차 구하는 메소드
		for(int i=0; i<blist.size()-1; i++) { //-1해주는 이유 : 마지막 석차는 for 할필요 없음
			for(int j=i+1; j<blist.size(); j++) { //0번째 1, 0번째 2 .. 이렇게 비교 -> 자기 자신+1 과 비교
				if(blist.get(i).getTotal() > blist.get(j).getTotal()) { //Stduent형만 들어간다고 했으니 아까처럼 ()해주고 할필요X
					blist.get(j).setRank();
				} else if (blist.get(i).getTotal() < blist.get(j).getTotal()) {
					blist.get(i).setRank();
				}
			}
		}
	}
	

	public static void main(String[] args) {
		Teacher3 teacher = new Teacher3();
		while(true) {
			teacher.showMenu();
			int num = BookMain.sc.nextInt(); //BookMain에서 만든 Scanner는 static으로 해놨기 때문에 여기서도 사용 가능 -> 굳이 또 안만들고 갖다 쓰면 됨
			// BookMain.sc.nextLine(); -> 위에서 nextInt();로 썼으면 상관없으나 nextLine();으로 받았으면 이걸 적어줘야 함
			switch(num) {
			case 1 : teacher.intputDtata(); break;
			case 2 : teacher.veiwtDtata(); break;
			case 3 : System.out.println("종료");
				     System.exit(0);
			default : System.out.println("입력오류");
			
			}
		}
	}
}

BookMain2.java : BookMain.java를 Arraylist로 만들기 -> 제네릭!

package com.day05_object;

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

public class BookMain2 {

	//Book[] arr = new Book[50]; -> Arraylist로 만들기
	ArrayList<Book> blist = new ArrayList<Book>();
	static Scanner sc = new Scanner(System.in);
	//책 입고을 할지, 리스트를 보여줄지 모르므로 Menu를 보여주고 선택하게 하기
	//cnt를 전역으로 써야 하니까 선언
	//private int cnt; ->이제 필요 없음
	
	
	public void showMenu() {
		System.out.println();
		System.out.println("1. 책 추가");
		System.out.println("2. 책 전체보기");
		System.out.println("3. 종료");
		System.out.println("업무를 선택하세요>>");
	}
	
	
	//책 입고 - 책 제목, 저자 등록하는 역할
	public void bookInsert() { //실제로 책 제목, 저자 입력받기
		System.out.println();
		System.out.println("책 입고>>");
		System.out.println("책 제목 입력 : ");
		String title = sc.nextLine(); //한 줄 입력 -> Enter를 치면 한 줄로 구분함
		System.out.println("책 저자 입력 : ");
		String writer = sc.nextLine();
	
		//arr[cnt++] = new Book(title, writer);
		blist.add(new Book(title, writer));
	}
	
	//책 리스트 - 등록된 책 제목, 저자를 알려주는 역할
	
	public void bookList() {
		System.out.println();
		System.out.println("리스트...");
	//	for(int i = 0; i<cnt; i++) {
	//		System.out.println("책제목 : " + arr[i].getTitle());
	//		System.out.println("책저자 : " + arr[i].getWriter());
	//		System.out.println();
	//	}
	//}
		//for-each
		for(Book b : blist) { //arr의 형 Book형 이름 b 내맘대로
			if(b==null) break;
			System.out.println("책 제목 : " + b.getTitle());
			System.out.println("책 저자:  : " + b.getWriter());
			System.out.println();
		}
	}

	public static void main(String[] args) {
		
		//직원 1명 만든다
		BookMain2 bm = new BookMain2();
		
		while(true) {
			bm.showMenu();
			int choice = sc.nextInt(); //1엔터 -> 엔터가 남아있는 것
			sc.nextLine(); // Enter 처리 위해 넣음
			switch(choice) {
			case 1 : bm.bookInsert(); break;
			case 2 : bm.bookList(); break;
			case 3 : System.out.println("종료");
					 System.exit(0); //전형적인 종료
			default : System.out.println("입력오류"); //그 외 -> 잘못 입력한 것이므로 오류라고 알려주기
			}
		}
	}

}

불가능! 무조건 Book형만 들어갈 수 있다.

Object형이었으면 가능했을 것

 

 

전화번호부 만들기 Phone.java, PhoneMain.java

Phone.java

package com.day05_object;

public class Phone {

	private String name;
	private String tel;
	
	//생성자
	public Phone(String name, String tel) {
		this.name = name;
		this.tel = tel;
	}

	
	//getter
	
	public String getName() {
		return name;
	}

	public String getTel() {
		return tel;
	}

	
}

 

PhoneMain.java

package com.day05_object;

import java.util.Scanner;

//배열이용
public class PhoneMain {
	
	Scanner sc = new Scanner(System.in);
	
	public void inputPhone() {
		
	}
	
	public void viewPhone() {
		
	}

	public static void main(String[] args) {

		PhoneMain pm = new PhoneMain();
		pm.inputPhone();
		pm.viewPhone();
		
	}
}

 

배열을 통해서 만들 것

 

package com.day05_object;

import java.util.Scanner;

//배열이용
public class PhoneMain {
	
	Scanner sc = new Scanner(System.in);
//	Phone[] arr = new Phone[]; //해버리면 []안에 수를 정해야 하는데 수는 밑에서 정할 것
	Phone[] arr; //1. 선언만!
	
	public void inputPhone() { //입력 수를 물어봄 -> 그 수만큼 만들 것
		System.out.println("입력갯수>>");
		int num = sc.nextInt();
		arr = new Phone[num]; //new ==> 생성, 2. 여기서 배열 길이 지정!

		//이름, 전화번호를 입력 받아 배열에 저장하기
		
	}
	
	public void viewPhone() {
		for(Phone p : arr) {
			System.out.println("이름 : " + p.getName());
			System.out.println("전화 : " + p.getTel());
			System.out.println();
		}
	}

	public static void main(String[] args) {

		PhoneMain pm = new PhoneMain();
		pm.inputPhone();
		pm.viewPhone();
		
	}
}

완성해보기

package com.day05_object;

import java.util.Scanner;

//배열이용
public class PhoneMain {
	
	Scanner sc = new Scanner(System.in);
//	Phone[] arr = new Phone[]; //해버리면 []안에 수를 정해야 하는데 수는 밑에서 정할 것
	Phone[] arr; //1. 선언만!
	
	public void inputPhone() { //입력 수를 물어봄 -> 그 수만큼 만들 것
		System.out.println("입력갯수>>"); //5 할것임
		int num = sc.nextInt();
		arr = new Phone[num]; //new ==> 생성, 2. 여기서 배열 길이 지정!

		//이름, 전화번호를 입력 받아 배열에 저장하기
		for(int i=0; i<arr.length; i++ ) {
			System.out.println("이름 : ");
			String name = sc.next();
			System.out.println("전화 : ");
			String tel = sc.next();
			
			arr[i] = new Phone(name, tel);
		}
		
	}
	
	public void viewPhone() {
		for(Phone p : arr) {
			System.out.println("이름 : " + p.getName());
			System.out.println("전화 : " + p.getTel());
			System.out.println();
		}
	}

	public static void main(String[] args) {

		PhoneMain pm = new PhoneMain();
		pm.inputPhone();
		pm.viewPhone();
		
	}
}

또는

package com.day05_object;

import java.util.Scanner;

//배열이용
public class PhoneMain {
	
	Scanner sc = new Scanner(System.in);
//	Phone[] arr = new Phone[]; //해버리면 []안에 수를 정해야 하는데 수는 밑에서 정할 것
	Phone[] arr; //1. 선언만!
	
	public void inputPhone() { //입력 수를 물어봄 -> 그 수만큼 만들 것
		System.out.println("입력갯수>>"); //5 할것임
		int num = sc.nextInt();
		arr = new Phone[num]; //new ==> 생성, 2. 여기서 배열 길이 지정!

		//이름, 전화번호를 입력 받아 배열에 저장하기
		for(int i=0; i<arr.length; i++ ) {
			System.out.println("이름 : ");
			String name = sc.next();
			System.out.println("전화 : ");
			String tel = sc.next();
			
			arr[i] = new Phone();
			arr[i].setName(name);
			arr[i].setTel(tel);
		}
		
	}
	
	public void viewPhone() {
		for(Phone p : arr) {
			System.out.println("이름 : " + p.getName());
			System.out.println("전화 : " + p.getTel());
			System.out.println();
		}
	}

	public static void main(String[] args) {

		PhoneMain pm = new PhoneMain();
		pm.inputPhone();
		pm.viewPhone();
		
	}
}

여기서 오류 안나게 해보라

PhoneMain.java

package com.day05_object;

import java.util.Scanner;

//배열이용
public class PhoneMain {
	
	
	Scanner sc = new Scanner(System.in);
//	Phone[] arr = new Phone[]; //해버리면 []안에 수를 정해야 하는데 수는 밑에서 정할 것
	Phone[] arr; //1. 선언만!
	
	public void inputPhone() { //입력 수를 물어봄 -> 그 수만큼 만들 것
		System.out.println("입력갯수>>"); //5 할것임
		int num = sc.nextInt();
		arr = new Phone[num]; //new ==> 생성, 2. 여기서 배열 길이 지정!

		//이름, 전화번호를 입력 받아 배열에 저장하기
		for(int i=0; i<arr.length; i++ ) {
			System.out.println("이름 : ");
			String name = sc.next();
			System.out.println("전화 : ");
			String tel = sc.next();
			
			arr[i] = new Phone();
			arr[i].setName(name);
			arr[i].setTel(tel);
		}
		
	}
	
	
	public void viewPhone() {
		for(Phone p : arr) {
			System.out.println("이름 : " + p.getName());
			System.out.println("전화 : " + p.getTel());
			System.out.println();
		}
	}

	public static void main(String[] args) {

		PhoneMain pm = new PhoneMain();
		pm.inputPhone();
		pm.viewPhone();
		
	}
}

Phone.java

package com.day05_object;

public class Phone {

	private String name;
	private String tel;
	
	//생성자
	public Phone(String name, String tel) {
		this.name = name;
		this.tel = tel;
	}
	
	public Phone() {
	      
	   }
	
	//getter
	
	public String getName() {
		return name;
	}

	public String getTel() {
		return tel;
	}
	
	//setter
	public void setName(String name) {
		this.name = name;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	
}

 

PhoneMain2.java

package com.day05_object;

import java.util.Scanner;

//ArrayList이용
public class PhoneMain2 {
	Scanner sc = new Scanner(System.in);
	//	ArrayList alist 생성하기
	
	
	public void inputPhone() { //입력 수를 물어봄 -> 그 수만큼 만들 것
		System.out.println("입력갯수>>"); //5 할것임
		int num = sc.nextInt();
		
		for(int i=0; i<num; i++ ) { //이름, 전화번호 입력받아 alist에 저장하기
			System.out.println("이름 : ");
			String name = sc.next();
			System.out.println("전화 : ");
			String tel = sc.next();
			arr[i] = new Phone(name, tel);
		}
	}
	
	public void viewPhone() {
		for(Phone p : arr) {
			System.out.println("이름 : " + p.getName());
			System.out.println("전화 : " + p.getTel());
			System.out.println();
		}
	}

	public static void main(String[] args) {

		PhoneMain2 pm = new PhoneMain2();
		pm.inputPhone();
		pm.viewPhone();
		
	}
}

이것을 제네릭으로 작성해보라

package com.day05_object;

import java.util.ArrayList; //2.
import java.util.Scanner;

//ArrayList이용
public class PhoneMain2 {
	Scanner sc = new Scanner(System.in);
	//	ArrayList alist 생성하기
	ArrayList<Phone> alist = new ArrayList<>(); //1.
	
	
	public void inputPhone() { //입력 수를 물어봄 -> 그 수만큼 만들 것
		System.out.println("입력갯수>>"); //5 할것임
		int num = sc.nextInt();
		
		for(int i=0; i<num; i++ ) { //이름, 전화번호 입력받아 alist에 저장하기
			System.out.println("이름 : ");
			String name = sc.next();
			System.out.println("전화 : ");
			String tel = sc.next();
			//arr[i] = new Phone(name, tel);
			alist.add(new Phone(name, tel)); //3.
		}
	}
	
	public void viewPhone() {
		for(Phone p : alist) { //4.
			System.out.println("이름 : " + p.getName());
			System.out.println("전화 : " + p.getTel());
			System.out.println();
		}
	}

	public static void main(String[] args) {

		PhoneMain2 pm = new PhoneMain2();
		pm.inputPhone();
		pm.viewPhone();
		
	}
}

 

04 배열 응용 프로그램

[Student 클래스 구현하기] p.227~229

com.day05_arraylist 패키지 생성

Student.java, Subject.java, StudentTest.java

 

Student.java

package com.day05_arraylist;

import java.util.ArrayList;

public class Student {
	private int studentID;
	private String studentName;
	private ArrayList<Subject> subjectList; //학생이 과목을 여러개를 가진다

	public Student(int studentID, String studentName){ //생성자
		this.studentID = studentID;
		this.studentName = studentName;
		subjectList = new ArrayList<>();// 이게 없으면 subjectList가 만들어 진게 아니다
	}
	
	public void addSubject(String name, int score){
		Subject subject = new Subject();
		subject.setName(name);
		subject.setScorePoint(score);
		subjectList.add(subject);
	}
	
	public void showStudentInfo() {
		int total = 0;
		for(Subject s : subjectList) {
			total += s.getScorePoint();
			System.out.println("학생 : " + studentName);
			System.out.println("과목 : " + s.getName());
			System.out.println("성적 : " + s.getScorePoint());
			System.out.println();
		}
		
		System.out.println("학생 : " + studentName);
		System.out.println("총점 : " + total);
	}
}

 

Subject.java

package com.day05_arraylist;

public class Subject {
private String name;
private int scorePoint;
	public String getName() {
		return name;
	}
	public int getScorePoint() {
		return scorePoint;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setScorePoint(int scorePoint) {
		this.scorePoint = scorePoint;
	}



}

 

StudentTest.java

package com.day05_arraylist;

public class StudentTest {

	public static void main(String[] args) {
	Student studentLee = new Student(1001, "Lee");
		
		studentLee.addSubject("국어", 100);
		studentLee.addSubject("수학", 50);
		
		Student studentKim = new Student(1002, "Kim");
		
		studentKim.addSubject("국어", 70);
		studentKim.addSubject("수학", 85);
		studentKim.addSubject("영어", 100);
		
		studentLee.showStudentInfo();
		System.out.println("======================================");
		studentKim.showStudentInfo();

	}

}

학생 : Lee
과목 : 국어
성적 : 100

학생 : Lee
과목 : 수학
성적 : 50

학생 : Lee
총점 : 150
======================================
학생 : Kim
과목 : 국어
성적 : 70

학생 : Kim
과목 : 수학
성적 : 85

학생 : Kim
과목 : 영어
성적 : 100

학생 : Kim
총점 : 255 학생 : Lee

 

p.230 4번 문제 풀어보기

다음과 같이 Dog 클래스가 있다. DogTest 클래스와 배열 길이가 5인 Dog[] 배열을 만든 후 Dog 인스턴스를 5개 생성하여 배열에 추가합니다. for문과 향상된 for문(for-each)에서 Dog 클래스의 showDogInfo() 메서드를 사용하여 배열에 추가한 Dog 정보를 모두 출력하세요.

Dog.java

package com.day05_object;

public class Dog {
	private String name;
	private String type;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getType() {
		return type;
	}
	public void setType() {
		this.type = type;
	}
	public String showDogInfo() {
		return name + "," + type;
	}
}

DogTest.java

package com.day05_object;

public class DogTest {

	public static void main(String[] args) {
	

	}

}

 

풀이

1. Dog 배열 만들기

package com.day05_object;

public class DogTest {
	
	public static void main(String[] args) {	
		Dog[] doglist = new Dog[5];

	}

}

2. Dog 인스턴스를 5개 생성하여 배열에 추가

 

Dog.java

package com.day05_object;

public class Dog {
	private String name;
	private String type;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String showDogInfo() {
		return name + "," + type;
	}
}

DogTest.java

package com.day05_object;

public class DogTest {
	
	public static void main(String[] args) {
		Dog[] doglist = new Dog[5];
		
		doglist[0] = new Dog();
		doglist[0].setName("멍멍0");
		doglist[0].setType("강아지0");

		doglist[1] = new Dog();
		doglist[1].setName("멍멍1");
		doglist[1].setType("강아지1");

		doglist[2] = new Dog();
		doglist[2].setName("멍멍2");
		doglist[2].setType("강아지2");
		
		doglist[3] = new Dog();
		doglist[3].setName("멍멍3");
		doglist[3].setType("강아지3");
		
		doglist[4] = new Dog();
		doglist[4].setName("멍멍4");
		doglist[4].setType("강아지4");
		
		for(int i=0; i<doglist.length; i++) {
			System.out.println(doglist[i].showDogInfo());
		}
		System.out.println("=======");
		for(Dog dog : doglist) {
			System.out.println(dog.showDogInfo());
		}

	}

}

멍멍0,강아지0
멍멍1,강아지1
멍멍2,강아지2
멍멍3,강아지3
멍멍4,강아지4
=======
멍멍0,강아지0
멍멍1,강아지1
멍멍2,강아지2
멍멍3,강아지3
멍멍4,강아지4


내일은 상속 할 예정

728x90
728x90