본문 바로가기

Study/Java

[java] 클래스와 자료구조 실습

Member 1. 난수 발생 -> 배열의 위치를 변경

2. a= (int) (Math.random() * 10); 

-> 곱하기할 때, 괄호를 항상 넣어줘야 한다.

그렇지 않으면, random에서 소수점이 나오는데 정수형변환할 때,

0으로 출력이 된다.

 

 

Array를 이용한 카드랜덤뽑기

public static void main(String[] args) {
  Random rd = new Random();
  String[] card = { "하트1", "하트2", "하트3", "하트4", "하트5", "하트6", "하트7", "하트8", "하트9", "하트10"};
  String temp;
  int a, b;
  
  for(int i=0;i<100;i++)
  {

//Math클래스의 random
   a= (int) (Math.random() * 10);

//Random클래스의 random
   b= rd.nextInt(10); 
   

//스와핑 기법
   temp = card[a];
   card[a] = card[b];
   card[b] = temp;
  }
  for(int i=0;i<10;i++)
  {
   System.out.print(card[i]);
  }
 }

Array 클래스

public static void main(String[] args) {
  int arr[] = {52,38,43,21,15,27,32,54,36,79};

//배열의 정렬
  Arrays.sort(arr);
  for(int i=0;i<arr.length;i++)
  {
   System.out.print(arr[i] + " ");
  }

//배열의 숫자를 찾는다.
  System.out.println("\n54가 있는 위치 : "+Arrays.binarySearch(arr, 54));
  
  int arr2[] = new int[100];
  //arr2 배열에 있는 값 1부터 100까지 2로 바꿔준다.
  Arrays.fill(arr2, 1, 100, 2); 
  for(int i=0;i<arr2.length;i++)
  {
   System.out.print(arr2[i]+ " ");
  }
 }

Comparable 인터페이스

class Sagak implements Comparable {
 private int width;
 private int height;
 
 public Sagak(int width, int height) {
  this.width = width;
  this.height = height;
 }
 public int getArea() {
  return width * height;
 }
 public int compareTo(Object o) {
  Sagak s = (Sagak) o ;
  return getArea() - s.getArea(); 
  //양수가 들어오면 CampareTo()메소드를 호출한 사각 객체가 더 크다.
  //음수가 들어오면 s 객체가 더 크다.
 }
}
public class Compareable_Exam {

 public static void main(String[] args) {
  Sagak a = new Sagak(1, 2);
  Sagak b = new Sagak(2, 3);
  
  System.out.println(a.compareTo(b));
  
  //객체 간의 넓이를 기준으로 정렬을 할 수 있다.
  Sagak[] arr = { new Sagak(2, 5), new Sagak(3, 3), new Sagak(1, 2), new Sagak(6, 9), new Sagak(2, 2) };
  Arrays.sort(arr);
  for(int i=0;i<arr.length;i++)
  {
   System.out.print(arr[i].getArea() + " ");
  }
 }
}

ArrayList 클래스 예제

public static void main(String[] args) { 

//ArrayList 객체 생성
  ArrayList<String> list = new ArrayList<String>();

//ArrayList의 String 타입의 데이터 저장
  list.add("포도");  
  list.add("참외");  
  list.add("복숭아");

//ArrayList에 있는 데이터의 수 리턴하고 num에 저장
  int num = list.size();
  for(int i=0;i<num;i++)
  {

//ArrayList에 있는 데이터들을 받아서 출력
   System.out.println(list.get(i));
  }
 }

문자열 추가 삭제

public class ArrayList_Exam {
 static void displayList(ArrayList list) {
  System.out.println("\n----------------목록----------------");
  for(int i=0;i<list.size();i++)
  {
   System.out.print(list.get(i) +" ");
  }
  System.out.println();
 } 

public static void main(String[] args) throws Exception { 

//br.readLine()에 대한 예외처리문

//ArrayList 생성
  ArrayList<String> list = new ArrayList<String>();
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
  String select;  
  while(true)
  {
   System.out.println("<<1. 추가 | 2. 삭제 | 3. 종료>>");  
   System.out.print("선택하세요! : ");
   select = br.readLine(); //한 줄씩 입력 받기
   if(select.equals("1"))
   {
    System.out.println("추가할 문자열 입력하세요 : ");
    list.add(br.readLine());
    displayList(list);
   }
   else if (select.equals("2"))
   {
    System.out.println("삭제할 문자열 입력하세요 : ");
    //list의 삭제
    list.remove(br.readLine());
    displayList(list);
   }
   else if (select.equals("3"))
   {
    System.out.println("종료합니다.");
    br.close();
    break;
   }
  }
 }

해쉬테이블을 이용한 스케쥴 관리표 만들기

public class Schedule { 
 private Hashtable<String, String> ht;
 public Schedule(){
  ht = new Hashtable<String,String>();
 }
 
