민장미 2023. 4. 27. 19:26

연습문제:  아래 식으로 벡터를 출력해보기

 

 

//출력 - 향상된 for문으로 출력 ,그냥 for 
//출력 예시 :
// String:"Test"
// Float : 10.45
// --> for문안에서 

package collection;

import java.util.Vector;

//내일 오전까지
public class Exam_HW {
	private Vector v;
	public Exam_HW() {
		v = new Vector();
		v.add("Test");
		v.add(10.45f);
		v.add('A');
		v.add(20.11);
		v.add(true);
		v.add(100l);
	}
	public void printVector() {
		//출력 - 향상된 for문으로 출력 ,그냥 for 
		//출력 예시 :
		// String:"Test"
		// Float : 10.45
		// --> for문안에서 
	}
}

 

 

 

 

다른 팀들은 자료형을 그냥 "String : " , "Float", 이런식으로 직접 타자로 쳐서 문자열로 작성했지만,

우리 조는 자료형 부분까지 타자를 치지 않고, 함수를 이용하여 시도 해보았다. 😁

우리 조꺼 ~ printVector를 보면 됌 

package my;
// 내일 오전까지

import java.util.Vector;

public class Exam_HW {
	private Vector v;
	public Exam_HW() {
		v = new Vector();
		v.add("Test");
		v.add(10.34f);
		v.add('A');
		v.add(20.22);
		v.add(true);
		v.add(100L);
		
	}
	
	// 클래스 이름을 가져오기 위해서 메소드를 만들었다. 
	public String showName(Object obj) {
		return obj.getClass().getName();
	} 
	
	public void printVector() {
		//출력 - 향상된 for문으로 출력, 그냥 for
		//출력 예시:
		//String :"test"
		// Float : 10.45
		// --> for문안에서
		int idx=0;
		for(Object e : v) {
			//System.out.println(" 자료형: "+e);
			if(e instanceof String) { //showName 메소드를 사용하여서 자료형을 표기하는 응용을 해보았다.  
				System.out.println(showName(e).substring(10,showName(e).length()) +": "+v.get(idx));
			}else if(e instanceof Float) {
				System.out.println(e.getClass().getName().substring(10,15)+": "+v.get(idx));
			}else if(e instanceof Character) {
				System.out.println(e.getClass().getName().substring(10,14)+": "+v.get(idx));
			}else if(e instanceof Double) {
				System.out.println(e.getClass().getName().substring(10,16)+": "+v.get(idx));
			}else if(e instanceof Boolean) {
				System.out.println(e.getClass().getName().substring(10,17)+": "+v.get(idx));
			}else if(e instanceof Long) {
				System.out.println(e.getClass().getName().substring(10,14)+": "+v.get(idx));
			}
			idx++;
		}//for
	}
	
	public static void main(String[] args) {
		Exam_HW hw = new Exam_HW();
		hw.printVector();
		
	}//main

}

 

출력화면 : 

 

 

 

그리고 오늘 오전에 쌤이 해설해주셨는데, 

우리 조가 한거랑 거의 유사!!! 

 

이게 우리가 작성한 방식.

메소드 하나 만들어서 코드 조금 줄임 

ystem.out.println(showName(e).substring(10,showName(e).length()) +": "+v.get(idx));
System.out.println(e.getClass().getName().substring(10,15)+": "+v.get(idx));

 

1. 우리는 e.getClass().getName() 이걸 반환하는 메소드를 만들어서 코드를 조금 줄였었는데,

쌤은 getCanonicalName(); 이걸 쓰셨음. 

 

2. 우리가 substring 함수를 틀리게 쓴 건  아니지만... 더 간결하게 사용할 수 있다니 ㅠㅠ 역시 많이 사용해봐야 겠다. 

System.out.println(showName2(e).substring(10)+": "+v.get(idx));

+ getCanonicalName(); 을 적용한 새 메소드를 만들어서 코드를 더 줄였다!

 

아래가 최종본 

package yesterday;
// 내일 오전까지

import java.util.Vector;

public class Exam_HW {
	private Vector v;
	public Exam_HW() {
		v = new Vector();
		v.add("Test");
		v.add(10.34f);
		v.add('A');
		v.add(20.22);
		v.add(true);
		v.add(100L);
		v.add('B');
		v.add(65);
		
	}
	
	// 클래스 이름을 가져오기 위해서 메소드를 만들었다. 
	public String showName(Object obj) {
		return obj.getClass().getName();
	} 
	
	public String showName2(Object obj) {
		return obj.getClass().getCanonicalName();
	}
	
	public void printVector() {
		//출력 - 향상된 for문으로 출력, 그냥 for
		//출력 예시:
		//String :"test"
		// Float : 10.45
		// --> for문안에서
		
		// String obj = e.getClass().getCanonicalName(); 
		// System.out.println(obj.substring(10)+":"+e);
		
		int idx=0;
		for(Object e : v) {
			//System.out.println(" 자료형: "+e);
			if(e instanceof String) { //showName 메소드를 사용하여서 자료형을 표기하는 응용을 해보았다.  
				System.out.println(showName(e).substring(10,showName(e).length()) +": "+v.get(idx));
			}else if(e instanceof Float) {
				System.out.println(showName2(e).substring(10)+": "+v.get(idx));  //최종 
			}else if(e instanceof Character) {
				System.out.println(e.getClass().getName().substring(10,14)+": "+v.get(idx));
			}else if(e instanceof Double) {
				System.out.println(e.getClass().getName().substring(10,16)+": "+v.get(idx));
			}else if(e instanceof Boolean) {
				System.out.println(e.getClass().getName().substring(10,17)+": "+v.get(idx));
			}else if(e instanceof Long) {
				System.out.println(e.getClass().getName().substring(10,14)+": "+v.get(idx));
			}
			idx++;
		}//for
		
		//test
		String t = "안녕하세요";
		String s = t.getClass().getCanonicalName().substring(10);
		System.out.println(s);
		
	}
	
	public static void main(String[] args) {
		Exam_HW hw = new Exam_HW();
		hw.printVector();
		
	}//main

}