본문 바로가기

   
Programming/Java

9일차!

반응형
package work;
import java.util.Scanner;
public class Work {
      /**
     숫자를 23을 치면
     이십삼이 나오도록
      */
     
      public static void main(String[] args){
            /*내가 한것
           Scanner s = new Scanner(System.in);
           String[] num = {"일","이","삼","사","오","육","칠","팔","구","십"};
           String[] ten = {"십","이십","삼십","사십","오십","육십","칠십","팔십","구십"};
           System.out.print("1~99 숫자를 입력 : ");
           
            int temp = s.nextInt();
           String up = Integer.toString( temp);
            int one = Integer.parseInt(up.substring(0,1));
           
            int two =0;
           
           if(Integer.parseInt(up)>10){
                two = Integer.parseInt(up.substring(1));   
           }
     
           for( int i=0; i<10; i++){
                if(i == temp){
                     System.out.println("입력한 수는 : " + num[i]);
                }else if( temp > 9){
                     if(one == i){
                           System.out.print("입력한 수는 : " + ten[i-1]);                      
                     }
                     if(two == i){
                           System.out.print( num[i-1]);
                     }
                }
           }
           s.close();

           */
            /*편한방법*/

           String[] names = {"일" ,"이" ,"삼" ,"사" ,"오" ,"육" ,"칠" ,"팔" ,"구" };
            int num = 382;
            //백의자리
            int a = num / 100;         
            //십의자리
            int b = ( num - ( a*100))/10;          
            //일의 자리
            int c = ( num - ( a*100 + b*10));
           
           String str = names[ a-1] + "백" + names[ b-1] + "십" + names[ c-1];
           System. out.println( str);
//         결과화면__
//         삼백팔십이
     }
}


/**인터페이스
 * 어떻게 클래스를 만들어 달라고 미리 정의
 * 각각의 기능(메소드)에 대한 기능을 어떻게 만들어 달라고 이야기.
 * 완전한 추상화
 * 추상메소드만 있는것  * 구현이 하나도 없는것  * 스펙으로작동하는것 ex) 제품스펙으로 작동 하는것
 * 인터페이스에 있는 메소드 그대로 구현
 * 자바에서는 클래스 하나만 상속을 받을수 있다. 추상메소드는 각 기능을 모두 정의 해야한다는 단점이 있다.
 * 추상클래스를 이용해서도 가이드를 줄수 있지만 단하나의 클래스밖에 상속을 받지 못하기 때문에 인터페이스가 존재.
 * 인터페이스는 여러 기능을 상속 받을수 있다.
 * 인터페이스 = 기능의 명세서 어떠한 기능을 구현해야한다는 여러 기능을 정의할때 사용
 * 추상클래스 = 기본적인 구현 자식클래스를 바로정의해서 사용할수 있는것들 바로 상속받아서 기능이 변경 되는것
 * 기본명세서 = 인터페이스를 상속받아서 구현클래스를 만든다 클래스를 만들기전에 각기능에 대한것을 명시하여 그대로 만들어 지도록
 * 인터페이스 특징 : 추상매서드, 상수만 가질수 있다.
 * 추상메서드를 정의할 때 abstract를 붙일 필요가 없다.
 * 인터페이스를 new를 사용해서 객체 생성할 수 없다.
 * 클래스는 한번에 여러개의 인터페이스를 상속받을수 있다.
 * Serializable -> 전송가능한 객체 전송안되게 하려면 Serializable을 붙이지 않는다.
 * 마크업인터페이스 용도로도 인터페이스를 사용한다.여러개를 동시에 보낼수 있기 때문에
 */


package work;

public interface Mirror {
/*
 * 표준을 정의한다
 * 스펙을 정의한다.
 * 가이드를 정의한다.  
 */
      //상수와 추상메소드만 정의할 수 있다.
      public static final int MAX_AGE = 5;
     
      //아래와 같은 기능들이 있겠내?
      void autoClose();
      void control();
      //public abstract void autoClose();//이와같이 정의 된다고 볼수 있다.
     
     
}


package work;

public class DukkyungMirror implements Mirror{

      public void autoClose() {
           System. out.println( "시동을 끄면 자동으로 접기" );        
     }

      @Override
      public void control() {
           System. out.println( "거울의 각도 조절하기" );       
     }
      //클래스는 무조건 기능정의~
}


package work;

public class TaejungMirror implements Mirror {

      public void autoClose() {
           System. out.println( "삐그덕 소리내며 접힌다." );          
     }

      public void control() {
           System. out.println( "삐그덕 소리내며 조절된다." );
     }

}


package work;