 public String readKeyboard(){
  String input = "";
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  try{
   input = br.readLine();
  }catch(Exception e){}
  
  return input;
 }
 
 public int printMenu(){
  int input = 0;
  do{
   System.out.println("<1.스케쥴 확인  2.스케쥴추가  3. 스케쥴삭제  4.종료");
   System.out.println("선택하세요:");
   try{
    input = Integer.parseInt(readKeyboard());
   }catch(Exception e){}
  }while(input != 1 && input != 2 &&input != 3 && input != 4);
  
  return input;
 }
 
 public void select(int input){
  switch(input){
  case 1:

//Enumeration의 형식으로 Key의 List를 리턴
   Enumeration<String> en = ht.keys();

//리턴받은 객체를 가지고 있으면 다음 것을 리턴, 그렇지 않으면 null값 출력
   while(en.hasMoreElements()){
    System.out.println(en.nextElement());
   }
   System.out.println("확인하실 스케쥴을 입력하세요");
   String str = readKeyboard();

//해쉬테이블의 데이터를 찾아서 출력
   System.out.println(str + "    " + ht.get(str) );  
   break;
  
  case 2:
   System.out.println("날짜를 입력하세요 ex)2009/07/14");
   String date = readKeyboard();
   System.out.println("스케쥴을 입력하세요");
   String sch = readKeyboard();

//해쉬테이블의 날짜와 내용을 입력
   ht.put(date, sch);
   break;   
   
  case 3:
   Enumeration<String> den = ht.keys();
   while(den.hasMoreElements()){
    System.out.println(den.nextElement());
   }
   System.out.println("삭제할 스케쥴의 날짜를 입력하세요");
   String del = readKeyboard();

//해쉬테이블의 데이터를 삭제
   ht.remove(del);
   break;
  case 4:
   System.exit(0);
  }
 }
 
 public void gameStart(){
  while(true){
   int input =printMenu();
   select(input);
  }
 }
 
 public static void main(String[] args) {
  Schedule sch = new Schedule();
  sch.gameStart();  
 }
}

 


 

과제1>배열을 이용하여 로또 프로그램을 만들어 보자.
1 - 45까지의 중복되지 않는 숫자를 이용하여 6개의 
숫자를 출력되도록 하자.

ArrayList_Test01.java

import java.util.*;
public class ArrayList_Test01 {
 public static void main(String[] args) {
  int[] arr = new int[45];
  int a,b,c;
  for(int i=0;i<45;i++)
  {
   arr[i] = i+1;
  }
  for(int i=0;i<45;i++)
  {
   a = (int)(Math.random()*45);
   b = (int)(Math.random()*45);
   
   c = arr[a];
   arr[a] = arr[b];
   arr[b] = c;   
  }
  for(int i=0;i<6;i++)
  {
   System.out.print(arr[i]+ " "); 
  }
 }
}

과제2>ArrayList를 이용하여 로또프로그램을 만들어보자.

1) 기본적으로 6개의 중복되지 않는 숫자를 구한다.

2) 1번을 입력하면 직접입력한 로또 게임이 실행되어
  1등, 2등, 3등, 4등, 5등 , 꽝을 출력하도록 한다.

3) 로또번호를 몇번 시도로 맞추는지 count값을 출력한다.

Lotto.java

public static void main(String[] args) throws Exception {
  ArrayList<String> list = new ArrayList<String>();
  ArrayList<String> list2 = new ArrayList<String>();
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
  String select, temp;
  int[] arr = new int[45];
  int a,b,c, cnt;
  for(int i=0;i<45;i++) {
   arr[i] = i+1;
  }
  for(int i=0;i<45;i++) {
   a = (int)(Math.random()*45);
   b = (int)(Math.random()*45);

   c = arr[a];
   arr[a] = arr[b];
   arr[b] = c;   
  }
  
  for(int i=0;i<6;i++) {
   System.out.println((i+1)+"번째 로또번호 입력하세요 :");
   select = br.readLine();
   list2.add(select);
  }

  System.out.println("<<1. 로또확인 | 2. 종료>>\n선택: ");
  select = br.readLine();
  int so=0;
  if (select.equals("1")) {
   System.out.print("로또 번호는 ");
   for(int i=0;i<6;i++) {
    System.out.print(arr[i]+ " "); 
    list.add(Integer.toString(arr[i]));
   } 
   System.out.println(" 입니다.");
   for(int i=0;i<6;i++) {
    if (list.contains(list2.get(i))) {
     so++;
     
    }//if-end
   } // for-end   
  }
  
  switch(so){
  case 6:
   System.out.println(so+"개를 맞추셨습니다 1등 입니다");
   break;
  case 5:
   System.out.println(so+"개를 맞추셨습니다 2등 입니다");
   break;
  case 4:
   System.out.println(so+"개를 맞추셨습니다 3등 입니다");
   break;
  case 3:
   System.out.println(so+"개를 맞추셨습니다 4등 입니다");
   break;
  default:
   System.out.println(so+"개를 맞추셨습니다 꽝입니다");
   break;
  }    
 }
}

