2013년 6월 28일 금요일

(130628 - 중요) 5일차 Member.java, MemberBean.java (5일차 7교시 문제 - Vector를 이용한 회원정보 관리 프로그램 )

 - Member.java 소스
import java.util.Scanner;
import java.util.Vector;

public class Member {

public static void main(String[] args) {

/* 회원정보 찾기와 입력 수정 삭제하기 = 이름, 나이, 전화, 주소, 이메일
* 문제
* 아래와 같은 프로그램을 만드시오
* 화면에 아래와 같이 나타나면
* 1. 입력 2. 검색 3. 수정 4. 삭제 5. 종료
* 1. 입력을 누를경우 이름, 나이, 전화, 주소, 이메일 모두 입력받은후에 MemberBean 클래스에 각각을 저장합니다.
* 그리고 MemberBean 클래스를 가변길이인 vector에 저장 하시오.
* 2. 검색을 누른 경우 이름을 입력 받아서 해당 멤버의 모든 정보를 화면에 출력하시오.
* 3. 수정 버튼을 누른경우 이름을 기준으로 나이와 전화 두개만 수정 하시오.
* 4. 삭제를 누르면 이름을 기준으로 해당 맴버를 삭제하시오.
* 5번을 누르기 전까지 무한 반복하시오.
*/

// MemberBean MB = new MemberBean();
Scanner sc = new Scanner(System.in);
Vector<MemberBean> member = new Vector<>();

while(true){
System.out.println("1. 입력 \t 2. 검색 \t 3. 수정 \t 4. 삭제 \t 5. 종료");
int m = sc.nextInt();

if(m == 1){
System.out.println("이름, 나이, 전화, 주소, 이메일을 입력하시오.");
System.out.print("이름 : ");
String name = sc.next();
System.out.print("나이 : ");
int age = sc.nextInt();
System.out.print("전화 : ");
String phoneNum = sc.next();
System.out.print("주소 : ");
String address = sc.next();
System.out.print("이메일 : ");
String email = sc.next();

member.add(new MemberBean(name, age, phoneNum, address, email));
System.out.println();
}

else if(m == 2){
System.out.println("검색할 이름을 입력하시오.");
System.out.print("이름 : ");
String name = sc.next();

for(int i=0 ; i<member.size() ; i++){
if(name.equals(member.get(i).getName())){
System.out.println("이름 : " +member.get(i).getName());
System.out.println("나이 : " +member.get(i).getAge());
System.out.println("전화 : " +member.get(i).getPhoneNum());
System.out.println("주소 : " +member.get(i).getAddress());
System.out.println("이메일 : " +member.get(i).getEmail());
}
else
System.out.println("일치하는 이름이 없습니다.");
}
System.out.println();
}

else if(m == 3){
System.out.println("이름을 기준으로 나이와 전화를 수정합니다.");
System.out.print("이름 : ");
String name = sc.next();

for(int i=0 ; i<member.size() ; i++){
if(name.equals(member.get(i).getName())){
System.out.println("이름 : " +member.get(i).getName());
System.out.println("나이 : " +member.get(i).getAge());
System.out.println("전화 : " +member.get(i).getPhoneNum());
System.out.println("주소 : " +member.get(i).getAddress());
System.out.println("이메일 : " +member.get(i).getEmail());

System.out.print("수정할 나이 : ");
int age = sc.nextInt();
System.out.print("수정할 전화 : ");
String phoneNum = sc.next();
member.get(i).setAge(age);
member.get(i).setPhoneNum(phoneNum);
}
else
System.out.println("일치하는 이름이 없습니다.");
}
System.out.println();
}

else if(m == 4){
System.out.println("이름을 기준으로 삭제합니다.");
System.out.print("삭제할 이름 : ");
String name = sc.next();

for(int i=0 ; i<member.size() ; i++){
if(name.equals(member.get(i).getName())){
String str = member.get(i).getName();
System.out.println(str + "님의 정보를 삭제합니다.");
member.remove(i);
}
else
System.out.println("일치하는 이름이 없습니다.");
}
}

else if(m == 5){
System.out.println("종료합니다.");
break;
}
}
}
}


 - MemberBean.java 소스
public class MemberBean {
String name;
int age;
String address;
String phoneNum;
String email;

public MemberBean(String name, int age, String phoneNum, String address, String email){
this.name = name;
this.age = age;
this.phoneNum = phoneNum;
this.address = address;
this.email = email;
}
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 getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}


 - 결과




















































 - 이클립스에서 메소드 한번에 만들기


