본문 바로가기
Solution_/명품 java

[명품 JAVA] 7장 실습문제(1~5) (제네릭과 컬렉션)

by 낭람_ 2019. 9. 22.
반응형

[7장 1번]

Scanner 클래스로 -1이 입력될 때까지 양의 정수를 입력받아 벡터에 저장하고 벡터를 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라.

정수(-1이 입력될 때까지)>> 10 6 22 6 88 77 -1

가장 큰 수는 88


[풀이]

import java.util.*;
public class VectorBig {
public static void printBig(Vector<Integer> v) { // 벡터 v의 정수 중 가장 큰 수 출력
int big = v.get(0); // 맨 처음에 있는 수를 제일 큰 수로 초기화
for(int i=1; i<v.size(); i++) {
if(big < v.get(i)) // 더 큰 수 발견
big = v.get(i); // big 변수 교체
}
System.out.println("가장 큰 수는 " + big);
}
public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>();
Scanner scanner = new Scanner(System.in);
System.out.print("정수(-1이 입력될 때까지)>> ");
while(true) {
int n = scanner.nextInt();
if(n == -1) // 입력된 수가 -1이면
break;
v.add(n);
}
if(v.size() == 0) {
System.out.print("수가 하나도 없음");
scanner.close();
return;
}
printBig(v); // 벡터 v의 정수 중 가장 큰 수 출력
scanner.close();
}
}


[7장 2번]

Scanner 클래스를 사용하여 6개 학점('A', 'B', 'C', 'D', 'F')을 문자로 입력받아 ArrayList에 저장하고, ArrayList를 검색하여 학점을 점수(A=4.0, B=3.0, C=2.0, D=1.0, F=0)로 변환하여 평균을 출력하는 프로그램을 작성하라.

6개의 학점을 빈 칸으로 분리 입력(A/B/C/D/F) >> A C A B F D

2.3333333333333335


[풀이]
import java.util.ArrayList;
import java.util.Scanner;
public class Prac02 {
public static void main(String[] args) {
ArrayList<Character> stack = new ArrayList<Character>();
Scanner sc = new Scanner(System.in);
System.out.print("6개의 학점을 빈 칸으로 분리 입력(A/B/C/D/F) >> ");
for(int i=0; i<6; i++) {
char c = sc.next().charAt(0);
stack.add(c);
}
int sum=0;
for(int i=0; i<stack.size(); i++) {
char c = stack.get(i);
switch(c) {
case 'A':
sum+=4;
break;
case 'B':
sum+=3;
break;
case 'C':
sum+=2;
break;
case 'D':
sum+=1;
break;
case 'F':
sum+=0;
break;
}
}
double avr = (double)sum/stack.size();
System.out.println(avr);
sc.close();
}
}


[7장 3번]

"그만"이 입력될 때까지 나라 이름과 인구를 입력받아 저장하고, 다시 나라 이름을 입력받아 인구를 출력하는 프로그램을 작성하라. 다음 해시맵을 이용하라.

나라 이름과 인구를 입력하세요.(예: Korea 5000)

나라 이름, 인구 >> Korea 5000

나라 이름, 인구 >> USA 1000000

나라 이름, 인구 >> Swiss 2000

나라 이름, 인구 >> France 3000

나라 이름, 인구 >> 그만

인구 검색 >> France

France의 인구는 3000

인구 검색 >> 스위스

스위스 나라는 없습니다.

인구 검색 >> 그만


[풀이]

import java.util.*;
public class HashMapNation {
public static void main(String[] args) {
HashMap<String, Integer> nations = new HashMap<String, Integer>();
Scanner scanner = new Scanner(System.in);
System.out.println("나라 이름과 인구를 입력하세요.(예: Korea 5000)");
while(true) { // "그만"이 입력될 때까지 반복
System.out.print("나라 이름, 인구 >> ");
String nation = scanner.next();
if(nation.equals("그만"))
break; // 입력 끝
int population = scanner.nextInt();
nations.put(nation, population); // 해시맵 나라이름과 인수 저장
}
while(true) {
System.out.print("인구 검색 >> ");
String nation = scanner.next();
if(nation.equals("그만"))
break;
Integer n = nations.get(nation);
if(n == null)
System.out.println(nation + " 나라는 없습니다.");
else
System.out.println(nation + "의 인구는 " + n);
}
scanner.close();
}
}


[7장 4번]

Vector 컬렉션을 이용하여 강수량의 평균을 유지 관리하는 프로그램을 작성하라. 강수량을 입력하면 벡터에 추가하고 현재 입력된 모든 강수량과 평균을 출력한다.

강수량 입력 (0 입력시 종료) >> 5

현재 평균 5

강수량 입력 (0 입력시 종료) >> 80

5 80 

현재 평균 42

강수량 입력 (0 입력시 종료) >> 53

5 80 53 

현재 평균 46

강수량 입력 (0 입력시 종료) >> 22

5 80 53 22 

현재 평균 40

강수량 입력 (0 입력시 종료) >> 0


[풀이]

import java.util.Vector;
import java.util.Scanner;
public class Prac04 {
public static void main(String[] args) {
Vector<Integer> stack = new Vector<Integer>();
Scanner sc = new Scanner(System.in);
while(true) {
System.out.print("강수량 입력 (0 입력시 종료) >> ");
int num = sc.nextInt();
if(num == 0)
break;
stack.add(num);
int avr =0;
for(int i=0; i<stack.size(); i++) {
System.out.print(stack.get(i)+" ");
avr += stack.get(i);
}
System.out.println();
avr /= stack.size();
System.out.println("현재 평균 "+avr);
}
sc.close();
}
}


