2월, 2023의 게시물 표시

Socket 으로 채팅 구현

이미지
  다대다 채팅 기능 구현중. 완성하면 업데이트 예정 업데이트 : 멀티 채팅 구현 :  https://moluuuuuuuu.blogspot.com/2023/03/blog-post.html import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws Exception { ServerSocket ss; Socket s; DataInputStream in; DataOutputStream out; ss = new ServerSocket(2400); s = ss.accept(); new Sender(s).start(); new Receiver(s).start(); } } class Sender extends Thread { Socket s; DataOutputStream out; BufferedReader in; Sender(Socket sk) { s = sk; try { out = new DataOutputStream(s.getOutputStream()); } catch (Exception e) {} in = new BufferedReader(new InputStreamReader(System.in)); } @Override public void run() { while (true) try { out.writeUTF(in.readLine()); } catch (Exception e) {} } } class Receiver extends Thread { Socket s; DataInputStream in

도메인 입력으로 html 파일 저장

이미지

세미 프로젝트 연습 작업일지 2, 3일차

이미지
2023-02-27 2일차 회원가입 페이지에서 유저 정보 입력 받기 기능 추가 유효성 확인 어느정도 추가 2023-02-28 3일차 프로젝트 완성 기한은 다음주 수요일 (3월8일) 까지. 연습용으로 시작한 이 프로젝트를 제출용으로 완성할 예정. DAO 틀 작성. view에서 사용할 함수를 위한  PageUtils 클라스와 마찬가지로, model에서 사용할 함수를 모아둘 ServiceUtils 클라스 작성. model들과 view들의 규칙을 정의한 ModelRules와 ViewRules 인터페이스 추가. FileReader를 이용한 아이디 중복 확인 기능 추가  -> 첫번째 view-controller-model-database 풀 사이클 완성. 조우한 문제점: 중복 확인 기능이 안됨: 원인:  /database/users.txt 상대경로가 왜인지 작동이 안됨. catch문에 e.printStackTrace()를 안 써놓아서 오류 찾는데 오래걸림. 해결: 절대경로로 변경. String ap = new File("").getAbsolutePath(); file = new File(ap + fileName); 알 수 없는 sysout이 계속 출력됨: 원인: controller의 switch문 break 안 걸은 항목이 있었음. 해결: break; 점점 스케일이 커져서 생각보다 쉽지 않다.

Thread.currentThread().getName()

class Blog { public static void main(String args[]) { Method m = new Method(); (new MyThread(m)).start(); (new MyThread(m)).start(); } } class MyThread extends Thread { Method m; MyThread(Method m) { this.m = m; } @Override public void run() { for (int i = 0; i < 10; i++) m.method(); } } class Method { synchronized void method() { System.out.println(Thread.currentThread().getName() + " : " + "something"); } } class Blog { public static void main(String args[]) { Runnable r = new MyRunnable(); new Thread(r).start(); new Thread(r).start(); } } class MyRunnable implements Runnable { Method m = new Method(); @Override public void run() { for (int i = 0; i < 10; i++) m.method(); } } class Method { synchronized void method() { System.out.println(Thread.currentThread().getName() + " : " + "something"); } }

Java InetAddress.getHostName()/getHostAddress

import java.net.InetAddress; import java.util.Scanner; class Blog { public static void main(String[] args) throws Exception { new Byul(); } } class Byul { Scanner sc; Byul() { sc = new Scanner(System.in); while (true) { System.out.println("Host 이름을 입력하세요."); try { InetAddress ia = InetAddress.getByName(sc.next()); System.out.println("Computer NAME: " + ia.getHostName()); System.out.println("Computer IP: " + ia.getHostAddress()); } catch (Exception e) { System.out.println(e.getMessage()); } } } }

세미 프로젝트 연습 작업일지 1일차