public class CarDemo {

      public static void main(String[] args){
           DukkyungMirror dm = new DukkyungMirror();
           TaejungMirror tm = new TaejungMirror();
            //인버젼오브컨트롤 ioc -> 제어역행(여태까지는 내가필요한 객체를 내가 만들었는대 거꾸로 전달받는객체를 거꾸로 올리려면 인터페이스가 껴있어야한다.
            //제너시스클래스는 언제든지 클래스 교체가 가능 + 확장한 기능을 갖다 교체하면 끝
           Genesis g = new Genesis( tm);
            g.powerOff();
            g.joystic();
     }
//결과화면___________
//   시동끄기
//   삐그덕 소리내며 접힌다.
//   조절하기
//   삐그덕 소리내며 조절된다.
     
}


package work;

public class Genesis {

     Mirror m;
     
      public Genesis(Mirror m){
            this. m = m;
     }

      public void powerOff(){
           System. out.println( "시동끄기" );
            m.autoClose();
     }
     
      public void joystic(){
           System. out.println( "조절하기" );
            m.control();
     }
     
}


package oop13;
import java.util.Arrays;
public class SortDemo {
     
      public static void main(String[] args){
           String[] names = { "김유신" , "강감찬" , "홍길동" , "이순신" };
           Arrays. sort( names);
           
           String str = Arrays. toString( names);
           System. out.println( str);
     }
     
}


package oop13;

public class Champ implements Comparable<Champ> {
     
     String name;
      int exp;
     
      public Champ(){}
      public Champ(String name, int exp){
            this. name = name;
            this. exp = exp;
     }
     
      //객체간의 소팅을 하기위해서는 반드시 인터페이스를 통해 compareto가 구현이 되어야 한다.
      //그리고 출력을 위해서는 String메소드를 제정의 해줘야 한다.
      //compareto 인터페이스를 구현했는지 체크한다. Champ o 중 o의 의미는 다른 아들 Champ
      @Override
      public int compareTo(Champ o) {      
            return ( this. exp - o. exp);
     }
     
      //alt sheft s 제네레이터 투스트링
      @Override
      public String toString() {
            return "Champ [name=" + name + ", exp=" + exp + "]";
     }
     
}


package oop13;
import java.util.Arrays;
public class SortDemo2 {
      public static void main(String[] args){
           Champ[] arr = new Champ[5];
            arr[0] = new Champ( "천하무적" , 100);
            arr[1] = new Champ( "전부비켜" , 200);
            arr[2] = new Champ( "다 죽었어" , 50);
            arr[3] = new Champ( "웃지마" , 150);
            arr[4] = new Champ( "죽을래" , 70);
           
           Arrays. sort( arr);
           String text = Arrays. toString( arr);
           
           System. out.println( text);
     }
}


// instanceof //연산자는 어떠한 객체인지 트루 펄스로 돌려준다. 유용한 연산자
package oop14;
import oop7.*;
public class InstanceofDemo {

      public static void main(String[] args){
           Phone p1 = new Iphone();
           Phone p2 = new Galaxy();
           
            //어떤 객체가 포함되어있는지 여부를 true false로 나누어 반환한다.
           System. out.println( p2 instanceof Phone);
           System. out.println( p2 instanceof Phone);
            //결과_____
//         true
//         true
            //지금 내가 알고 있는 이객체가 어떤타입의 객체인지 알아낼수 있다.
            if( p1 instanceof Iphone){
                 //p1 IPhone 타임의 객체다.
                 //if else 인스턴스사용을 하면 현재객체에서 다른객체를 찾아갈수 있다.
                 //아이폰전용 기능
                Iphone p =(Iphone) p2;
           } else if( p1 instanceof Galaxy){
                 //p1이 Galaxy 타입의 객체다.
                 //지금위치에서 다른객체를 찾아갈수 있다.
                 //갤럭시폰의 전용 기능
           } else {
                 //짝퉁이다.
           }
     }
     
}


package oop14;
import oop7.*;
public class InstanceofDemo {

      public static void main(String[] args){
           Phone p1 = new Iphone();
           Phone p2 = new Galaxy();
                
            //어떤 객체가 포함되어있는지 여부를 true false로 나누어 반환한다.
           System. out. println( p1 instanceof Iphone);
           System. out. println( p1 instanceof Galaxy);
            //결과_____
//         true
//         false
            //지금 내가 알고 있는 이객체가 어떤타입의 객체인지 알아낼수 있다.
            if( p1 instanceof Iphone){
                 //p1 IPhone 타임의 객체다.
                 //if else 인스턴스사용을 하면 현재객체에서 다른객체를 찾아갈수 있다.
                 //아이폰전용 기능
                Iphone i = (Iphone) p1;
                 i.facetime();
           } else if( p1 instanceof Galaxy){
                 //p1이 Galaxy 타입의 객체다.
                 //지금위치에서 다른객체를 찾아갈수 있다.
                 //갤럭시폰의 전용 기능
                Galaxy g = (Galaxy) p1;
                 g.dmb();
           } else {
                 //짝퉁이다.
                System. out.println( "짝퉁" );
           }
     }
     
}


