Java/스터디 예제 풀이

7장 상속 연습 문제 및 LAB 문제 -2

안정민 2023. 3. 3. 11:52

8. 다음은 키와 값을 하나의 아이템으로 저장하고 검색 수정이 가능한 추상 클래스가 있다.

abstract class PairMap {
   protected String KeyArray[]; // key 들을 저장하는 배열
   protected String valueArray[]; // value 들을 저장하는 배열
   abstract String get(String key); // key 값을 가진 value 리턴, 없으면 null 리턴
   abstract void put(String ket, String value); // key와 value를 쌍으로 저장. 기존에 key가 있으면, 값을 value로 수정
   abstract String delete(String key); // key 값을 가진 아이템 (value와 함꼐) 삭제, 삭제된 value 값 리턴
   abstract int length(); // 현재 저장된 아이템의 개수 리턴
}

PairMap을 상속받는 Dictionary 클래스를 구현하고, 이를 다음과 같이 활용하는 main() 메소드를 가진 클래스 DictionaryApp도 작성하라.

 

package PairMap;

abstract class PairMap {
	   protected String keyArray[]; // key 들을 저장하는 배열
	   protected String valueArray[]; // value 들을 저장하는 배열
	   abstract String get(String key); // key 값을 가진 value 리턴, 없으면 null 리턴
	   abstract void put(String ket, String value); // key와 value를 쌍으로 저장. 기존에 key가 있으면, 값을 value로 수정
	   abstract String delete(String key); // key 값을 가진 아이템 (value와 함꼐) 삭제, 삭제된 value 값 리턴
	   abstract int length(); // 현재 저장된 아이템의 개수 리턴
	}
package PairMap;

public class Dictionary extends PairMap {
	protected int set=0;//keyArray, valueArray의 리스트값
	
	public Dictionary(int num) {
		keyArray=new String[num];
		valueArray=new String[num];
	}	
	
	public String get(String key) {
		for(int i=0; i<keyArray.length; i++) {
			if(key.equals(keyArray[i]))
				return valueArray[i]; 
		}
		return null;			
	}
	
		public void put(String key, String value) {
		for(int i=0;i<keyArray.length;i++) {
			if(key.equals(keyArray[i])) {
				keyArray[i]=key;
				valueArray[i]=value;
			}	
		}
		keyArray[set]=key;
		valueArray[set]=value;
		set++;
	}
		
	public String delete(String key) {
		for(int i=0;i<keyArray.length;i++)
			if(key.equals(keyArray[i])) {
				String s=valueArray[i];
				keyArray[i]=null;
				valueArray[i]=null;
				return s;
			}	
		return null;
	}
	
	public int length() {
		return set;
	}
}
package PairMap;

public class DiactionaryApp {
	
	 public static void main(String[] args) {
	      Dictionary dic = new Dictionary(10);
	      dic.put("황기태", "자바");
	      dic.put("이재문", "파이선");
	      dic.put("이재문", "C++"); // 이재문의 값을 C++로 수정
	      System.out.println("이재문의 값은 "+dic.get("이재문"));
	      System.out.println("황기태의 값은 "+dic.get("황기태"));
	      dic.delete("황기태"); // 황기태 아이템 삭제
	      System.out.println("황기태의 값은 "+dic.get("황기태")); //삭제된 아이템 접근
	   }

}

9.다음은 단위를 변환하는 추상 클래스 Converter이다.

import java.util.Scanner;
abstract class Converter {
   abstract protected double convert(double src); // 추상 메소드
   abstract protected String getSrcString(); // 추상 메소드
   abstract protected String getDestString(); // 추상 메소드
   protected double ratio; // 비율
   public void run() {
      Scanner scanner = new Scanner(System.in);
      System.out.println(getSrcString()+"을 "+getDestString()+"로 바꿉니다.");
      System.out.print(getSrcString()+"을 입력하세요>> ");
      double val = scanner.nextDouble();
      double res = convert(val);
      System.out.println("변환 결과: "+res+getDestString()+"입니다");
      scanner.close();
   }
}

 

[3번] Converter 클래스를 상속받아 원화를 달러로 변환하는 Won2Dollar 클래스를 작성하라. main() 메소드와 실행 결과는 다음과 같다.

public static void main(String args[]) {
   Won2Dollar toDollar = new Won2Dollar(1200); // 1달러는 1200원
   toDollar.run();
}
원을 달러로 바꿉니다.
원을 입력하세요>> 24000
변환 결과: 20.0달러입니다

 

풀이 정답)

package Converter;

class Won2Dollar extends Converter {
	   public Won2Dollar(double ratio) { this.ratio = ratio; }
	   protected double convert(double src) { return src/ratio; }
	   protected String getSrcString() { return "원"; }
	   protected String getDestString() { return "달러"; }

	
}

10. [4번] Converter 클래스를 상속받아 Km를 mile(마일)로 변환하는 Km2Mile 클래스를 작성하라, main() 메소드와 실행 결과는 다음과 같다.

public static void main(String args[]) {
   Km2Mile toMile = new Km2Mile(1.6); // 1마일은 1.6km
   toMile.run();
}
Km을 mile로 바꿉니다.
Km을 입력하세요>> 30
변환 결과: 18.75mile입니다
package Converter;

class Km2Mile extends Converter {
	   public Km2Mile(double ratio) { this.ratio = ratio; }
	   protected double convert(double src) { return src/ratio; }
	   protected String getSrcString() { return "Km"; }
	   protected String getDestString() { return "mile"; }

}