이미지
 2023-02-26 1일차 세미 프로젝트 연습 겸 쿵스보이 블로그를 보고 프로젝트 종목 중 첫번째인 CLI 게시판을 만들어보기로 했다. 인증 기능과 게시판 기능은 필수로 만들것이고, 여유되면 여러 기능을 추가하고 게시판이 아닌 커뮤니티 사이트로 만들 예정. 기능: 인증, 유저 : 회원가입, 로그인, 마이페이지 커뮤니티 : 게시판 열람, 댓글 작성, 게시글 삭제, 댓글 삭제 여유 되면 추가 할 기능: 회원탈퇴, 쪽지, 방명록, 회원밴, 채팅방  공부해야 할 기술: FileReader/Writer: 모든 데이터를 영구보관 하기 위해 필요 Socket: 채팅, 실시간 쪽지, 댓글, 게시판 확인 하기 위해 필요 Thread: 특히 실시간 변화 조회하기 위해서 복잡하게 쓰일거 같음 패키지 부터 대충 만들어 놓고 틀 프로토타입 만들기 시작. MVC 패턴으로 틀을 잡았고, 전에 하던 방식과 다르게 view도 객체화해서 코딩 해 볼 예정. 주 데이터 흐름: 유저 입력 > 컨트롤러 > 뷰 > 모델 > DAO 한일 목록: PageUtils라는 클라스에 view에서 공통적으로 사용할 함수들 작성. 초기 FrontPage 작성. 회원가입 페이지로 이동, 종료 기능 구현. 학원, 집 왔다갔다 작업하기 위해 깃에 올려뒀다. https://github.com/byulsdeep/cliForum

해쉬맵 예제 : 학생 정보 검색 프로그램 해쉬맵으로 다시 작성하라

이미지
  //학생마다 Student 객체를 생성하고 4명의 학생 정보를 HashMap<String, Student> 컬렉션에 저장한 후에, //HashMap<String, 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.HashMap; import java.util.Map; import java.util.Scanner; import java.util.StringTokenizer; public class Blog { public static void main(String[] args) { new Byul(); } } class Byul { private stat

리스트 예제 : 학생 정보 검색 프로그램