package oop14;
import oop7.*;
public class InstanceofDemo2 {

      public static void testAllPhone(Phone p){
            p.call();
            p.sms();
           
            if( p instanceof Iphone){ //p에 Iphone 이 담긴 경우
                ((Iphone) p).facetime();
           } else if( p instanceof Galaxy){ //p에 Galaxy가 담긴 경우
                ((Galaxy) p).dmb();
           }
     }
     
      public static void main(String[] args){
           
           Iphone p1 = new Iphone();
           Galaxy p2 = new Galaxy();
           
            testAllPhone( p1);          
     }
     
      /*결과____________
      * 전화걸기
          문자
          영상통화를 합니다.

      */
     
}


객체를만들면 super와 this가 생성된다. super를 쓰는것은 많이없다.
부모의 참조값을 갖고있는게 super 부모의 있는 메소드를 호출한다.


package work;
import java.util.Random;
public class Work2 {
/**
     2. 난수를 만들어서 로또 번호 뽑기(겹치지 않게)
         로또번호 6개 while로
        
     3. 난수를 만들어서 야구게임 구현하기
      - 난수를 사용해서 숫자3개를 뽑기 --> 배열에 담기[1,2,3]
      - 혹은 그냥 1,2,7 입력한 값을 배열에담기
      - 숫자를 입력하세요 1,2,3 스캐너 -> 1번 입력시 배열1, 배열2, 배열3에 있는 지 확인
      - 25 출력되야한다.
     
     숫자3개 담을 배열을 각각 2개 만들기
     하나는 원본, 또 하나는 입력받은거 담을 용도
     스트라이크와 볼 갯수 저장할 변수 각각 만들기
 */
      //6개 랜덤함수로 6개 숫자 생성
      //숫자가 겹치지 않으려면..? 출력된 번호와 랜덤에 나온값이 같다면 다시 랜덤으로 올라가도록 처리
      public static void main(String[] args){
           Random r = new Random();
            int[] temp = new int[6];
            int i = 0;
            while( i< temp. length){
                 temp[ i] = r.nextInt(50)+1;
                 if( temp[ i] == temp[ i-1]){                  
                }
                System. out.print( temp[ i] + " ");
                 i++;
           }
           
     }
}

package oop15;

public class Employee {

      private int no; //사원번호
      private String name; //직원명
     
      public Employee (){
           System. out.println( "Employee() 실행" );
     }
     
      public Employee( int no, String name){
            this. no = no;
            this. name = name;
           System. out.println( "Employee(int, String) 실행" );
     }
}


package oop15;

public class Salesman extends Employee {

      private int record;   //영업실적
      //목표 부모 클래스의 변수에 접근하고싶다. 벗 private 더까다로움 어떻게 접근?
      //부모 클래스에 잘하면 변수를 전달 받을만한 메소드가 있을법 하다.
      public Salesman (){
            super(); //모든생성자에 기본생성자가 존재함
     }
     
      //private 해놨기 때문에 안보이는것 뿐이지 실제론 상속 받았기 때문에 존재한다.
      //이럴경우 부모의 있는 생성자를 이용해서 접근
      public Salesman( int no, String name, int record){
            //규칙 부모가 먼저 생성되었기 때문에 부모 다음 자식 요소 선언
            super( no, name);
            this. record = record;
     }
     
     
}


package oop15;

public class SuperDemo {
      public static void main (String[] args ){
           Salesman s1 = new Salesman(); //생성자 메소드 실행됨
           Salesman s2 = new Salesman(1, "길동" ,100000);
     }
}



package formatter;
import java.text.SimpleDateFormat;
import java.text.DecimalFormat;
import java.util.Date;

public class NumberFormatDemo {