[7장 5번]

하나의 학생 정보를 나타내는 Student 클래스에는 이름, 학과, 학번, 학점 평균을 저장하는 필드가 있다.

(1) 학생마다 Student 객체를 생성하고 4명의 학생 정보를 ArrayList<Student> 컬렉션에 저장한 후에, ArrayList<Student>의 모든 학생(4명) 정보를 출력하고 학생 이름을 입력받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하라.

학생 이름, 학과, 학번, 학점평균 입력하세요.

>> 황기태, 모바일, 1, 4.1

>> 이재문, 안드로이드, 2, 3.9

>> 김남윤, 웹공학, 3, 3.5

>> 최찬미, 빅데이터, 4, 4.25

----------------------------------

이름: 황기태

학과: 모바일

학번: 1

학점평균: 4.1

----------------------------------

이름: 이재문

학과: 안드로이드

학번: 2

학점평균: 3.9

----------------------------------

이름: 김남윤

학과: 웹공학

학번: 3

학점평균: 3.5

----------------------------------

이름: 최찬미

학과: 빅데이터

학번: 4

학점평균: 4.25

----------------------------------

학생 이름 >> 최찬미

최찬미, 빅데이터, 4, 4.25

학생 이름 >> 이재문

이재문, 안드로이드, 2, 3.9

학생 이름 >> 그만


[풀이]

import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Prac05_1 {
public static void main(String[] args) {
Student[] student = new Student[4];
ArrayList<Student> manage = new ArrayList<Student>();
Scanner sc = new Scanner(System.in);
System.out.println("학생 이름, 학과, 학번, 학점평균 입력하세요.");
for(int i=0; i<student.length; i++) {
System.out.print(">> ");
String text = sc.nextLine();
StringTokenizer st = new StringTokenizer(text, ",");
String name = st.nextToken().trim();
String department = st.nextToken().trim();
String number = st.nextToken().trim();
double grade = Double.parseDouble(st.nextToken().trim());
student[i] = new Student(name, department, number, grade);
manage.add(student[i]); // ArrayList에 저장
}
for(int i=0; i<manage.size(); i++) {
System.out.println("----------------------------------");
Student s = manage.get(i);
System.out.println("이름: "+s.get_name());
System.out.println("학과: "+s.get_department());
System.out.println("학번: "+s.get_number());
System.out.println("학점평균: "+s.get_grade());
}
System.out.println("----------------------------------");
while(true) {
System.out.print("학생 이름 >> ");
String name = sc.next();
if(name.equals("그만"))
break;
for(int i=0; i<manage.size(); i++) {
Student s = manage.get(i);
s.find_student(name);
}
}
sc.close();
}
}
class Student {
private String name;
private String department;
private String number;
private double grade;
public Student(String name, String department, String number, double grade) {
this.name = name;
this.department = department;
this.number = number;
this.grade = grade;
}
public String get_name() {
return name;
}
public String get_department() {
return department;
}
public String get_number() {
return number;
}
public double get_grade() {
return grade;
}
public void find_student(String name) {
if(name.equals(this.name)) {
System.out.println(this.name+", "+this.department+", "+this.number+", "+this.grade);
}
}
}


(2) ArrayList<Student> 대신, HashMap<String, Studnet> 해시맵을 이용하여 다시 작성하라. 해시맵에서 키는 학생 이름으로 한다.


[풀이]

import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;
public class Prac05_2 {
public static void main(String[] args) {
Student[] student = new Student[4];
HashMap<String, Student> manage = new HashMap<String, Student>();
Scanner sc = new Scanner(System.in);
System.out.println("학생 이름, 학과, 학번, 학점평균 입력하세요.");
for(int i=0; i<student.length; i++) {
System.out.print(">> ");
String text = sc.nextLine();
StringTokenizer st = new StringTokenizer(text, ",");
String name = st.nextToken().trim();
String department = st.nextToken().trim();
String number = st.nextToken().trim();
double grade = Double.parseDouble(st.nextToken().trim());
student[i] = new Student(name, department, number, grade);
manage.put(name,student[i]); // ArrayList에 저장
}
Set<String> key = manage.keySet();
Iterator<String> it = key.iterator();
while(it.hasNext()) {
String name = it.next();
System.out.println("----------------------------------");
Student s = manage.get(name);
System.out.println("이름: "+s.get_name());
System.out.println("학과: "+s.get_department());
System.out.println("학번: "+s.get_number());
System.out.println("학점평균: "+s.get_grade());
}
System.out.println("----------------------------------");
while(true) {
System.out.print("학생 이름 >> ");
String name = sc.next();
if(name.equals("그만"))
break;
Student s = manage.get(name);
s.find_student(name);
}
sc.close();
}
}
class Student {
private String name;
private String department;
private String number;
private double grade;
public Student(String name, String department, String number, double grade) {
this.name = name;
this.department = department;
this.number = number;
this.grade = grade;
}
public String get_name() {
return name;
}
public String get_department() {
return department;
}
public String get_number() {
return number;
}
public double get_grade() {
return grade;
}
public void find_student(String name) {
if(name.equals(this.name)) {
System.out.println(this.name+", "+this.department+", "+this.number+", "+this.grade);
}
}
}



반응형

댓글