과제3> ArrayList를 이용하여 주소록을 만들어 보자.

주소록 내용: 이름, 주소, 전화번호, 기타 등등
구현할 기능: 추가, 삭제 , 찾기 , 출력

반드시 한명의 데이터를 처리하기 위한 Member 클래스를
만들어 처리하시오.

 

Member.java

//생성자

class Member {
 private String name;
 private String address;
 private String phone;
 private int age;
 
 Member(String name, String address, String phone, int age) {
  this.name = name;
  this.address = address;
  this.phone = phone;
  this.age = age;
 }

 String getName() {
  return name;
 }

 void setName(String name) {
  this.name = name;
 }

 String getAddress() {
  return address;
 }

 void setAddress(String address) {
  this.address = address;
 }

 String getPhone() {
  return phone;
 }

 void setPhone(String phone) {
  this.phone = phone;
 }

 int getAge() {
  return age;
 }

 void setAge(int age) {
  this.age = age;
 }
}

Control.java

import java.util.*;

public class Control {

//ArrayList 대신에 Vector
 Vector<Member> v = new Vector<Member>();
 
 Control() {}
 
 void insert(String name, String address, String phone, int age) {
  Member member = new Member(name, address, phone, age);

//member 추가
  v.addElement(member);
 }
 
 void remove(String name) {
  int cnt = 0;

//Iterator 대신에 Enumeration
  Enumeration<Member> en = v.elements();
  while (en.hasMoreElements()) {
   Member member = (Member)en.nextElement();
   if (member.getName().equals(name)) {

//member 삭제
    v.remove(member);
    cnt++;
   }
  }
  if ( cnt == 0 ) {
   System.out.println(name + "님은 주소록에 없어 지울 수 없습니다.");
  }
 }
 
 void search(String name) {
  int cnt = 0;
  Enumeration<Member> en = v.elements();
  while (en.hasMoreElements()) {
   Member member = (Member)en.nextElement();
   if (member.getName().equals(name)) {
    System.out.println("이름 : " + member.getName() + "  주소 : " + member.getAddress() + "  전화번호 :

" + member.getPhone() + "  나이 : " + member.getAge());
    cnt++;
   }
  }
  if ( cnt == 0 ) {
   System.out.println(name + "님은 주소록에 없어 찾을 수 없습니다.");
  }
 }
 
 void show_print() {
  Enumeration<Member> en = v.elements();
  while (en.hasMoreElements()) {
   Member member = (Member)en.nextElement();
   System.out.println("이름 : " + member.getName() + "  주소 : " + member.getAddress() + "  전화번호 : " +

member.getPhone() + "  나이 : " + member.getAge());
  }
 }
}

MenuControl.java

import java.io.*;

public class MenuControl {
 Control ct = new Control();
 
 public static void main(String[] args) {
  MenuControl address = new MenuControl();
  address.gameStart();
 }
 

//키보드 입력받는 함수
 String readKeyboard() {
  String input = "";
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  try {
   input = br.readLine();
  } catch (Exception e) {
   System.out.println("Keyboard Input Error !! ");
  }
  return input;
 }
 
 int printMenu() {
  int input = 0;
  do {
   System.out.println("< 1.Insert  2.Delete  3.Search  4.All Member View 5.Exit>");
   System.out.println("선택하세요...");
   try {
    input = Integer.parseInt(readKeyboard());
   } catch (Exception e) {}
  } while ( input != 1 && input != 2 && input != 3 && input != 4 && input != 5);
  return input;
 }
 
 void select(int input) {
  switch (input) {
   case 1 :
    System.out.println("이름 : ");
    String name = readKeyboard();
    System.out.println("주소 : ");
    String add = readKeyboard();
    System.out.println("전화번호 : ");
    String phone = readKeyboard();
    System.out.println("나이 : ");
    int age = Integer.parseInt(readKeyboard());
    ct.insert(name, add, phone, age);
    break;
   case 2 :
    System.out.println("삭제할 이름 : ");
    String deleteName = readKeyboard();
    ct.remove(deleteName);
    break;
   case 3 :
    System.out.println("찾으실 이름 : ");
    String searchName = readKeyboard();
    ct.search(searchName);
    break;
   case 4 :
    ct.show_print();
    break;
   case 5 :
    System.exit(0);
  }
 }
 

//실행함수
 void gameStart() {
  while (true) {
   int input = printMenu();
   select(input);
  }
 }
}

'Study > Java' 카테고리의 다른 글

[java] Input, Output 실습  (0) 2019.05.15
[java] Input, Output  (0) 2019.05.15
[java] 클래스와 자료구조  (0) 2019.05.15
[java] String, StringBuffer 실습  (0) 2019.05.15
[java] 참조값, instead of, 클래스  (0) 2019.05.15