      public static void main(String[] args){
            int money = 100000000;
           DecimalFormat df = new DecimalFormat( "##,###");
           String str = df.format( money);
           System. out.println( str);
           
            double pi = 3.141592;
           DecimalFormat df2 = new DecimalFormat( "#.####");
           System. out.println( df2.format( pi));
           
            double rate = 0.0300;      
           DecimalFormat df3 = new DecimalFormat( "0.0000");
           System. out.println( df2.format( rate));
           
           Date now = new Date(); //현재 날짜/시간정보를 가진 객체 생성       
           System. out.println( now);
           
            //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM- dd");
            //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM- dd EEEE");
            //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM- dd EEEE a");
            //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM- dd EEEE a hh:mm:ss");
           SimpleDateFormat sdf = new SimpleDateFormat( "yyyy년 MM월dd일 EEEE a hh시:mm분:ss초"); //패턴 문자외엔 그대로 찍힌다.
           String temp = sdf.format( now);
           System. out.println( temp);
           
            //결과화면__________________________
//         100,000,000
//         3.1416
//         0.03
//          Thu Apr 16 17:47:06 KST 2015
//         2015년 04월16일 목요일 오후 05시:47분:06초

           
     }
     
}



1. 클래스를 정의하세요
- 상품번호(no), 상품명(name), 가격(price)을 변수로 가지는 클래스(Item 클래스)를 정의하세요.
- 기본 생성자를 정의하세요
- 상품번호, 상품명, 가격을 전달받아서 생성된 객체의 변수를 초기화하는 생성자를 정ㅇ의하세요.
- 상품정보(상품번호, 상품명, 가격)를 화면에 표시하는 display() 메소드를 정의하세요.
package goods;

public class Item {
//   1. 클래스를 정의하세요
//   - 상품번호(no), 상품명(name), 가격(price)을 변수로 가지는 클래스(Item 클래스)를 정의하세요.
//   - 기본 생성자를 정의하세요
//   - 상품번호, 상품명, 가격을 전달받아서 생성된 객체의 변수를 초기화하는 생성자를 정의하세요.
//   - 상품정보(상품번호, 상품명, 가격)를 화면에 표시하는 display() 메소드를 정의하세요.
      int no;
     String name;
      int price;
     
      public Item(){}
      public Item( int no, String nameint price){
            this. no = no;
            this. name = name;
            this. price = price;        
     }
     
      public void disPlay(){
           System. out.println( "번호 : " no "\t이름 : " name "\t가격 : " price );
     }
}


package goods;

public class ItemMain {
      public static void main(String[] args){
           Item i = new Item(1, "아이유 시디" , 54000);
            i.disPlay();
     }
}



2. ItemDemo를 정의하세요.
- 상품번호, 상품명, 가격을 키보드로 입력받으세요.
- 위에서 정의한 Item객체를 생성해서 입력받은 값을 담으세요, 값을 담을 때는 생성자를 활용하세요
- 생성된 객체의 display()를실행시켜서 입력된 값을 화면에 표시하세요.
package goods;

import java.util.Scanner;

public class ItemDemo {
      public static void main(String[] args){
           Scanner s = new Scanner(System. in);
           System. out.print( "상품번호:" );
            int num = s.nextInt();
           System. out.print( "상품명:" );
           String name = s.next();
           System. out.print( "가격:" );
            int price = s.nextInt();
           Item i = new Item( num, name, price);
            i.disPlay();
            /*결과화면____________________
            * 상품번호:1
                상품명:CD
                가격:54000 
                번호 : 1   이름 : CD  가격 : 54000
            */
     }
}
3. order.txt를 작성하세요.
- 상품번호, 상품명, 가격순으로 주문정보를 입력하세요.
  입력 예)     123,iphone,600000
             134, ipad,800000
          156,galaxy,79000
- Scanner를 사용해서 order.txt 파일을 읽어옵니다.
- 주문상품정보를 저장하기 위해 Item을 여러개 담을 수 있는 배열을 정의하시고, 파일에서 얻어온 값을 배열에 저장하세요.
- 배열에 저장된 정보를 아래와 같이 표시하세요

========================== 주문내역 ===========================
상품번호     상품명     상품가격
123          iphone     600,000원
134          ipad     800,000원
156          galaxy     790,000원
===============================================================


txt/order.txt 파일 생성
123,iphone,600000
134,ipad,800000
156,galaxy,79000



package goods;

