코딩/Java
kh15일차 (Generics,List,studentMgr4,pointMgr5...)
danmuji
2022. 7. 8. 17:40
Generics
-func
-Animal
package kh.java.func;
public class Animal {
private int hp;
public Animal() {
super();
// TODO Auto-generated constructor stub
}
public Animal(int hp) {
super();
this.hp = hp;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
}
AnimalMgr1
package kh.java.func;
public class AnimalMgr1 {
private Animal data;
public AnimalMgr1() {
super();
// TODO Auto-generated constructor stub
}
public AnimalMgr1(Animal data) {
super();
this.data = data;
}
public Animal getData() {
return data;
}
public void setData(Animal data) {
this.data = data;
}
}
AnimalMgr2
package kh.java.func;
public class AnimalMgr2<T> {
private T data;
public AnimalMgr2() {
super();
// TODO Auto-generated constructor stub
}
public AnimalMgr2(T data) {
super();
this.data = data;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
GenericeEx
package kh.java.func;
public class GenericeEx<T>{
private T data;
// private E data2;
public GenericeEx() {
super();
// TODO Auto-generated constructor stub
}
public GenericeEx(T data) {
super();
this.data = data;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
Rabbit
package kh.java.func;
public class Rabbit extends Animal{
public Rabbit() {
super();
// TODO Auto-generated constructor stub
}
public Rabbit(int hp) {
super(hp);
// TODO Auto-generated constructor stub
}
public void rabbitFuntion() {
System.out.println("토끼 기능");
}
}
Tiger
package kh.java.func;
public class Tiger extends Animal{
public Tiger() {
super();
// TODO Auto-generated constructor stub
}
public Tiger(int hp) {
super(hp);
// TODO Auto-generated constructor stub
}
public void tigerFunction() {
System.out.println("호랑이 기능");
}
}
Start
package kh.java.run;
import kh.java.func.Animal;
import kh.java.func.AnimalMgr1;
import kh.java.func.AnimalMgr2;
import kh.java.func.Rabbit;
import kh.java.func.Tiger;
public class Start {
public static void main(String[] args) {
// TODO Auto-generated method stub
// GenericeEx<String> ge = new GenericeEx<String>();
// GenericeEx<Integer> ge1 = new GenericeEx<Integer>();
// String str = ge.getData();
// int num = ge1.getData();
Rabbit r1 = new Rabbit(200);
Tiger t1 = new Tiger(300);
AnimalMgr2<Rabbit>am1 = new AnimalMgr2<Rabbit>(r1);
AnimalMgr2<Tiger>am2 = new AnimalMgr2<Tiger>(t1);
Rabbit a1 = am1.getData();
Tiger a2 = am2.getData();
System.out.println("a1 Hp : "+a1.getHp());
System.out.println("a2 Hp : "+a2.getHp());
a1.rabbitFuntion();
a2.tigerFunction();//다운캐스팅 없이 사용가능
/*
AnimalMgr1 am1 = new AnimalMgr1(r1);
AnimalMgr1 am2 = new AnimalMgr1(t1);
Animal a1 = am1.getData();//r1
Animal a2 = am2.getData();//t1
System.out.println("a1 Hp : "+a1.getHp());
System.out.println("a2 Hp : "+a2.getHp());
((Rabbit)a1).rabbitFuntion();
((Tiger)a2).tigerFunction();
*/
}
}
클래스명 뒤에 <T>를 사용함으로써 int,String 형태 다 받기 쉽게 해주는것
=========================================================
collection (ListTest
-kh.java.func
ListTest
package kh.java.func;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class ListTest {
public void listTest1() {
//길이가 3인 문자열 배열 선언
String[] arr= new String[3];
arr[0]= "hi";
arr[1]= "hello";
arr[2]= "bye";
//배열은 길이제한을 넘을수없다
for(int i = 0; i<arr.length;i++) {
System.out.println(i+". "+arr[i]);
}
System.out.println("==============================");
//ArrayList처리
//ArrayList는 객체 생성시 배열로 관리할 자료형은 제네릭으로 받는다
//길이 제한없이 추가된 만큼 출력이 된다.
ArrayList<String> list = new ArrayList<String>();
System.out.println("리스트 길이 : "+list.size());
list.add("hi");//리스트 가장뒤에 데이터 추가
System.out.println("리스트 길이 : "+list.size());
list.add("hello");
System.out.println("리스트 길이 : "+list.size());
list.add("bye");
System.out.println("리스트 길이 : "+list.size());
for(int i=0; i<list.size();i++) {
System.out.println(i+". "+list.get(i));
}
// System.out.println(list.get(0));//0번리스트 출력
// System.out.println(list.get(1));
// System.out.println(list.get(2));
}
public void listTest2() {
Scanner sc = new Scanner(System.in);
//정수를 저장
ArrayList<Integer>list = new ArrayList<Integer>();
while(true) {
System.out.println("리스트에 추가할 숫자 입력 : ");
int num = sc.nextInt();
list.add(num);
System.out.println("한번더 입력하시겠습니까?[y/n]");
String sel = sc.next();
if(sel.toLowerCase().equals("n")) {
break;
}
}
/*
for(int i = 0; i<list.size();i++) {
int num = list.get(i);
System.out.println(num);
}
//foreach 위랑 아래랑 코드가 같음
*/
for(int num : list) {// num에 list내용물을 처음부터 끝까지 집어넣는다.
System.out.println(num);
}
}
public void listTest3() {
ArrayList<Integer>list = new ArrayList<Integer>();
list.add(10);
list.add(5);
list.add(100);
list.add(55);
list.add(80);
System.out.println(list);
//get(index):해당인덱스에 위치한 객체를 가져오는 메소드
System.out.println(list.get(2));
//add(param1) : 매개변수로 전달된 값을 리스트에 가장 뒤에 추가
list.add(15);
System.out.println(list);
//add(param1,param2):첫번쨰 매개변수 위치에 두번째 매개변수 값 추가
//추가한 데이터 이후의 인덱스 번호는 1개씩 밀림
list.add(3,200);
System.out.println(list);
//set(param1,param2) : 첫번째 매개변수 위치에,두번째 매개변수 값으로 수정
list.set(3,1000);
System.out.println(list);
//remove: 매개변수 위치에 있는 객체 삭제
list.remove(3);
System.out.println(list);
//contains(param1) :매개변수로 전달한 값이 리스트에 존재하는지 확인하여 결과리턴
System.out.println(list.contains(1000));
System.out.println(list.contains(55));
System.out.println(list.isEmpty());
Collections.sort(list);
System.out.println(list);
//clear() :list내부 모든 객체 삭제
list.clear();
System.out.println(list.isEmpty());
System.out.println(list);
System.out.println(list.size());
}
}
studentMgr4
kr.or.iei.student.vo
Student
package kr.or.iei.student.vo;
public class Student {
private String name;
private int age;
private String addr;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age, String addr) {
super();
this.name = name;
this.age = age;
this.addr = addr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
kr.or.student.controller
-StudentController
package kr.or.student.controller;
import java.util.ArrayList;
import kr.or.iei.student.vo.Student;
import kr.or.student.view.StudentView;
public class StudentController {
private Student[] student1;
private int index;
private ArrayList<Student> students;
private StudentView view;
public StudentController() {
super();
student1 = new Student[10];
students = new ArrayList<Student>();
view = new StudentView();
}
public void main() {
while (true) {
int sel = view.showMenu();
switch (sel) {
case 1:
insertStudent();
break;
case 2:
printAllStudent();
break;
case 3:
printOneStudent();
break;
case 4:
updateStudent();
break;
case 5:
deleteStudent();
break;
case 0:
return;
}
} // while종료
}// 메인종료
public void deleteStudent() {
// TODO Auto-generated method stub
String name = view.getName("삭제");
int searchIndex = searchStudent(name);
if(searchIndex == -1) {
view.neSearchStudent();
}else {
/*
for(int i = searchIndex; i<index-1;i++) {
student1[i]=student1[i+1];
}
index--;
*/
students.remove(searchIndex);
}
}
public void updateStudent() {
// TODO Auto-generated method stub
String name = view.getName("수정");
int searchIndex = searchStudent(name);
if (searchIndex == -1) {
view.neSearchStudent();
} else {
Student s = view.updateStudent();
/*
//1)setter이용한방법
//Student stu = student1[searchIndex];
Student stu = student1[searchIndex];
//stu.setName(s.getName()); 아래 2줄짜리랑 같음
String updateName = s.getName();
stu.setName(updateName);
int updateAge = s.getAge();
stu.setAge(updateAge);
stu.setAddr(s.getAddr());//위에것들이랑 같음
*/
//2)객체를 교체하는 방법
students.set(searchIndex, s);//set을 이용해 중간값교체
}
}
public void printOneStudent() {
// TODO Auto-generated method stub
String name = view.getName("조회");
int searchIndex = searchStudent(name);
if (searchIndex == -1) {
view.neSearchStudent();
} else {
// Student s = student1[searchIndex];
Student s = students.get(searchIndex);
view.printOneStudent(s);
}
}
public int searchStudent(String name) {
/*
* for (int i = 0; i < index; i++) { Student s = student1[i]; if
* (name.equals(s.getName())) { return i; } }
*/
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
if (name.equals(s.getName())) {
return i;
}
}
return -1;
}
public void printAllStudent() {
// TODO Auto-generated method stub
// view.printAllStudent(student1,index);
view.printAllStudent(students);
}
public void insertStudent() {
// TODO Auto-generated method stub
Student s = view.insertStudent();
// student1[index] = s;
// index++;
students.add(s);// 리스트 가장 뒤에 추가
}
}// 클래스 종료
kr.or.student.view
-StudentView
package kr.or.student.view;
import java.util.ArrayList;
import java.util.Scanner;
import kr.or.iei.student.vo.Student;
public class StudentView {
private Scanner sc;
public StudentView() {
super();
sc = new Scanner(System.in);
}
public int showMenu() {
System.out.println("=====학생관리 프로그램 V4=====");
System.out.println("1.학생 정보 등록");
System.out.println("2.학생 전체 출력");
System.out.println("3.학생 1명 출력");
System.out.println("4.학생 정보 수정");
System.out.println("5.학생 정보 삭제");
System.out.println("0.프로그램 종료");
int sel = sc.nextInt();
return sel;
}
public Student insertStudent() {
System.out.println("=====학생 정보 입력=====");
System.out.print("이름 입력 : ");
String name = sc.next();
System.out.print("나이 입력 : ");
int age = sc.nextInt();
System.out.print("주소 입력 : ");
sc.nextLine();
String addr = sc.nextLine();
Student s = new Student(name, age, addr);
return s;
}
public void printAllStudent(ArrayList<Student> students) {
// TODO Auto-generated method stub
System.out.println("=====학생 전체 출력=====");
System.out.println("이름\t나이\t주소");
/*
for(int i=0;i<index;i+++) {
Student s = student1[i];
System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getAddr());
}
*/
/*
for(int i=0;i<students.size();i++) {
Student s = students.get(i);
System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getAddr());
}
*/
for(Student s : students) {
System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getAddr());
}
}
public String getName(String str) {
// TODO Auto-generated method stub
System.out.println("=====학생 정보 "+str+"=====");
System.out.println(str+"할 학생 이름 입력 : ");
String name = sc.next();
return name;
}
public void neSearchStudent() {
System.out.println("학생 정보를 조회할 수 없습니다.");
}
public void printOneStudent(Student s) {
// TODO Auto-generated method stub
System.out.println("이름 : "+s.getName());
System.out.println("나이 : "+s.getAge());
System.out.println("주소 : "+s.getAddr());
}
public Student updateStudent() {
// TODO Auto-generated method stub
Student s = new Student();
System.out.print("수정 이름 입력 : ");
String name = sc.next();
s.setName(name);
System.out.print("수정 나이 입력 : ");
int age = sc.nextInt();
s.setAge(age);
System.out.print("수정 주소 입력 : ");
sc.nextLine();
s.setAddr(sc.nextLine());
return s;
}
}