Scanner 클래스로 -1이 입력될 때까지 양의 정수를 입력받아 벡터에 저장하고 벡터를 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라.
정수(-1이 입력될 때까지)>> 10 6 22 6 88 77 -1
가장 큰 수는 88
import java.util.*;
public class Main{
//벡터 v의 정수 중 가장 큰 수 출력하는 함수
public static void printBig(Vector<Integer> v){
int big = v.get(0);
for(int i=0; i<v.size(); i++){
if(big<v.get(i))
big= v.get(i);
}
System.out.println("가장 큰 수는" + big);
}
public static void main(String[] args){
Vector<Integer> v = new Vector<Integer>();
Scanner sc = new Scanner(System.in);
System.out.print("정수 -1이 입력될 때 까지 >>");
while(true){
int n= sc.nextInt();
if(n==-1){
break;
}
v.add(n);
}//while
if(v.size()==0){
System.out.println("수가 없습니다.");
sc.close();
return;
}
printBig(v);
sc.close();
}
}
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.*;
public class Main{
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
ArrayList<Character> grade = new ArrayList<>();
System.out.print("학점 6개 빈칸으로 분리하여 입력");
for(int i=0; i<6; i++){
char c= sc.next().charAt(0);
grade.add(c);
}//학점 입력 완료
int sum = 0;
for(int i=0; i<grade.size(); i++){
char c=grade.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 avg = (double)sum/grade.size();
System.out.println(avg);
sc.close();
}
}
"그만"이 입력될 때까지 나라 이름과 인구를 입력받아 저장하고, 다시 나라 이름을 입력받아 인구를 출력하는 프로그램을 작성하라. 다음 해시맵을 이용하라.
나라 이름과 인구를 입력하세요.(예: Korea 5000)
나라 이름, 인구 >> Korea 5000
나라 이름, 인구 >> USA 1000000
나라 이름, 인구 >> Swiss 2000
나라 이름, 인구 >> France 3000
나라 이름, 인구 >> 그만
인구 검색 >> France
France의 인구는 3000
인구 검색 >> 스위스
스위스 나라는 없습니다.
인구 검색 >> 그만
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
HashMap<String,Integer> nations = new HashMap<String,Integer>();
System.out.println("나라 이름과 인구를 입력하세요.(예: Korea 5000)");
while(true){
System.out.print("나라이름,인구 >>");
String nation=sc.next();
if(nation.equals("그만")){
break;
}
int num = sc.nextInt();
nations.put(nation,num); //해시맵에 나라이름과 인수 저장
}
while(true){
System.out.print("인구 검색>>");
String nation = sc.next();
if(nation.equals("그만"))
break;
Integer n= nations.get(nation);
if(n==null)
System.out.println(nation + "나라는 없습니다.");
else
System.out.println(nation+"의 인구는 "+n);
}
sc.close();
}
}
Vector 컬렉션을 이용하여 강수량의 평균을 유지 관리하는 프로그램을 작성하라. 강수량을 입력하면 벡터에 추가하고 현재 입력된 모든 강수량과 평균을 출력한다.
강수량 입력 (0 입력시 종료) >> 5
5
현재 평균 5
강수량 입력 (0 입력시 종료) >> 80
5 80
현재 평균 42
강수량 입력 (0 입력시 종료) >> 53
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
Vector<Integer> stack = new Vector<Integer>();
while(true){
System.out.print("강수량 입력(0 입력 시 종료)");
int n=sc.nextInt();
if(n==0)
break;
stack.add(n);
int sum=0;
int avg=0;
for(int i=0; i<stack.size(); i++){
System.out.print(stack.get(i)+" ");
sum += stack.get(i);
}
System.out.println();
avg = sum/stack.size();
System.out.println("현재 평균 "+avg);
}
sc.close();
}
}
하나의 학생 정보를 나타내는 Student 클래스에는 이름, 학과, 학번, 학점 평균을 저장하는 필드가 있다.
(1) 학생마다 Student 객체를 생성하고 4명의 학생 정보를 ArrayList 컬렉션에 저장한 후에, ArrayList의 모든 학생(4명) 정보를 출력하고 학생 이름을 입력받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하라.
학생 이름, 학과, 학번, 학점평균 입력하세요.
황기태, 모바일, 1, 4.1
이재문, 안드로이드, 2, 3.9
김남윤, 웹공학, 3, 3.5
최찬미, 빅데이터, 4, 4.25
StringTokenizer st= new StringTokenizer(str);
System.out.println(St.nextToken());
(1)
import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringTokenizer;
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 getName() {
return name;
}
public String getDepartment() {
return department;
}
public String getNumber() {
return number;
}
public double getGrade() {
return grade;
}
public void find_student(String name){
if(name.equals(this.name)){
System.out.println(this.name +","+this.department+","+ this.number+","+this.grade);
}
}
}
public class Main {
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]);
}
for(
int i = 0; i<manage.size();i++)
{
System.out.println("-----------------------------");
Student s = manage.get(i);
System.out.println("이름:" + s.getName());
System.out.println("학과:" + s.getDepartment());
System.out.println("학번:" + s.getNumber());
System.out.println("학점평균:" + s.getGrade());
}
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();
}
}
(2)HashMap 이용
import java.util.HashMap;
import java.util.HashMap;
import java.util.Scanner;
import java.util.StringTokenizer;
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 getName() {
return name;
}
public String getDepartment() {
return department;
}
public String getNumber() {
return number;
}
public double getGrade() {
return grade;
}
public void find_student(String name){
if(name.equals(this.name)){
System.out.println(this.name +","+this.department+","+ this.number+","+this.grade);
}
}
}
public class Main {
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]);
}
Set<String> key = manage.keySet();
Iterator<String> it = key.iterator();
while(it.hasNext())
{
System.out.println("-----------------------------");
Student s = manage.get(i);
System.out.println("이름:" + s.getName());
System.out.println("학과:" + s.getDepartment());
System.out.println("학번:" + s.getNumber());
System.out.println("학점평균:" + s.getGrade());
}
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();
}
}
[7장 6번]
도시 이름, 위도, 경도 정보를 가진 Location 클래스를 작성하고, 도시 이름을 '키'로 하는 HashMap<String, Location> 컬렉션을 만들고, 사용자로부터 입력 받아 4개의 도시를 저장하라. 그리고 도시 이름으로 검색하는 프로그램을 작성하라.
도시, 경도, 위도를 입력하세요.
서울, 37, 126
LA, 34, -118
파리, 2, 48
시드니, 151, -33
----------------------------------
서울 37 126
LA 34 -118
파리 2 48
시드니 151 -33
----------------------------------
도시 이름 >> 피리
피리는 없습니다.
도시 이름 >> 파리
파리 2 48
도시 이름 >> 그만
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;
class Location{
private String cityname;
private int longitude;
private int latitude;
public Location(String cityname, int longitude, int latitude) {
this.cityname = cityname;
this.longitude = longitude;
this.latitude = latitude;
}
public String getCityname() {
return cityname;
}
public int getLongitude() {
return longitude;
}
public int getLatitude() {
return latitude;
}
public void find_city(String cityname){
if(cityname.equals(this.cityname)){
System.out.println(this.cityname+" "+this.longitude+" "+this.latitude);
}
}
}
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Location[] locations = new Location[4];
HashMap<String,Location> manage = new HashMap<String, Location>();
for(int i=0; i<locations.length;i++){
System.out.print(">>");
String text = sc.nextLine();
StringTokenizer st = new StringTokenizer(text,",");
String cityname = st.nextToken().trim();
int longitude = Integer.parseInt(st.nextToken().trim());
int latitude = Integer.parseInt(st.nextToken().trim());
locations[i] = new Location(cityname,longitude,latitude);
manage.put(cityname,locations[i]); //ArrayList에 삽입
}
Set<String> key = manage.keySet();
Iterator<String> it = key.iterator();
System.out.println("---------------------------------------");
//arraylist 출력
while(it.hasNext()){
String cityname = it.next();
Location s = manage.get(cityname);
System.out.println(s.getCityname()+" "+s.getLongitude()+" "+s.getLatitude());
}
System.out.println("-----------------------------------------");
while(true){
System.out.print("도시 이름>>");
String cityname = sc.next();
if(cityname.equals("그만"))
break;
Location s = manage.get(cityname);
if(s == null){
System.out.println(cityname +"은 없는 도시 입니다.");
}
else
s.find_city(cityname);
}
sc.close();
}
}
이름과 학점(4.5만점)을 5개 입력받아 해시맵에 저장하고, 장학생 선발 기준을 입력 받아 장학생 명단을 출력하라.
미래장학금관리시스템입니다.
이름과 학점 >> 적당히 3.1
이름과 학점 >> 나탈락 2.4
이름과 학점 >> 최고조 4.3
이름과 학점 >> 상당히 3.9
이름과 학점 >> 고득점 4.0
장학생 선발 학점 기준 입력 >> 3.2
장학생 명단 : 최고조 상당히 고득점
[Hint] HashMap의 전체 요소를 검색하여 학점이 3.2 이상인 학생을 알아내야 한다. 예제 7-6은 해시맵 전체를 검색하는 코드 사례를 보여준다.
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//Student[] students = new Student[5];
HashMap<String,Double> manage = new HashMap<String, Double>();
System.out.println("장학금 관리 시스템!");
for(int i=0; i<5;i++){
System.out.print("이름과 학점>> ");
String text = sc.nextLine();
StringTokenizer st = new StringTokenizer(text," ");
String name = st.nextToken().trim();
double grade = Double.parseDouble(st.nextToken().trim());
manage.put(name,grade); //ArrayList에 삽입
}
System.out.print("장학생 선바 학점 기준 입력>> ");
double cutline = sc.nextDouble();
Set<String> key = manage.keySet();
Iterator<String> it = key.iterator();
System.out.print("장학생 명단 : ");
while(it.hasNext()){
String name = it.next();
double grade = manage.get(name);
if(grade >= cutline)
System.out.print(name+" ");
}
sc.close();
}
}
고객의 이름과 포인트 점수를 관리하는 프로그램을 해시맵을 이용하여 작성하라. 프로그램은 고객의 이름과 포인트를 함께 저장 관리하는데, 포인트는 추가될 때마다 누적하여 저장된다.
포인트 관리 프로그램입니다
이름과 포인트 입력 >> 이재문 40
(이재문,40)
이름과 포인트 입력 >> 황기태 50
(이재문,40)(황기태,50)
이름과 포인트 입력 >> 황기태 60
(이재문,40)(황기태,110)
이름과 포인트 입력 >> 김남윤 30
(이재문,40)(김남윤,30)(황기태,110)
이름과 포인트 입력 >> 이재문 20
(이재문,60)(김남윤,30)(황기태,110)
이름과 포인트 입력 >> 그만
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HashMap<String, Integer> manage = new HashMap<String, Integer>();
System.out.println("**포인트 관리 시스템***");
while (true) {
System.out.print("이름과 포인트 입력>> ");
String st = sc.next();
if (st.equals("그만"))
break;
StringTokenizer s = new StringTokenizer(st, " ");
String name = s.nextToken().trim();
int point = Integer.parseInt(s.nextToken().trim());
if (manage.get(name) != null) {
manage.put(name, manage.get(name) + point);
}
else
manage.put(name, point);
Set<String> keys = manage.keySet();
Iterator<String> it = keys.iterator();
while (it.hasNext()) {
String n = it.next();
int p = manage.get(n);
System.out.print("(" + n + "," + p + ")");
}//while
System.out.println();
}
sc.close();
}
}
[7장 9번] -Stack, Vector
다음 Istack 인터페이스가 있다.
interface IStack<T> {
T pop();
boolean push(T ob);
}
IStack 인터페이스를 구현(implements)하는 MyStack 클래스를 작성하라. 스택의 원소는 Vector를 이용하여 저장하라.
다음은 MyStack로 구체화한 정수 스택을 생성하고 활용하는 코드와 실행 결과이다.
public class StackManager {
public static void main(String[] args) {
IStack<Integer> stack = new MyStack<Integer>();
for (int i=0; i<10; i++) stack.push(i);
while(true) {
Integer n = stack.pop();
if(n == null) break;
System.out.print(n+" ");
}
}
}
9 8 7 6 5 4 3 2 1 0
------------------------------------
import java.util.*;
interface IStack<T>{
T pop();
boolean push(T ob);
}
class MyStack<T> implements IStack<T>{
private Vector<T> v;
private int size;
public MyStack (){
v = new Vector<T>();
size =-1;
}
public T pop(){
if(size ==1)
return null;
return v.get(size--);
}
public boolean push(T ob){
v.add(ob);
size++;
return true;
}
}
public class Stakcex {
public static void main(String[] args){
IStack<Integer> stack = new MyStack<Integer>();
for(int i=0; i<10; i++){
stack.push(i);
}
while(true){
Integer n = stack.pop();
if(n==null)
break;
System.out.print(n +" ");
}
}
}
[7장 10번] Vector
Vector의 벡터를 이용하여 그래픽 편집기를 만들어보자. 본문 5.6절과 5.7절에서 사례로 든 추상 클래스 Shape과 Line, Rect, Circle 클래스 코드를 잘 완성하고 이를 활용하여 "삽입", "삭제", "모두 보기", "종료"의 4가지 그래픽 편집 기능을 프로그램을 작성하라. 6장 실습문제 6번을 Vector을 이용하여 재작성하는 연습이다. Vector를 이용하면 6장 실습문제 6번보다 훨씬 간단히 작성됨을 경험할 수 있다.
그래픽 에디터 beauty을 실행합니다.
삽입(1), 삭제(2), 모두 보기(3), 종료(4) >> 1
Line(1), Rect(2), Circle(3) >> 2
삽입(1), 삭제(2), 모두 보기(3), 종료(4) >> 1
Line(1), Rect(2), Circle(3) >> 3
삽입(1), 삭제(2), 모두 보기(3), 종료(4) >> 2
삭제할 도형의 위치 >> 3
삭제할 수 없습니다.
삽입(1), 삭제(2), 모두 보기(3), 종료(4) >> 4
beauty을 종료합니다.
[7장 11번] Vector, Hasgmap
나라와 수도 맞추기 게임의 실행 예시는 다음과 같다.
** 수도 맞추기 게임을 시작합니다. **
입력:1, 퀴즈:2, 종료:3>> 1
현재 9개 나라와 수도가 입력되어 있습니다.
나라와 수도 입력10>> 한국 서울
나라와 수도 입력11>> 그리스 아테네
그리스는 이미 있습니다!
나라와 수도 입력11>> 호주 시드니
나라와 수도 입력12>> 이탈리아 로마
나라와 수도 입력13>> 그만
입력:1, 퀴즈:2, 종료:3>> 2
일본의 수도는? 동경
정답!!
스페인의 수도는? 하얼빈
아닙니다!!
프랑스의 수도는? 파리
정답!!
중국의 수도는? 베이징
정답!!
스페인의 수도는? 그만
입력:1, 퀴즈:2, 종료:3>> 3
게임을 종료합니다.
(1) 나라 이름(country)과 수도(capital)로 구성된 Nation 클래스를 작성하고 Vecotr 컬렉션을 이용하여 프로그램을 작성하라.
import java.util.*;
public class CapitalGame {
private Vector<Nation> store = new Vector<Nation>();
private Scanner scanner = new Scanner(System.in);
public CapitalGame(){
store.add(new Nation("멕시코","멕시코시티"));
store.add(new Nation("스페인","리스본"));
store.add(new Nation("프랑스","파리"));
store.add(new Nation("영국","런던"));
store.add(new Nation("그리스","아테네"));
store.add(new Nation("독일","베를린"));
store.add(new Nation("일본","도쿄"));
store.add(new Nation("중국","베이징"));
store.add(new Nation("러시아", "모스크바"));
}
private void error(String msg){
System.out.println(msg);
}
public void run(){
System.out.println("***수도 맞추기 게임***");
while(true){
System.out.print("입력:1, 퀴즈:2, 종료:3 >>");
int menu = scanner.nextInt();
switch(menu){
case 1: input(); break;
case 2: quiz(); break;
case 3: finish(); return;
default:
error("잘못된 입력입니다.");
}
}
}
private boolean contains(String country){
for(int i=0; i<store.size(); i++){
if(store.get(i).getCountry().equals(country)){
return true;
}
}
return false;
}
private void input(){
int n = store.size();
System.out.println("현재"+ n+"개 나라와 수도가 입력되어 있습니다.");
n++;
while(true){
System.out.print("나라와 수도 입력하라" + n+">>");
String country = scanner.next();
if(country.equals("그만")){
break;
}
String capital = scanner.next();
if(contains(country)){
System.out.println(country+"는 이미 있습니다.");
continue;
}
store.add(new Nation(country, capital));
n++;
}
}
private void quiz(){
while(true){
//나라 중에서 하나를 랜덤으로 선택
int index = (int)(Math.random()*store.size()); //랜덤한 위치 결정
//문제와 정답 결정
Nation nation = store.get(index);
String q = nation.getCountry();
String a = nation.getCapital();
//문제 출력
System.out.print(q+"의 수도는 어디?");
//사용자 입력 받기
String capitalFromUser = scanner.next();
if(capitalFromUser.equals("그만")){
break;
}
if(capitalFromUser.equals(a))
System.out.println("정답");
else
System.out.println("틀림...ㅠㅠ");
}
}
private void finish(){
System.out.println("게임 종료");
}
class Nation{
private String country;
private String capital;
public Nation(String country, String capital){
this.country = country;
this.capital = capital;
}
public String getCountry(){
return country;
}
public String getCapital(){
return capital;
}
}
}
--------------------
(2) 이 프로그램을 HahsMap<String, String>을 이용하여 작성하라. '키'는 나라 이름이고 '값'은 수도이다
toArray() : 리스트를 배열로 *타입 Object ex)Object [] array = (keys.toArray());
import java.util.*;
public class CapitalGame {
private HashMap<String, String> store = new HashMap<String,String>();
private Scanner scanner = new Scanner(System.in);
public CapitalGame(){
store.put("멕시코", "멕시코시티");
store.put("스페인", "리스본");
store.put("프랑스", "파리");
store.put("영국", "런던");
store.put("그리스", "아테네");
store.put("독일", "베를린");
store.put("일본", "도쿄");
store.put("중국", "베이징");
store.put("러시아", "모스크바");
}
private void error(String msg){
System.out.println(msg);
}
public void run(){
System.out.println("***수도 맞추기 게임***");
while(true){
System.out.print("입력:1, 퀴즈:2, 종료:3 >>");
int menu = scanner.nextInt();
switch(menu){
case 1: input(); break;
case 2: quiz(); break;
case 3: finish(); return;
default:
error("잘못된 입력입니다.");
}
}
}
private void input(){
int n = store.size();
System.out.println("현재"+ n+"개 나라와 수도가 입력되어 있습니다.");
n++;
while(true){
System.out.print("나라와 수도 입력하라" + n+">>");
String country = scanner.next();
if(country.equals("그만")){
break;
}
String capital = scanner.next();
if(store.containsKey(country)){
System.out.println(country+"는 이미 있습니다.");
continue;
}
store.put(country,capital);
n++;
}
}
private void quiz(){
Set<String> keys = store.keySet();
Object [] array = (keys.toArray());
while(true){
//나라 중에서 하나를 랜덤으로 선택
int index = (int)(Math.random()*array.length); //랜덤한 위치 결정
//문제와 정답 결정
String q = (String)array[index];
String a = store.get(q);
//문제 출력
System.out.print(q+"의 수도는 어디?");
//사용자 입력 받기
String capitalFromUser = scanner.next();
if(capitalFromUser.equals("그만")){
break;
}
if(capitalFromUser.equals(a))
System.out.println("정답");
else
System.out.println("틀림...ㅠㅠ");
}
}
private void finish(){
System.out.println("게임 종료");
}
public static void main(String[] args){
CapitalGame game = new CapitalGame();
game.run();
}
}