이미지
  import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.StringTokenizer; public class Blog { public static void main(String[] args) { new Byul(); } } class Student { String name; String program; String ID; double avgGrade; Student(String name, String program, String ID, double avgGrade) { this.name = name; this.program = program; this.ID = ID; this.avgGrade = avgGrade; } @Override public String toString() { StringBuffer sb = new StringBuffer(); sb.append("이름: " + name); sb.append("\n학과: " + program); sb.append("\n학번: " + ID); sb.append("\n학점평균: " + avgGrade); sb.append("\n----------------------------------"); return sb.toString(); } } class Byul { Scanner sc; List<Student> list; StringTokenizer st; Byul() { sc = new Scanner(System.in); list = new ArrayList<>(); main(); sc.close(); } void main() { String input; String[] tokens =

귀찮은 스캐너 찌꺼기 청소법

import java.util.Scanner; public class Check { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { // 1. next 후 nextLine 사용 시 print("[ 문제점 ]"); print("1번 입력"); print(next()); print("2번 입력"); print(nextLine()); /* ** 문제 **: nextLine 입력도 안했는데 프로그램 종료됨 ** 원인 **: 1번 입력 next() 함수는 사용자가 입력 할 때 누르는 Enter * 키로 발생하는 newline (\n) 문자를 받을 수 없어서 스캐너에 남아 있게됨 * 2번 입력 nextLine() 함수가 실행되는 즉시 사용자가 입력하기도 전에 * 남아 있던 newLine이 nextLine() 함수에게 소모되고 함수도 종료됨 */ /* 해결법 1 */ print("[ 해결법1 ]"); print("1번 입력"); print(next()); if(sc.hasNextLine()) { nextLine(); } print("2번 입력"); print(nextLine()); /* * 1번 입력 받은 후 스캐너에 남아 있는 newline을 * nextLine() 함수를 추가하는 걸로 소모한다 * */ /* 해결법2 */ print("[ 해결법2 ]"); String[] tokens = nextLine().split(" "); for (String s : tokens) { System.out.print(s + " "); } /* * nextLine

해쉬맵 예제 : 도시 이름으로 도시 정보 검색하는 프로그램

import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.StringTokenizer; //2. 다음을 프로그래밍 하시오. //도시 이름, 위도, 경도 정보를 가진 Location 클래스를 작성하고, //도시 이름을 '키'로 하는 HashMap<String, Location> 컬렉션을 만들고, //사용자로부터 입력 받아 4개의 도시를 저장하라. //그리고 도시 이름으로 검색하는 프로그램을 작성하라. public class Blog { public static void main(String[] args) { new Byul(); } } class Location { String city; int w, g; Location(String c, int w, int g) { this.city = c; this.w = w; this.g = g; } @Override public String toString() { return city + " " + w + " " + g; } } class Byul { Scanner sc; Map<String, Location> map; Byul() { sc = new Scanner(System.in); map = new HashMap<>(); main(); sc.close(); } void main() { System.out.println("도시, 경도, 위도를 입력하세요."); String s; String[] tokens = new String[3]; StringTokenizer st; while (map.size() < 4) { System.out.print(">> "); st = new String

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

이미지
  import java.util.HashMap; import java.util.Map; import java.util.Scanner; //나라 이름과 인구를 입력하세요.(예: Korea 5000) //나라 이름, 인구 >> Korea 5000 //나라 이름, 인구 >> USA 1000000 //나라 이름, 인구 >> Swiss 2000 //나라 이름, 인구 >> France 3000 //나라 이름, 인구 >> 그만 // //인구 검색 >> France //France의 인구는 3000 //인구 검색 >> 스위스 //스위스 나라는 없습니다. //인구 검색 >> 그만 public class Blog { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); Scanner sc = new Scanner(System.in); String s; int i; System.out.println("나라 이름과 인구를 입력하세요.(예: Korea 5000)"); while (true) { s = sc.next(); if (s.contains("그만")) { break; } try { i = sc.nextInt(); } catch (Exception e) { System.out.println("숫자가 아닙니다"); sc.nextLine(); // 스캐너에 남아있는 찌꺼기 청소 // 안하면 다음 반복 next() 함수에 영향 continue; } System.out.println("나라 이름, 인구 >> " + s + " " + i); map.put(

해쉬 함수

이미지
해쉬 함수 모음: https://emn178.github.io/online-tools/index.html 해쉬는 복호화가 안된다. -> 단방향성

Set 예제 : 아래와 같이 출력되도록 하시오.

 5. 아래와 같이 출력되도록 하시오. HashSet<Person> hSet = new HashSet<Person>(); hSet.add(new Person("LEE", 10)); hSet.add(new Person("LEE", 10)); hSet.add(new Person("PARK", 35)); hSet.add(new Person("PARK", 35)); System.onut.println("저장된 데이터 수: " + hSet.size()); System.out.println(hSet); /* ============ 저장된 데이터 수: 2 [LEE(10세), PARK(35세)] */ import java.util.HashSet; public class Blog { public static void main(String[] args) { HashSet<Person> hSet = new HashSet<Person>(); hSet.add(new Person("LEE", 10)); hSet.add(new Person("LEE", 10)); hSet.add(new Person("PARK", 35)); hSet.add(new Person("PARK", 35)); System.out.println("저장된 데이터 수: " + hSet.size()); System.out.println(hSet); } } class Person { String name; int age; Person(String n, int a) { name = n; age = a; } @Override public int hashCode() { return age % 2; } @Override public boolean

입력 받은 학점으로 평균 출력하는 프로그램

import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Blog { public static void main(String[] args) { // 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 // A: 4.0 // B: 3.0 // C: 2.0 // D:1.0 // F:0.0 Scanner sc = new Scanner(System.in); List<Double> list = new ArrayList<>(); while (list.size() < 6) { switch (sc.next()) { case "A": list.add(4.0); break; case "B": list.add(3.0); break; case "C": list.add(2.0); break; case "D": list.add(1.0); break; case "F": list.add(0.0); break; default: System.out.println("잘못된 입력"); continue; } } double sum = 0.0; for (doubl

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

import java.util.LinkedList; import java.util.List; import java.util.Scanner; public class Blog { public static void main(String[] args) { // 2. Scanner 클래스로 -1이 입력될 때까지 // 양의 정수를 입력 받아 저장(List객체)하고 검색하여 // 가장 큰 수를 출력하는 프로그램을 작성하라. List<Integer> list = new LinkedList<>(); Scanner sc = new Scanner(System.in); int i = 0; while (true) { System.out.println("숫자 입력"); try { i = sc.nextInt(); } catch (Exception e) { System.out.println("숫자만 입력"); sc.next(); // 숫자가 아닌 문자를 입력해서 catch 문으로 진입한 경우, // next 함수로 그 문자를 소모 해줘야 다음 nextInt에 영향이 안 간다. continue; } if (i != -1) { if (i <= 0) { System.out.println("양의 정수만 입력"); continue; } list.add(i); } else { break; } } int s = 0; for (int j : list) { if (j > s) { s = j; } } System.out.println(s); } }

네트워크 장비

네트워크 인터페이스 카드     컴퓨터와 컴퓨터, 또는 컴퓨터와 네트워크를 연결하는 장치     정보 전송 시 정보가 케이블을 통해 전송될 수 있도록 정보 형태를 변경     이더넷 카드, LAN 카드, 혹은 네트워크 어댑터라고도 함 허브     가까운 거리의 컴퓨터들을 연결하는 장치     각 회선을 통합적으로 관리     신호 증폭 기능을 하는 리피터의 역할도 포함     더미 허브          모든 데이터를 단순히 연결하는 기능만을 제공          LAN이 보유한 대역폭을 컴퓨터 수만큼 나누어 제공          네트워크에 연결된 각 노드를 물리적인 성형 구조로 연결     스위칭 허브          데이터의 유무 및 흐름을 제어하여 각각의 노드가 허브의 최대 대역폭을 사용할 수 있는 지능형 허브           리피터     신호가 선로의 특성 및 외부 충격 등의 요인으로 인해 형태가 왜곡되거나 약해질 경우 원래의 형태로 재생하여 다시 전송하는 역할을 수행한다     물리 계층에서 동작     근접한 네트워크 사이에 신호를 전송하는 역할     전송 거리의 연장 도는 배선의 자유도를 높이기 위한 용도로 사용 브리지     LAN과 LAN을 연결하거나 LAN 안에서의 컴퓨터 그룹(세그먼트)을 연결     데이터 링크 계층 중 MAC(Media Access Control) 계층에서 사용     MAC 브리지라고도 함     트래픽 병목 현상 줄일 수 있음     네트워크를 분산적으로 구성할 수 있어 보안성을 높일 수 있음     서브넷 구성시 전송 가능한 회선 수는 n(n-1)/2개 스위치     LAN과 LAN을 연결하여 훨씬 더 큰 LAN을 만드는 장치     하드웨어를 기반으로 처리; 전송 속도가 빠름     포트마다 각기 다른 전송 속도를 지원하도록 제어 가능     수십에서 수백 개의 포트를 제공     데이터 링크 계층에서 사용됨 라우터     LAN과 LAN의 연결 기능에 데이터 전송의 최적 경로를 선택 할 수 있는 기능이 추가

OSI 참조 모델

상위 7 응용 계층     사용자가 OSI 환경에 접근할 수 있도록 서비스 제공     정보 교환, 전자 사서함, 파일 전송, 가상 터미널     단위 : 메시지 6 표현 계층     코드 변환, 데이터 암호화, 데이터 압축, 구문 검색, 정보 형식 변환, 문맥 관리     단위 : 메시지 5 세션 계층     대화 구성 및 동기 제어, 데이터 교환 관리     단위 : 메시지 4 전송 계층     하위 3계층과 상위 3계층의 인터페이스     종단 시스템 간의 전송 연결 설정, 데이터 전송, 연결 해제     주소 설정, 다중화, 오류 제어, 흐름 제어     단위 : 세그먼트     표준 : TCP, UDP     장비 : 게이트웨이 하위 3 네트워크 계층      네트워크 연결을 설정, 유지, 해제     패킷 전달     경로 설정, 데이터 교환 및 중계, 트래픽 제어, 패킷 정보 전송     단위 : 패킷     표준 : X.25, IP     장비 : 라우터 2 데이터 링크 계층     흐름 제어, 프레임 동기화, 오류 제어, 순서 제어     데이터 링크 접속 설정 및 해제     단위 : 프레임     표준 : HDLC, LAPB, LLC, MAC, LAPD, PPP, ADCCP     장비 : 랜카드, 브리지, 스위치 1 물리 계층     물리적 전송     단위 : 비트     표준 : RS-232C, X.21     장비 : 리피터, 허브

IP 주소

A Class (0~127)     국가나 대형 통신망에 사용 B Class (128~191)     중대형 통신망에 사용 C Class (192~223)     소규모 통신망에 사용 D Class (224~239)     멀티캐스트용으로 사용 E Class      실험적 주소이며 공용되지 않음

Windows, UNIX / LINUX 명령어

 Windows 명령어 DIR               파일 목록 표시 COPY             TYPE              파일 내용 표시 REN              파일 이름 변경 DEL MD               디렉토리 생성 CD CLS               화면 내용 지우기 ATTRIB          파일 속셩 변경 FIND             파일 찾기 CHKDSK       디스크 상태 점검 FORMAT      디스크 초기화 MOVE          파일 이동 UNIX / LINUX 명령어 cat               파일 내용 표시 chdir            chmod         파일의 보호 모드를 설정하여 파일의 사용 허가를 지정 chown          소유자 변경 cp                파일 복사 exec            새로운 프로세스 수행 find              파일 찾기 fork              새로운 프로세스 생성(하위 프로세스 호출, 프로세스 복제) fsck               파일 시스템 검사 보수 getpid          프로세스 아이디 얻기 getppid        부모 프로세스 아이디 얻기 ls                 현 디렉터리 내 파일 목록 확인 mount/unmount 파일 시스템 마운팅/마운팅 해제 rm                 파일 삭제 uname          시스템 정보 표시 wait              fork 후 exec에 의해 실행되는 프로세스의 상위 프로세스가 하위 프로세스 종료 등의 event를 대기 kill                프로세스를 제거한다 &                   백그라운드 처리를 위해 명령의 끝에 입력 ps                현재 작업중인 프로세스의 상태 정보를 확인 mkfs            파일 시스템 생성 finger           사용자 정보 표시

StringTokenizer countTokens() 함수

이미지
ㅇㅇ

배열, 리스트, 해쉬셋 연습 : 1 부터 45 까지 중복하지 않는 숫자 6개 생성하는 프로그램

이미지
  import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Scanner; import java.util.Set; public class Blog { public static void main(String[] args) { new Byul(); } } class Byul { Scanner sc; StringBuffer sb; boolean run; boolean isInputMismatch; int[] arr; List<Integer> list; Set<Integer> set; Byul() { sc = new Scanner(System.in); sb = new StringBuffer(); run = true; isInputMismatch = false; main(); sc.close(); } void main() { System.out.println("1 부터 45 까지 중복하지 않는 숫자 6개 생성하는 프로그램\n"); while (run) { System.out.println( "1. 배열 사용, 중복 확인 방식\n" + "2. 배열 사용, 수동 셔플방식\n" + "3. 리스트 사용, 중복 확인 방식\n" + "4. 리스트 사용, 수동 셔플 방식\n" + "5. 리스트 사용, 컬렉션즈 셔플 방식\n" + "6. 해쉬셋 사용 방식\n" + "7. 전체 실행\n" + "0. 종료" ); switch (s

StringTokenizer 예제 : 입력한 문장의 단어수 세기

이미지
import java.util.Scanner; import java.util.StringTokenizer; public class Check { public static void main(String[] args) { // 世界一幸せ // 僕たちは幸せになるためこの旅を行くんだ。 // ほら、笑顔がとても似合う。 Scanner sc = new Scanner(System.in); while (true) { System.out.println("문자를 입력 해 주세요: "); String input = sc.nextLine(); int count = 0; StringTokenizer st = new StringTokenizer(input); while (st.hasMoreTokens()) { System.out.print(st.nextToken() + '\n'); count++; } System.out.println("count " + count + "개의 단어 입니다."); System.out.println("다시 하시겠습니까(y/n)"); input = sc.nextLine(); //next 사용하면 이때 발생한 enter가 다시하기 문자 입력에 영향을 끼침 if (!input.equals("y")) { break; } } sc.close(); } }

substring 예제: 문자열을 입력 받아 한 글자씩 회전시켜 모두 출력하는 프로그램을 작성하라

이미지
 문자열을 입력 받아 한 글자씩 회전시켜 모두 출력하는 프로그램을 작성하라. 문자열을 입력하세요. 빈칸이나 있어도 되고 영어 한글 모두 됩니다. import java.util.Scanner; public class Blog { public static void main(String[] args) { String input = (new Scanner(System.in)).nextLine(); for (int i = 0; i < input.length(); i++) { System.out.println(input = input.substring(1, input.length()) + input.substring(0, 1)); } } }

상속예제

이미지
 다음 조건을 만족하도록 클래스 Person과 Student를 작성하시오. - 클래스 Person * 필드 : 이름, 나이, 주소 선언 - 클래스 Student * 필드 : 학교명, 학과, 학번, 8개 평균평점을 저장할 배열로 선언 * 생성자 : 학교명, 학과, 학번 지정 * 메소드 average() : 8개 학기 평균평점의 평균을 반환 - 클래스 Person과 Student  - 프로그램 테스트 프로그램의 결과 : 8개 학기의 평균평점은 표준입력으로 받도록한다. 이름 : 김다정 나이 : 20 주소 : 서울시 관악구 학교 : 동양서울대학교 학과 : 전산정보학과 학번 : 20132222 ---------------------------------------- 8학기 학점을 순서대로 입력하세요 1학기 학점  → 3.37 2학기 학점  → 3.89 3학기 학점  → 4.35 4학기 학점  → 3.76 5학기 학점  → 3.89 6학기 학점  → 4.26 7학기 학점  → 4.89 8학기 학점  → 3.89 ---------------------------------------- 8학기 총 평균 평점은 4.0375점입니다. import java.util.Scanner; public class Blog { public static void main(String[] args) { Person s = new Student("김다정", "20", "서울시 관악구", "동양서울대학교", "전산정보학과", "20132222"); System.out.println("이름 : " + s.name); System.out.println("나이 : " + s.age); System.out.println("주소 : " + s.address); System.out.println("학교 : "

장바구니 담기, 구매 기능 구현 예제

이미지
다음은 물건을 구입하는 사람을 정의한 Buyer클래스이다.  이 클래스는 멤버변수로 돈(money)과 장바구니(cart)를 가지고 있다.  제품을 구입하는 기능의 buy메서드와 장바구니에 구입한 물건을 추가하는 add메서드,  구입한 물건의 목록과 사용금액, 그리고 남은 금액을 출력하는 summary메서드를 완성하시오. 1. : buy 메서드명 기 능 지정된 물건을 구입한다 가진 돈 에서 물건의 가격을 빼고 : . (돈) , 장바구니 에 담는다 (cart) . 만일 가진 돈이 물건의 가격보다 적다면 바로 종료한다. 반환타입 없음 : 매개변수 구입할 물건 : Product p - 2. : add 메서드명 기 능 지정된 물건을 장바구니에 담는다 : . 만일 장바구니에 담을 공간이 없으면 장바구니의 크기를 배로 늘린 다음에 담는다 , 반환타입 없음 : 매개변수 구입할 물건 : Product p - 3. : summary 메서드명 기 능 구입한 물건의 목록과 사용금액 남은 금액을 출력한다 : , . 반환타입 없음 : 매개변수 없음 : [ ] 연습문제 /ch7/Exercise7_19.java class Exercise7_19 { public static void main(String args[]) {    Buyer b = new Buyer();     b.buy(new Tv());     b.buy(new Computer());     b.buy(new Tv());     b.buy(new Audio());     b.buy(new Computer());     b.buy(new Computer());     b.buy(new Computer());     b.summary();     }     } class Buyer { int money = 1000; Product[] cart = new Product[3]; // 구입한 제품을 저장하기 위한 배열 int i = 0; // Product cart index 배열 에 사용될 void buy(Product p) {

상속, 다향성 예제

이미지
  public class Blog { public static void main(String[] args) { Friend[] frns = new Friend[10]; int cnt = 0; frns[cnt++] = new UnivFriend("LEE", "Computer", "010-333-555"); frns[cnt++] = new UnivFriend("SEO", "Electronics", "010-222-444"); frns[cnt++] = new CompFriend("YOON", "R&D 1", "02-123-999"); frns[cnt++] = new CompFriend("PARK", "R&D 2", "02-321-777"); // 모든 동창 및 동료의 정보 전체 출력 for (int i = 0; i < cnt; i++) { frns[i].showInfo(); // 오버라이딩 한 메소드가 호출된다. System.out.println(); } } } class Friend { String name, phone; Friend(String name, String phone) { this.name = name; this.phone = phone; } void showInfo() { System.out.println("이름:\t" + name); System.out.println("전화번호:\t" + phone); } } class UnivFriend extends Friend { String major; UnivFriend(String name, String major, String phone) { su

과목 입력하면 점수 보여주는 프로그램

이미지
다음 코드와 같이 과목과 점수가 짝을 이루도록 2개의 배열을 작성하라. String course[] = {"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"}; int score[]  = {95, 88, 76, 62, 55}; 그리고 다음 예시와 같이 과목 이름을 입력받아 점수를 출력하는 프로그램을 작성하라. "그만"을 입력받으면 종료한다. (Java는 인덱스 0에 있으므로 score[0]을 출력) 과목 이름 >> Jaba 없는 과목입니다. 과목 이름 >> Java Java의 점수는 95 과목 이름 >> 안드로이드 안드로이드의 점수는 55 과목 이름 >> 그만 [Hint] 문자열을 비교하기 위해서는 String 클래스의 equals()메소드를 이용해야 한다. String name; if(course[i].equals(name)) {     int n = score[i];     ... } import java.util.Scanner; public class Blog { public static void main(String[] args) { new Byul(); } } class Byul { Scanner sc; String course[] = { "Java", "C++", "HTML5", "컴퓨터구조", "안드로이드" }; int score[] = { 95, 88, 76, 62, 55 }; Byul() { sc = new Scanner(System.in); main(); sc.close(); } void main() { while (true) { String name = sc.next(); int failCount = 0; if (!name.c

다형성 추가정리, instanceof

이미지
  public class Blog { public static void main(String[] args) { new Byul(); } } class Byul { Byul() { main(); } void main() { //1. 왜 부모 타입으로 선언하고 자식 타입으로 생성하는게 선호되는가? Animal cat = new Cat(); Cat cat2 = new Cat(); //답: 데이터 타입이 다르면 관리하기가 불편하다. // 예를 들어서, 한 배열에 담을 수가 없다. Animal cat3 = new Cat(); Animal dog = new Dog(); Animal[] animals = {cat3, dog}; //이런식으로 부모타입으로 선언하면 한 배열에 묶는 등, 관리가 편해진다. //2. 다형성 예시--------------------------------------------- Animal[] animals2 = { new Cat(), new Dog(), new MikeNeko(), new Shitzu(), new Animal() }; for (Animal animal : animals2) { animal.makeSound(); } System.out.println("---------------"); // 같은 함수, 같은 데이터 타입인데, 자식 클래스가 달라서 다양한 결과를 보여 줄 수 있다. //3. instanceOf--------------------------------------------- // 객체가 해당 객체 타입인지 확인 (상속 관계), // 에러 없이 캐스팅 가능한지 확인 (부모는 자식, 자식은 부모, 메모리에 올라갔는지) // instanceCheck 함수 // - 다형성의 원리를 설명한다. // - 받아오는 객체의 instance 상태에 따라 다

하? 라고 말하는 게임

이미지
  아직 카드 3장 밖에 없음 import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Blog { public static void main(String[] args) { new Byul(); } } class Byul { static final String[][] data = { { "はぁ", "憧れの人に出会って「はぁ」", "ゾンビから逃げ切って「はぁ」", "必殺技を出す前の「はぁ」", "バカなことを言われて「はぁ」", "電車に間に合って「はぁ」", "温泉に入って「はぁ」", "オペラ風に「はぁ」", "雪女が息を吐いて「はぁ」" }, { "あっ", "忘れ物をして「あっ」", "思い立って「あっ」", "石につまずいて「あっ」", "好きな人を見つけて「あっ」", "嫌いな人を見つけて「あっ」", "1円を見つけて「あっ」", "1000円を見つけて「あっ」", "察して「あっ」" }, { "あーーー", "おどろいて「あーーー」", "こまって「あーーー」", "歌の歌いだしの「あーーー」", "発声練習の「あーーー」", "やけくそで「あーーー」", "突撃の雄叫びで「あーーー」", "絶望して「あーーー」", "なにかを思い出して「あーーー」" } }; static List<Word> words; Scanner sc; Byul() { sc = new Scanner(System.in)

한별복권

이미지
  import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Set; public class Blog { public static void main(String[] args) { new Byultto(1053); } } class Byultto { int count; Date date; LocalDate ld; SimpleDateFormat sdf; Byultto(int count) { date = new Date(); ld = LocalDate.now(); this.count = count; main(); } void main() { System.out.println(makeTitle()); System.out.println( makeBody( makeRandom(true, 10), makeRandom(false, -1), makeRandom(), makeRandom(true, 9), makeRandom(1000, 99999), makeLotto() ) ); } String makeBody( String random10, String randomLong, String randomCaps, String random9, String randomFormat, List<Set<Integer>> lottos ) { StringBuilder sb = new StringBuilder(

상속, 다향성 예제

이미지
  public class Blog { public static void main(String[] args) { Employee r = new Regular("강한별", 30, "서울시", "일본취업 5기", 500); r.printInfo(); System.out.println("-------------------------"); Employee t = new Temporary("약한별", 60, "인천시", "폐지 줍기", 30); t.printInfo(); } } class Employee { private String name; private int age; private String address; private String department; private int salary; Employee(String name, int age, String address, String department) { this.name = name; this.age = age; this.address = address; this.department = department; } void printInfo() { System.out.println("이름:\t" + name); System.out.println("나이:\t" + age); System.out.println("주소:\t" + address); System.out.println("부서:\t" + department); } void setSalary(int salary) { this.salary = salary; } int getSalary() { return salary; } } class Regular extends Em

상위 클래스는 하위 클래스의 인스턴스를 생설 할 수 있지만 그 반대는 안되는 이유

public class Blog { public static void main(String[] args) { A a = new A(); // 단순 B b = new B(); // 객체 생성 A ab = new B(); // 상위 타입 변수에 하위 타입 객체 생성 B ba = new A(); // 하위 타입 변수에 상위 타입 객체 생성 (컴파일 에러 발생) } } class A { int a = 1; } class B extends A { int b = 2; } 한 줄 요약: 부모 클래스는 자식 클래스의 정의된 모든 속성과 행동을 보유하고 있지 않기 때문이다.  자식 클래스는 부모 클래스를 상속해서, 부모 클래스와 자신(자식) 클래스의 정보를 모두 보유하고 있으나, 부모 클래스는 자신(부모) 클래스의 정보만 가지고 있다. 코드를 보면, A 가 부모 (상위) 클래스이고, B 가 자식 (하위) 클래스이다.  B의 생성자는 호출될 때 부모의 생성자가 먼저 호출 되어서, A 와 B 의 정보가 모두 있다. A ab = new B();  이 코드의 실행 순서는, 1. A ab;  2. new A(); 3. new B(); 4. ab = new B(); 대충 이런식으로, 부모와 자식의 정보가 모두 있으니, 문제가 없다라는 느낌이다. 반대로,  B ba = new A(); 이 코드의 실행 순서는, 1. B ba; 2. new A(); 3. new B();   (부모는 자식에게 상속을 하지, 자식의 재산을 빼앗지는 않아서, 자식의 생성자를 호출 할 수 없다. ) 4. ba = new A();  이렇게 되면, 자식 타입 변수 ba 는 부모가 가지고 있지 않은 정보를 요구하지만, 부모는 제공을 할 수 없기에, 컴파일 에러가 난다. 해결하려면 자식 타입으로 다운 캐스팅하면 되는데,  B ba = (B) new A(); 이렇게 하면 부모가 가지고 있지 않던 정보는 0 또는 null로 대체되어서 자식 객체가 생성되는 듯 하다. 비슷한 예로 

계산기

이미지
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Blog { public static void main(String[] args) { new Main(); } } class Main { Scanner sc; Pattern pt; Matcher mt; Main() { System.out.println("계산기\n계산식을 입력\n현재 지원 기능: + - * / ! ^\n예시: 1 + 1 Enter\n종료하려면 \"종료\" 입력"); sc = new Scanner(System.in); main(); sc.close(); } void main() { String[] ab; double result = -1; String op = null; boolean isFactorial = false; String input = sc.nextLine().trim(); if(input.contains("종료")) System.exit(0); pt = Pattern.compile("[^\\.\\s0-9+\\-*/!^]"); mt = pt.matcher(input); if (mt.find()) { System.out.println("숫자와 연산부호만 입력"); main(); return; } pt = Pattern.compile("[+\\-*/!^]"); mt = pt.matcher(input); int c = 0; while (mt.find()) { c++; if (c > 1) { System.out.println("한번에 한 연산만"); main(); return;