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/
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
내일은 상속 할 예정
'프로그래밍 > 자바(java) 융합개발자 2차' 카테고리의 다른 글
[자바 7일차] 26일차 - 상속, 추상클래스, 추상메서드 , 인터페이스(Do it 공부단 p.234~) (0) | 2021.01.20 |
---|---|
[자바 6일차] 25일차 - 다차원 배열, 상속(Do it 공부단 p.219~) (0) | 2021.01.20 |
[자바 4일차] 23일차 - 클래스 (0) | 2021.01.15 |
[자바 3일차 2] 22일차 2 - 클래스, 객체 (0) | 2021.01.14 |
[자바 3일차] 22일차 - 배열, 난수 (0) | 2021.01.14 |