(130628) 5일차 VectorTest2.java (List의 Vector를 이용한 정렬 프로그램)

 - 소스
import java.util.Vector;

public class VectorTest2 {

public static void main(String[] args) {
// 순서대로 데이터가 들어가는 벡터 생성
Vector<Integer> s = new Vector<>();
// 데이터 삽입
s.add(1);
s.add(3);
s.add(2);
s.add(5);
s.add(4);
for(int i = 0 ; i < s.size() ; i++){
// 데이터 가져오기
System.out.print(s.get(i) + " ");
}
System.out.println();
for(int i=0 ; i<s.size()-1 ; i++){
for(int j=i+1 ; j<s.size() ; j++){
if(s.get(i) > s.get(j)){
int temp = s.get(i);
s.set(i, s.get(j));
s.set(j,  temp);
}
}
}
for(int i = 0 ; i < s.size() ; i++){
// 데이터 가져오기
System.out.print(s.get(i) + " ");
}
System.out.println();
System.out.println(s.toString()); 
     // toString() 메소드를 이용해서 출력도 가능 (HastTable에서도 가능)
}
}


 - 결과

(130628) 5일차 VectorTest.java (List의 Vector 테스트)

 - Vector()
 : Vector(int initialCapacity) // 표기하지 않으면 생성자를 필수적으로 10개 생성
 : add(E e)
 : get(int index)
 : remove(int index)
 : set(int index, E element)
 : size()


 - 소스
import java.util.Vector;

public class VectorTest {

public static void main(String[] args) {
// 순서대로 데이터가 들어가는 벡터 생성
Vector<String> s = new Vector<>();

// 데이터 삽입
s.add("1");
s.add("2");
s.add("3");
s.add("4");
s.add("5");

for(int i = 0 ; i < s.size() ; i++){
// 데이터 가져오기
System.out.print(s.get(i) + " ");
}
System.out.println();

// 데이터를 원하는 위치에 삽입 (3번 자리에 6을 집어넣고 뒤 숫자들을 밀려남)
s.add(3, "6");
for(int i = 0 ; i < s.size() ; i++){
// 데이터 가져오기
System.out.print(s.get(i) + " ");
}
System.out.println();

// 데이터 삭제
s.remove(3);
for(int i = 0 ; i < s.size() ; i++){
// 데이터 가져오기
System.out.print(s.get(i) + " ");
}
System.out.println();

// 데이터 수정
s.set(3, "10");
for(int i = 0 ; i < s.size() ; i++){
// 데이터 가져오기
System.out.print(s.get(i) + " ");
}
}
}


 - 결과

(130628) 5일차 HashSetTest2.java (Set의 HashSet, Iterator를 이용한 로또 번호 생성기)

 - 소스
import java.util.HashSet;
import java.util.Iterator;

public class HashSetTest2 {

public static void main(String[] args) {
// set 계열인 HashSet 선언
HashSet<Integer> h = new HashSet<>();

// 데이터를 입력
for(int i=0; i<6; ){

int num = (int)(Math.random()*45)+1;
System.out.print(num +" ");
if(h.add(num))
i++;
}

System.out.println();
Iterator <Integer> i = h.iterator(); // Iterator 선언
while(i.hasNext()){ // 남아있는게 있으면 true를 리턴
System.out.print(i.next() + " ");
}
}
}


 - 결과

(130628) 5일차 HashSetTest.java (Set의 HashSet, Iterator 테스트)

 - HashSet<E>
 : add(E e)

 - Interface Iterator<E>
 : hasNext()
 : next()

 - 소스
import java.util.HashSet;
import java.util.Iterator;

public class HashSetTest {

public static void main(String[] args) {
// set 계열인 HashSet 선언
HashSet<String> h = new HashSet<>();

// 데이터를 입력
h.add("유재석");
h.add("박명수");
h.add("정준하");
h.add("정형돈");
h.add("노홍철");
h.add("하하");
h.add("길");
Iterator <String> i = h.iterator(); // Iterator 선언
while(i.hasNext()){ // 남아있는게 있으면 true를 리턴
System.out.println(i.next());
}
}
}


 - 결과



(130628) 5일차 HashTableTest2.java (Enumeration을 이용한 Map의 Hashtable 테스트)

 - Interface Enumeration<E>
 : hasMoreElements()
 : nextElement()
 : For example, to print all elements of a Vector<E> v:
   for (Enumeration<E> e = v.elements(); e.hasMoreElements();)
       System.out.println(e.nextElement());


 - 소스
import java.util.Enumeration;
import java.util.Hashtable;

