1. Scanner 클래스로 -1이 입력될 때까지 양의 정수를 입력받아 벡터에 저장하고 벡터를 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라.
2. Scanner 클래스를 사용하여 6개 학점('A', 'B', 'C', 'D', 'F')을 문자로 입력받아 ArrayList에 저장하고, ArrayList를 검색하여 학점을 점수(A=4.0, B=3.0, C=2.0, D=1.0, F=0)로 변환하여 평균을 출력하는 프로그램을 작성하라.
3. "그만"이 입력될 때까지 나라 이름과 인구를 입력받아 저장하고, 다시 나라 이름을 입력받아 인구를 출력하는 프로그램을 작성하라. 다음 해시맵을 이용하라.
4. Vector 컬렉션을 이용하여 강수량의 평균을 유지 관리하는 프로그램을 작성하라. 강수량을 입력하면 벡터에 추가하고 현재 입력된 모든 강수량과 평균을 출력한다.
5. 하나의 학생 정보를 나타내는 Student 클래스에는 이름, 학과, 학번, 학점 평균을 저장하는 필드가 있다.
(1) 학생마다 Student 객체를 생성하고 4명의 학생 정보를 ArrayList<Student> 컬렉션에 저장한 후에, ArrayList<Student>의 모든 학생(4명) 정보를 출력하고 학생 이름을 입력받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하라.
package donghun;
import java.util.*;
class Student{
private String name;
private String major;
private String id;
private double average;
public Student(){
}
public Student(String name, String major,String id, double average)
{
this.name= name;
this.major= major;
this.id = id;
this.average =average;
}
public String getName() {
return name;
}
public String getMajor() {
return major;
}
public String getId() {
return id;
}
public double average() {
return average;
}
public void search_student(String name) {
if(name.equals(this.name))
{
System.out.println(this.name+","+this.major+","+this.id+","+this.average);
}
}
}
public class PersonTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
ArrayList<Student> s = new ArrayList<Student>();
Student std[] = new Student[4];
System.out.println("학생 이름, 학과, 학번, 학점 평균을 입력하세요.");
for(int i=0;i<4;i++)
{
System.out.print(">>");
String text = sc.nextLine();
StringTokenizer st = new StringTokenizer(text,",");
String name = st.nextToken().trim();
String major = st.nextToken().trim();
String id = st.nextToken().trim();
double average = Double.parseDouble(st.nextToken().trim());
std[i]=new Student(name,major,id,average);
s.add(std[i]);
}
for(int i=0;i<4;i++)
{
Student a = s.get(i);
System.out.println("----------------------");
System.out.println("이름 : "+ a.getName());
System.out.println("학과 : "+a.getMajor());
System.out.println("학번 : "+a.getId());
System.out.println("학점평균 : "+a.average());
}
while(true)
{
System.out.print("학생 이름>>");
String st_name = sc.nextLine();
if(st_name.equals("그만")) {
System.out.println("프로그램 종료");
break;
}
for(int i=0;i<s.size();i++)
{
Student a = s.get(i);
a.search_student(st_name);
}
}
}
}
(2) ArrayList<Student> 대신, HashMap<String, Student> 해시맵을 이용하여 다시 작성하라. 해시맵에서 키는 학생 이름으로 한다.
package donghun;
import java.util.*;
class Student{
private String name;
private String major;
private String id;
private double average;
public Student(){
}
public Student(String name, String major,String id, double average)
{
this.name= name;
this.major= major;
this.id = id;
this.average =average;
}
public String getName() {
return name;
}
public String getMajor() {
return major;
}
public String getId() {
return id;
}
public double average() {
return average;
}
public void search_student(String name) {
if(name.equals(this.name))
{
System.out.println(this.name+","+this.major+","+this.id+","+this.average);
}
}
}
public class PersonTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
HashMap<String, Student> s = new HashMap<String, Student>();
Student std[] = new Student[4];
System.out.println("학생 이름, 학과, 학번, 학점 평균을 입력하세요.");
for(int i=0;i<4;i++)
{
System.out.print(">>");
String text = sc.nextLine();
StringTokenizer st = new StringTokenizer(text,",");
String name = st.nextToken().trim();
String major = st.nextToken().trim();
String id = st.nextToken().trim();
double average = Double.parseDouble(st.nextToken().trim());
std[i]=new Student(name,major,id,average);
s.put(name,std[i]);
}
Set<String> keys = s.keySet();
Iterator<String> it =keys.iterator();
while(it.hasNext()) {
String name=it.next();
System.out.println("----------------------");
Student a = s.get(name);
System.out.println("이름 : "+ a.getName());
System.out.println("학과 : "+a.getMajor());
System.out.println("학번 : "+a.getId());
System.out.println("학점평균 : "+a.average());
}
while(true)
{
System.out.print("학생 이름>>");
String st_name = sc.nextLine();
if(st_name.equals("그만")) {
System.out.println("프로그램 종료");
break;
}
Student a = s.get(st_name);
a.search_student(st_name);
}
}
}
6. 도시 이름, 위도, 경도 정보를 가진 Location 클래스를 작성하고, 도시 이름을 '키'로 하는 HashMap<String, Location> 컬렉션을 만들고, 사용자로부터 입력 받아 4개의 도시를 저장하라. 그리고 도시 이름으로 검색하는 프로그램을 작성하라.
package donghun;
import java.util.*;
class Location{
private String city;
private int latitude; //위도
private int longitude; //경도
public Location(String city,int latitude,int longitude) {
this.city=city;
this.latitude = latitude;
this.longitude = longitude;
}
public String getCity() {
return city;
}
public int getLatitude() {
return latitude;
}
public int getLongitude() {
return longitude;
}
public void searchCity(String name) {
if(name.equals(this.city))
{
System.out.println(this.city+" "+this.latitude+" "+this.longitude);
}
}
}
public class PersonTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
HashMap<String, Location> a= new HashMap<String, Location>();
Location s[] = new Location[4];
System.out.println("도시,경도,위도를 입력하세요.");
for(int i=0;i<4;i++) {
System.out.print(">>");
String text = sc.nextLine();
StringTokenizer st = new StringTokenizer(text,",");
String city = st.nextToken().trim();
int latitude = Integer.parseInt(st.nextToken().trim());
int longitude = Integer.parseInt(st.nextToken().trim());
s[i]=new Location(city,latitude,longitude);
a.put(city, s[i]);
}
System.out.println("---------------------");
Set<String> keys = a.keySet();
Iterator<String> it =keys.iterator();
while(it.hasNext())
{
String city = it.next();
Location b = a.get(city);
b.searchCity(city);
}
System.out.println("---------------------");
while(true) {
System.out.print("도시 이름>>");
String city = sc.next();
if(city.equals("그만"))
{
System.out.println("프로그램 종료");
break;
}
Location b = a.get(city);
b.searchCity(city);
}
sc.close();
}
}
7. 이름과 학점(4.5만점)을 5개 입력받아 해시맵에 저장하고, 장학생 선발 기준을 입력 받아 장학생 명단을 출력하라.
package donghun;
import java.util.*;
public class PersonTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
HashMap<String, Double> a= new HashMap<String, Double>();
double max=0.0;
System.out.println("미래장학금관리시스템입니다.");
for(int i=0;i<5;i++)
{
System.out.print("이름과 학점>>");
String name = sc.next();
double grade = sc.nextDouble();
a.put(name, grade);
}
System.out.println("장학생 선발 학점 기준 입력>>");
double stand = sc.nextDouble();
Set<String> keys = a.keySet();
Iterator<String> it = keys.iterator();
String copyName = null;
System.out.print("장학생 명단 : ");
while(it.hasNext())
{
String name = it.next(); //키
double grade = a.get(name);
if(stand<=grade)
{
System.out.print(name+" ");
}
}
sc.close();
}
}
8. 고객의 이름과 포인트 점수를 관리하는 프로그램을 해시맵을 이용하여 작성하라. 프로그램은 고객의 이름과 포인트를 함께 저장 관리하는데, 포인트는 추가될 때마다 누적하여 저장된다.
9. IStack<T> 인터페이스를 구현(implements)하는 MyStack<T> 클래스를 작성하라. 스택의 원소는 Vector<E>를 이용하여 저장하라. 다음은 MyStack<Integer>로 구체화한 정수 스택을 생성하고 활용하는 코드와 실행 결과이다.
10. Vector<Shape>의 벡터를 이용하여 그래픽 편집기를 만들어보자. 본문 5.6절과 5.7절에서 사례로 든 추상 클래스 Shape과 Line, Rect, Circle 클래스 코드를 잘 완성하고 이를 활용하여 "삽입", "삭제", "모두 보기", "종료"의 4가지 그래픽 편집 기능을 프로그램을 작성하라. 6장 실습문제 6번을 Vector<Shape>을 이용하여 재작성하는 연습이다. Vector를 이용하면 6장 실습문제 6번보다 훨씬 간단히 작성됨을 경험할 수 있다.
package donghun;
import java.util.*;
abstract class Shape{
private Shape next;
public Shape() {
next=null;
}
public void setNext(Shape obj) {
next = obj;
}
public Shape getNext() {
return next;
}
public abstract void draw();
}
class Line extends Shape{
@Override
public void draw() {
System.out.println("Line");
}
}
class Rect extends Shape{
@Override
public void draw() {
System.out.println("Rect");
}
}
class Circle extends Shape{
@Override
public void draw() {
System.out.println("Circle");
}
}
public class PersonTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
Vector<Shape> graph = new Vector<>();
System.out.println("그래픽 에디터 beauty을 실행합니다.");
while(true) {
System.out.print("삽입(1), 삭제(2), 모두 보기(3), 종료(4)>>");
int choose = sc.nextInt();
if(choose==1) //삽입
{
System.out.print("Line(1), Rect(2), Circle(3)>>");
int choose1 = sc.nextInt();
if(choose1==1)
{
graph.add(new Line());
}
if(choose1==2)
{
graph.add(new Rect());
}
if(choose1==3)
{
graph.add(new Circle());
}
}
if(choose==2) //삭제
{
System.out.print("삭제할 도형의 위치>>");
int choose3 = sc.nextInt();
if(choose3>graph.size()||graph.get(choose3-1)==null)
{
System.out.println("삭제할 수 없습니다.");
}
graph.remove(choose3-1);
}
if(choose==3) //모두 보기
{
for(int i=0;i<graph.size();i++)
{
graph.get(i).draw();
}
}
if(choose==4) //종료
{
System.out.println("beauty을 종료합니다.");
break;
}
}
sc.close();
}
}
11. 나라와 수도 맞추기 게임의 실행 예시는 다음과 같다.
(1) 나라 이름(country)과 수도(capital)로 구성된 Nation 클래스를 작성하고 Vecotr<Nation> 컬렉션을 이용하여 프로그램을 작성하라.
(2) 이 프로그램을 HahsMap<String, String>을 이용하여 작성하라. '키'는 나라 이름이고 '값'은 수도이다.
12. Open Challenge를 수정하여 사용자가 단어를 삽입할 수 있도록 기능을 추가하라.
13. 보너스문제
'JAVA > JAVA 문제풀이' 카테고리의 다른 글
명품 자바 프로그래밍 6장 연습문제 (0) | 2023.08.18 |
---|---|
명품 자바 프로그래밍 5장 실습문제 (0) | 2023.08.14 |
명품 자바 프로그래밍 5장 이론문제 (0) | 2023.08.14 |
명품 자바 프로그래밍 4장 실습문제 (0) | 2023.07.04 |
명품 자바 프로그래밍 4장 이론문제 (0) | 2023.07.04 |