import java.util.Scanner;
import java.io.File;
public class Order {
//   order.txt를 작성하세요.
//   - 상품번호, 상품명, 가격순으로 주문정보를 입력하세요.
//     123, iphone,600000
//     134, ipad,800000
//     156,galaxy,79000
//   - Scanner를 사용해서 order.txt 파일을 읽어옵니다.
//   - 주문상품정보를 저장하기 위해 Item을 여러개 담을 수 있는 배열을  정의하시고, 파일에서 얻어온 값을 배열에 저장하세요.
//   - 배열에 저장된 정보를 아래와 같이 표시하세요
//   ========================== 주문내역 ===========================
//   상품번호     상품명     상품가격
//   123    iphone     600,000원
//   134    ipad       800,000원
//   156    galaxy     790,000원
//     ===============================================================
      public static void main(String[] args) throws Exception{
           Scanner s = new Scanner( new File( "src/txt/order.txt" ));
           String[] text = new String[3];
           Item item = new Item();
           
           System. out.println( "================== 주문내역 ===================");          
            for( int i=0; i<3; i++){
                 text[ i] = s.nextLine();
                String[] arr = text[ i].split( ",");
                
                 for( int j=0; j< arr. lengthj++){
                      item = new Item(Integer.parseInt( arr[0]), arr[1],Integer. parseInt(arr [2]));                     
                }
                 item.disPlay();
           }
          System. out.println( "=============================================" );
     }
//결과화면________________________________________
//   ================== 주문내역 ===================
//   번호 : 123 이름 : iphone   가격 : 600000원
//   번호 : 134 이름 : ipad     가격 : 800000원
//   번호 : 156 이름 : galaxy   가격 : 79000원
//   =============================================

}


package goods;
import java.util.Random;
public class NumberGenerator {
      private int max;
      private int[] numbers;
     
      public NumberGenerator( int maxint size) {
            this. max = max;
            this. numbers = new int[ size];
     }
     
      public void generate() {
           Random ran = new Random();
            int index = 0;
            while( true) {
                 int num = ran.nextInt( max) + 1;
                 boolean exist = checkExist( num);

                 if (! exist) {
                      numbers[ index] = num;
                      index++;
                }
                 if ( index == numbers. length) {
                      break;
                }
           }

     }
      public int[] getNumbers() {
            return numbers;
     }
      private boolean checkExist( int num) {
            boolean exist = false;
            for ( int i=0; i< numbers. lengthi++) {
                 if ( num == numbers[ i]) {
                      exist = true;
                }
           }
            return exist;
     }
}


package goods;
import java.util.Random;
public class NumberGenerator {
      private int max;
      private int[] numbers;
     
      public NumberGenerator( int maxint size) {
            this. max = max;
            this. numbers = new int[ size];
     }
     
      public void generate() {
           Random ran = new Random();
            int index = 0;
            while( true) {
                 int num = ran.nextInt( max) + 1;
                 boolean exist = checkExist( num);

                 if (! exist) {
                      numbers[ index] = num;
                      index++;
                }
                 if ( index == numbers. length) {
                      break;
                }
           }

     }
      public int[] getNumbers() {
            return numbers;
     }
      private boolean checkExist( int num) {
            boolean exist = false;
            for ( int i=0; i< numbers. lengthi++) {
                 if ( num == numbers[ i]) {
                      exist = true;
                }
           }
            return exist;
     }
}


package goods;

import java.util.Arrays;
public class Lotto {
      public static void main(String[] args){
            /**
             난수를 만들어서 로또 번호 뽑기(겹치지 않게)
             로또번호 6개 while로
        **/
           NumberGenerator generator = new NumberGenerator(45,  6);
            generator.generate();
            int[] lotto = generator.getNumbers();
           System. out.println(Arrays. toString( lotto));
     }

}

베이스볼 야구게임
package goods;
import java.util.Scanner;
import java.util.Arrays;
public class BaseBall {
      public static void main(String[] args){
            /*NumberGenerator generator = new NumberGenerator(9, 3);
           generator.generate();
            int[] numbers = generator.getNumbers();*/
            int[] numbers = {1,6,7};
           
           Scanner sc = new Scanner(System. in);
           System. out.print( "숫자를 입력해:" );
           String text = sc.next();
           String[] arr = text.split( ",");
           
            int[] inputNumbers = {Integer. parseInt( arr[0])
                                           , Integer.parseInt( arr[1])
                                           , Integer.parseInt( arr[2])};
           
            int strikeCount = 0;
            int ballCount = 0;
           
            for ( int i=0; i<3; i++) {
                 int inputNumber = inputNumbers[ i];
                 for ( int j=0; j<3; j++) {
                      int number = numbers[ j];
                      if ( number == inputNumber) {
                            if ( i == j) {
                                 strikeCount++;
                           } else {
                                 ballCount++;
                           }
                     }
                }
           }
           System. out.println( "숨겨진 숫자: " + Arrays.toString( numbers));
           System. out.println( "입력된 숫자: " + Arrays.toString( inputNumbers));
           System. out.println( strikeCount+ "S" + ballCount+ "B");
     }
}


반응형