public class HashTableTest2 {

public static void main(String[] args) {
// map 계열인 Hashtable 선언
// Hashtable<Integer, String> hash = new Hashtable<>();
Hashtable<String, String> hash = new Hashtable<>();

// 데이터를 입력
hash.put("가", "유재석");
hash.put("나", "박명수");
hash.put("다", "정준하");
hash.put("라", "정형돈");
hash.put("마", "노홍철");
hash.put("바", "하하");
hash.put("사", "길");

Enumeration<String> e = hash.elements();
for( ; e.hasMoreElements() ; )
System.out.println(e.nextElement()); // 메모리에서 하나를 가져오고 없애버림 (순서가 없음, 무엇을 가져올지 모름) // 남아있는게 있으면 true를 리턴해서 계속 보내줌
}
}


 - 결과

(130628) 5일차 HashTableTest.java (Collection API - Map, Set, List // Map의 Hashtable 테스트)

 - Collection API
 - Collection API 내부의 interface
 : Collection – 순서가 없이 객체 저장
 : Set – 중복 없이 객체 저장
 : List – 순서대로 객체 저장, 중복허용

 - Map
 : name-value 형식으로 저장 : java.util.HashMap 등

 - Collection, Set, List는 모두 가변적인 길이를 제공한다.
 - 즉, Collection API는 여러개의 데이터를 저장하기 위해서 사용한다. (가변적으로 바뀌는 것을 저장하기 위해서)
 - Map : Key값과 Value 값을 가진다. 키값을 기준으로 데이터를 저장한다. (Hashtable)
 - Set : Set 인터페이스를 상속받는 인터페이스는 데이터를 집어넣을 수 있다. 하지만 순서대로 데이터가 들어가지 않고 메모리 어딘가에 들어간다. 또한 중복이 허용되지 않는다.
 - List : 데이터가 Index 형태로 저장되므로 배열처럼 사용하기 쉽다. 데이터가 순차적으로 들어간다.



 - Class Hashtable<K,V>
 : put(K key, V value)
 : get(Object key)


 - Map의 Hashtable 테스트 소스 (HashTableTest.java) 
import java.util.Hashtable;

public class HashTableTest {

public static void main(String[] args) {
// map 계열인 Hashtable 선언
Hashtable<Integer, String> hash = new Hashtable<>();

// 데이터를 입력
hash.put(1, "이문세");
hash.put(2, "소녀시대");
hash.put(3, "시스타");
hash.put(4, "걸스데이");
hash.put(5, "박문수");
for(int i = 1 ; i<hash.size()+1 ; i++) // hash.size() : hash 테이블의 크기
System.out.println(hash.get(i)); // 데이터를 출력

System.out.println();
Hashtable<String, String> hash2 = new Hashtable<>();
// 데이터를 입력
hash2.put("1", "이문세");
hash2.put("2", "소녀시대");
hash2.put("3", "시스타");
hash2.put("4", "걸스데이");
hash2.put("5", "박문수");

for(int i = 1 ; i<hash.size()+1 ; i++) // hash.size() : hash 테이블의 크기
System.out.println(hash2.get(i+"")); // 데이터를 출력
System.out.println();
Hashtable<String, String> hash3 = new Hashtable<>();
// 데이터를 입력
hash3.put("a1", "이문세");
hash3.put("a2", "소녀시대");
hash3.put("a3", "시스타");
hash3.put("a4", "걸스데이");
hash3.put("a5", "박문수");

for(int i = 1 ; i<hash.size()+1 ; i++) // hash.size() : hash 테이블의 크기
System.out.println(hash3.get("a"+i)); // 데이터를 출력
}
}


 - 결과

(130628) 5일차 StringTest6.java (split 메소드 예제 - StringTest3.java 각 추출 문자 개수 세기)

 - 소스
public class StringTest6 {

public static void main(String[] args) {

// 다음 문자열에서 가장 많은 단어를 찾고, 그 단어와 개수를 출력
String data ="봄 봄 봄 봄이 왔네요 " +
"우리가 처음 만났던 그때의 향기 " +
"그대로 그대가 앉아 있었던 그 벤치 옆에 나무도 " +
"아직도 남아있네요 살아가다 보면 잊혀질 거라 했지만 " +
"그 말을 하며 안될거란걸 알고 있었소 그대여 너를 처음 " +
"본 순간 나는 바로 알았지 그대여 나와 함께 해주오 이 봄이 가기 전에";

String [] result = data.split(" ");
int [] arr = new int [result.length];

for(int i = 0; i < result.length ; i++){
for(int j = 0 ; j < result.length ; j++){
if(result[i].equals(result[j]))
arr[i]++;
}
}

for(int i = 0; i < result.length ; i++){
for(int j = i+1 ; j < result.length ; j++){
if(result[i].equals(result[j]))
arr[j] = 0;
}
if(arr[i] != 0)
System.out.println(result[i] + " : " +arr[i]);
}
}
}


 - 결과

(130628) 5일차 StringTest5.java (String 테스트 - API 사용, Wrapper Class)

 - Wrapper Class
 : Primitive Type Data를 객체로 변환.
 : 객체를 Primitive Type Data로 변환.

 - 소스
public class StringTest5 {

public static void main(String[] args) {
String data = "봄 봄 봄 봄이 왔네요 ";
System.out.println(data.trim());

data = data.replace("봄", "하"); // "봄"을 "하"로 바꿈
System.out.println(data);

// Wrapper Class
// 문자열을 숫자로 바꿀때
String data2 = "100";
int m = Integer.parseInt(data2); // 문자를 숫자로 바꿔줌
System.out.println(m+200);
}
}


 - 결과

(130628) 5일차 StringTest3.java, (split 메소드 예제, 5일차 2교시 split 메소드 문제)

 - 연습 소스
public class StringTest3 {

public static void main(String[] args) {
String data = "봄봄봄 봄이 왔어요 우리들 마음속에도";
String[] result = data.split(" "); // 공백을 기준으로 자름

for(int i=0 ; i<result.length ; i++)
System.out.println(result[i]);
}
}


 - 결과







 - 문제 : 해당 문자열에서 가장 많은 단어를 찾고, 그 단어와 개수를 출력
 - 소스
public class StringTest4 {

public static void main(String[] args) {
// 다음 문자열에서 가장 많은 단어를 찾고, 그 단어와 개수를 출력
String data ="봄 봄 봄 봄이 왔네요 " +
"우리가 처음 만났던 그때의 향기 " +
"그대로 그대가 앉아 있었던 그 벤치 옆에 나무도 " +
"아직도 남아있네요 살아가다 보면 잊혀질 거라 했지만 " +
"그 말을 하며 안될거란걸 알고 있었소 그대여 너를 처음 " +
"본 순간 나는 바로 알았지 그대여 나와 함께 해주오 이 봄이 가기 전에";

String [] result = data.split(" ");

for(int i = 0; i < result.length ; i++){
System.out.println(result[i]);
}
// 하나의 배열번지를 기준으로 모든 배열을 검색하는 소스
int max = 0; // 최대 빈도수를 의미
String word = ""; // 가장 많이 나오는 단어
for(int i = 0; i < result.length ; i++){
int count = 0; // 반복문이 한번 돌때마다 값을 초기화 해줌
for(int j = 0 ; j < result.length ; j++){
if(result[i].equals(result[j])){
// 단어와 단어가 같다면 카운트를 증가
count++;
}
}
// 하나를 전부 반복한 후에 count값이 max값 보다 크다면
if(max < count){
max = count;
word = result[i];
}
}
System.out.println("최대 빈도 단어는 \"" +word +"\"이고 반복횟수는 "+(max+1));
}
}


 - 결과

(130628) 5일차 StringTest2.java (String 테스트 - API 사용, 이메일 주소확인 프로그램)

 - 소스
import java.util.Scanner;

public class StringTest2 {

public static void main(String[] args) {
String data = "Korea Fighting";
// 하나의 char형을 뽑아냄
char a = data.charAt(0);
System.out.println(a);

int b = data.indexOf('a');
System.out.println(b); // 출력 : 4 - a가 4번째에 있다는 의미

int c = data.lastIndexOf('i');
System.out.println(c); // 출력 : 11 - i가 11번째에 있다는 의미 


// 이메일을 입력받아서 입력받은 문자열이 이메일 형식에 맞는지 확인하는 프로그램
// @를 포함하고 있는지 확인
System.out.println("이메일을 입력하세요");
Scanner sc = new Scanner(System.in);
String m = sc.next();
          // next()는 공백이 있을때까지 읽고, nextLine()은 공백이 있어도 무조건 한줄을 읽는다.

int val = m.indexOf('@');
if(val == -1)
System.out.println("이메일 형식에 맞지 않습니다.");
else
System.out.println("입력한 이메일은 "+m+" 입니다.");
}
}


 - 결과

(130628) 5일차 StringTest.java (String 테스트 - API 사용)

 - String
 : 일반적인 String 타입 String a = "하하";는 heap영역이 아닌 String 번지가 "하하"를 가리키고, String b = "하하"또한 String 번지에서 a와 같은 주소번지를 가리킨다. 따라서 a와 b는 비교시 "=="로 가능하다.
 : 반면 다른 Object String 타입인 String k = new String("하하");는 heap 영역에 생성되고, String i = new String("하하");또한 heap 영역에 생기지만, 같은 주소번지를 가리키지 않고 별도로 존재한다. 따라서 이들은 Object이기 때문에 비교할때 equal() 메소드를 사용한다.


 - 소스
public class StringTest {

public static void main(String[] args) {

// String 영역에 만들어지므로 "=="로 비교 가능하다.
// 같은 영역에 있고, a와 b가 같은 주소번지를 가리키고 있기 때문
String a = "하하";
String b = "호호";
if(a==b)
System.out.println("같다");
else
System.out.println("틀리다");

// 메모리 heap 영역에 만들어짐. (각자 만들어지므로 데이터 비교가 "=="로 불가능)
// 같은 heap 영역에 있긴 하지만 개별으로 존재
String c = new String("하하");
String d = new String("하하");
if(c.equals(d))
System.out.println("같다");
else
System.out.println("틀리다");
}
}


 - 결과

2013년 6월 27일 목요일

(130627) 4일차 AbstractFinalClassExam.java (4일차 7교시 Interface test)

 - 소스
//이 소스를 컴파일이 되도록 수정/추가/주석처리 하세요.
interface InterfaceExam00{
abstract void interfaceExam00(); // 인터페이스이므로 추상메소드 구현
}

// 인터페이스와 인터페이스끼리 상속 가능
interface InterfaceExam01 extends InterfaceExam00{ // InterfaceExam00를 상속받음
public int i = 767;
public int k = 999;
public void interfaceExam01(int i, int k); // 인터페이스이므로 추상메소드 구현
}

interface InterfaceExam02{
int j =747;
public int privateInt = 8;
public void interfaceExam02(int j);
}

class SuperClassExam{
String superString = "Super";
String superMethod(){
System.out.println("SuperClassExam.SuperMethod()가 호출되었습니다.");
return "returnString";
}
}

class SubClassExam01 extends SuperClassExam implements InterfaceExam01{
@Override // interfaceExam00의 추상메소드 오버라이딩
public void interfaceExam00() {
}

@Override // interfaceExam01의 추상메소드 오버라이딩
public void interfaceExam01(int i, int k) {
}
}

abstract class SubClassExam02 extends SuperClassExam implements InterfaceExam01, InterfaceExam02{}
// 추상클래스이기 때문에 오버라이딩 할 의무가 없다.

class SubClassExam03 extends SuperClassExam implements InterfaceExam01, InterfaceExam02{
@Override
public void interfaceExam00() {
}

@Override
public void interfaceExam01(int i, int k) {
}

@Override // interface InterfaceExam02에 대한 오버라이딩
public void interfaceExam02(int j) {
}
}

class SubClassExam04 extends SubClassExam02{
//여기에 필요한 것들을 추가하여 문제를 해결하세요..
SubClassExam04(){
System.out.println("subClassExam04() 객체 생성");
System.out.println(" i = "+i);
System.out.println(" j = "+j);
}
SubClassExam04(String s1, String s2){
System.out.println(s1+" 타입 "+"subClassExam04("+s2+") 객체 생성");
}
public void printSuperString(){
//InterfaceExam01 ie01 = new InterfaceExam01(); // 인터페이스는 자체적으로 객체가 될 수 없다.
System.out.println(" superString = "+superString);
}

public void interfaceExam00() {
System.out.println("SubClassExam04.interfaceExam00()이 호출되었습니다.");
}

public void interfaceExam01(int i, int k){
System.out.println("SubClassExam04.interfaceExam00()이 호출되었습니다.");
}

@Override // interface InterfaceExam02에 대한 오버라이딩
public void interfaceExam02(int j) {
}
}

//여기서부터는 하나도 고치지 마시고 그대로 쓰면 됩니다.
public class ImplememtsInterfaceExam{ 
public static void main(String args[]){
SubClassExam02 sub02sub04 = new SubClassExam04("SubClassExam02", "sub02sub04");
SuperClassExam superSub04 = new SubClassExam04("SuperClassExam", "superSub04");
InterfaceExam01 ifc01Sub04 = new SubClassExam04("InterfaceExam01", "ifc01Sub04");
SubClassExam04 sub04 = new SubClassExam04();
sub04.interfaceExam00();
sub04.interfaceExam01(1,7);
sub04.superMethod();
}
}


 - 결과