일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 정보처리기사실기정리
- 국비IT
- 정보처리기사
- 자스코테
- 이안의평일코딩
- 자바스크립트 코딩테스트
- 스프링
- 국비코딩
- typescript
- Oracle
- react
- 리액트네이티브
- 정보처리기사요약
- 타입스크립트
- ReactNative
- 리액트
- VUE
- 정보처리기사실기요약
- 자바의정석
- 코딩테스트
- 자바스크립트
- 정보처리기사실기
- 정보처리기사정리
- 평일코딩
- javascript
- spring
- 오라클
- php
- Java의정석
- CSS
- Today
- Total
이안의 평일코딩
JAVA의 정석 30일차 - java.util, calendar, collection 본문
2020.07.24(금)
1. java.util : 프로그램에서 많이 사용하는 클래스의 집합
=> 반드시 import를 사용한다
Random() => 난수(임의수를 컴퓨터가 결정)
=> 정수 => nextInt() => 0~21억 4천 (int 범위)
nextInt(int n) ==> 오버로딩 => 지정된 범위 사이의 수가 나옴
n번은 제외
nextInt(100) => 0~99 => 0~100 nextInt(101)
============================== static이 아니다
인스턴스
static 컴파일과 동시에 저장됨 => Random.nextInt()
instance 저장이 아직 안된 상태 => 저장 new생성자 Random r = new Random()
=> r.nextInt()
instance(따로작동, 윈도우) / static은 동일하게 작동(같은 데이터 공유)
package com.sist.util;
import java.util.Random;
public class MainClass {
public void random() {
Random r = new Random();
int a = r.nextInt(101); // int a = (int)(Math.random()*101)
// 0~100 r.nextInt(100) 0~99
System.out.println(a);
}
public static void main(String[] args) {
MainClass m = new MainClass();// m=>random()
m.random();
MainClass m1 = new MainClass();// m1=>random()
m1.random();
//MainClass.random();
//사용자 정의 메소드는 자동 호출이 없다
}
}
StringTokenizer
===단어별로 분리
= hasMoreTokens() : 자른 갯수가 몇개
= nextToken()
String msg = "Red, Green, Blue, Black, Yellow";
=> StringTokenizer st = new StringTokenizer(msg, ",");
String color1 = st.nextToken();
String color2 = st.nextToken();
String color3 = st.nextToken();
String color4 = st.nextToken();
String color5 = st.nextToken();
StringTokenizer st = new StringTokenizer(msg, ",");
while(st.hasMoreTokens()) {
String color = st.nextToken();
}
StringTokenizer st = new StringTokenizer(msg); //구분문자 없으면 공백으로 자름
StringTokenizer st = new StringTokenizer(msg, " ");
package com.sist.util;
import java.util.StringTokenizer;
public class MainClass1 {
public static void main(String[] args) {
String msg = "Red,Blue,Green,Yellow,Black";
StringTokenizer st = new StringTokenizer(msg, ",");
// , 별로 => 단어를 추출한다
String color1=st.nextToken();
String color2=st.nextToken();
String color3=st.nextToken();
String color4=st.nextToken();
String color5=st.nextToken();
//String color6=st.nextToken(); // 단어갯수 5개인데 6개로 초과되서 오류
System.out.println(color1);
System.out.println(color2);
System.out.println(color3);
System.out.println(color4);
System.out.println(color5);
//System.out.println(color6);
st = new StringTokenizer(msg,",");
while(st.hasMoreTokens()) { //갖고있는 갯수만큼만
System.out.println(st.nextToken());
}
//Red Blue Green Yellow Black
}
}
package com.sist.util;
import java.util.StringTokenizer;
public class MainClass2 {
public static void main(String[] args) {
String[] data= {
"1|2|3|4|5",
"6|7|8",
"10|11",
"10|11|12|13|14|15",
"20|21|22|23|24|25|26|27"
};
for(int i=0; i<data.length; i++) {
StringTokenizer st = new StringTokenizer(data[i], "|");
System.out.println(data[i]);
System.out.println("===========");
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
System.out.println();
}
}
}
package com.sist.util;
import java.util.*;
public class MainClass3 {
public static void main(String[] args) {
Random r = new Random();
int[] resDay = new int[r.nextInt(10)+5]; //5~14
String day="";
for(int i=0; i<resDay.length; i++) {
resDay[i] = r.nextInt(31)+1;
day+=resDay[i]+"|";
}
day=day.substring(0, day.lastIndexOf("|")); //마지막 | 지움
System.out.println(day);
//22|9|29|21|26
//날짜별 분리
String[] resdays = day.split("\\|"); //정규식 들어가야함
/*
* 정규식
* ^ => 시작 문자 ^A => ^[가-힣] ^[A-Za-z] ^[0-9]
* [^가-힣] =>제외 []안에 들어가있으면 한글을 제외한 나머지
* 지니뮤직 => 3상승 => [^가-힣] ==> 3
* 1하강 => [^0-9] ==> 하강
* $ => 끝문자 A$
* . => 임의의 한글자 (모든 글자) ==> \\.
* | => 선택
* ? => 있으면 출력, 없으면 미출력
*/
for(String s:resdays) {
System.out.println(s);
}
//229292126
System.out.println("=====StringTokenizer=====");
StringTokenizer st = new StringTokenizer(day, "|"); //일반기호
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
//229292126
}
}
Date, Calendar
package com.sist.util;
import java.util.*;
import java.util.Calendar;
import java.util.Scanner;
// Calendar ==> 요일, 마지막 날짜
// 날짜 관련
public class MainClass4 {
public static void main(String[] args) {
// 클래스 생성
Calendar cal = Calendar.getInstance(); // 싱클턴 패턴 => 메모리를 한개만 생성
// 시스템의 실제 날짜를 읽어 온다
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH)+1);
System.out.println(cal.get(Calendar.DATE));
System.out.println(cal.get(Calendar.DAY_OF_WEEK));
int week = cal.get(Calendar.DAY_OF_WEEK)-1;
String[] strWeek = {"일","월","화","수","목","금","토"};
System.out.println(strWeek[week]+"요일");
System.out.println(cal.getActualMaximum(Calendar.DATE)); //마지막날짜
Scanner scan = new Scanner(System.in);
System.out.print("년도 입력>");
int year = scan.nextInt();
System.out.print("월 입력>");
int month = scan.nextInt();
//System.out.print("일 입력>");
//int day = scan.nextInt();
cal.set(Calendar.YEAR,year);
cal.set(Calendar.MONTH,month-1); //0이 1월
cal.set(Calendar.DATE,1);
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH)+1);
System.out.println(cal.get(Calendar.DATE));
System.out.println(cal.get(Calendar.DAY_OF_WEEK)-1);
week=cal.get(Calendar.DAY_OF_WEEK)-1;
System.out.println(strWeek[week]+"요일");
}
}
package com.sist.util;
import java.util.*;
public class MainClass5 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("년도 입력:");
int year = scan.nextInt();
System.out.println("월 입력:");
int month = scan.nextInt();
String[] strWeek={"일","월","화","수","목","금","토"};
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month-1);
cal.set(Calendar.DATE, 1);
// 요일 구하기
int week = cal.get(Calendar.DAY_OF_WEEK)-1;
int lastday = cal.getActualMaximum(Calendar.DATE);
// 출력
//System.out.println("요일:"+strWeek[week]);
//System.out.println("마지막날짜:"+lastday);
System.out.println(year+"년도"+month+"월");
for(int i=0; i<7; i++) {
System.out.print(strWeek[i]+"\t");
}
System.out.println();
for(int i=1; i<=lastday; i++) {
if(i==1) {
for(int j=0; j<week; j++) {
System.out.print("\t"); //1일전 공백주기
}
}
System.out.printf("%2d\t",i);
week++;
if(week>6) {
week=0;
System.out.println();
}
}
}
}
///
ArrayList , Vector
HashMap
============
= regex
= reflect
============ Web
2. Collection : 자료구조
메모리 저장해서 사용시 편리하게 사용이 가능
=> 사용되는 프로그램 : 입출력 => CURD => 단점 (메모리) <=> 파일
=> 모든 데이터 저장이 가능
10, 10.5, "aaa", 'A'
CURD => 읽기, 저장, 삭제, 수정
저장 갯수
라이브러리 => 모든 개발자 동일 => 표준화
읽기 : get(0)
갯수 : size()
수정 : set()
삭제 : remove()
저장 : add()
=> 가변형 ==> 배열
=> 종류
1) 순서가 존재 중복된 데이터 추가
List(인터페이스) =====> 데이터베이스
=> 구현한 클래스
ArrayList : 비동기 (속도빠름, 데이터베이스)
Vector : 동기 (네트워크)
LinkedList
Queue
Stack
package com.sist.collection;
import java.util.ArrayList;
public class MainClass {
public static void main(String[] args) {
ArrayList list = new ArrayList();
//추가
list.add(10);
list.add(10.5);
list.add("홍길동");
list.add('A');
//값 읽기
int a = (int)list.get(0);
double d = (double)list.get(1);
String s = (String)list.get(2);
char c = (char)list.get(3);
System.out.println(a);
System.out.println(d);
System.out.println(s);
System.out.println(c);
}
}
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("홍길동"); //0
list.add("심청이");
list.add("이순신");
list.add("박문수");
list.add("춘향이");
list.remove(2); // 2번 이순신빠지고 자동으로 박문수가 2로 됨
list.add(1, "강감찬"); // 1번이 되고 심청이가 2번이 됨
for(int i=0; i<list.size(); i++) {
String name = (String)list.get(i);
System.out.println(name);
}
제네릭스 타입 : 전체의 데이터형을 변경
<String> => Object => String으로 변경
T => 타입 임시 데이터형
class Box<T> {
T t;
public void setT(T t) {
this.t = t;
}
public T getT() {
return t;
}
}
Box<String> box = new Box<String>()
package com.sist.collection;
import java.util.*;
class Movie{
private int mno;
private String title;
private String director;
private String actor;
public int getMno() {
return mno;
}
public void setMno(int mno) {
this.mno = mno;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
public class MainClass2 {
public static void main(String[] args) {
ArrayList<Movie> list = new ArrayList<Movie>(); //영화정보만 저장
}
}
2) 순서가 없고 중복이 없는 데이터 추가 ===> 탐색기
Set
HashSet
TreeSet
3) 키, 데이터 ==> 두개를 동시에 저장 ==> 클래스 관리 (Spring)
Map
Hashtable
Hashmap
4) 응용
BoardVO
package com.sist.back;
import java.util.Date;
// 캡슐화 => 데이터 보호 목적
public class BoardVO {
private int no;
private String name;
private String subject;
private String content;
private String pwd;
private Date regdate;
private int hit;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Date getRegdate() {
return regdate;
}
public void setRegdate(Date regdate) {
this.regdate = regdate;
}
public int getHit() {
return hit;
}
public void setHit(int hit) {
this.hit = hit;
}
}
BoardManager
package com.sist.back;
import java.util.*;
public class BoardManager {
private static ArrayList<BoardVO> list= //제네릭스타입 BoardVO타입만 저장
new ArrayList<BoardVO>();
public int sequence() { // 자동 증가 번호 제작
int max = 0;
for(BoardVO vo : list) {
if(max<vo.getNo())
max=vo.getNo();
}
return max+1; // private int no 사용자가 입력해주는 번호가 아니라 자동증가해야되기 떄문에
}
// 추가
public void insert(BoardVO vo) {
vo.setRegdate(new Date()); //new Date 오늘 날짜
vo.setNo(sequence());
list.add(vo);
}
// 목록 출력
public ArrayList<BoardVO> select(){
return list;
}
}
BoardMainFrame
package com.sist.front;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import com.sist.back.*;
import java.util.*;
// 날짜
import java.text.*; //SimpleDateFormat
public class BoardMainFrame extends JFrame implements ActionListener{
BoardListPanel bp = new BoardListPanel();
BoardInsertPanel bi = new BoardInsertPanel();
JTabbedPane tp = new JTabbedPane();
// 프로그램 연결 => ArrayList => BoardManager
BoardManager bm = new BoardManager();
public BoardMainFrame() {
tp.addTab("게시판목록", bp);
tp.addTab("글쓰기", bi);
tp.setTabPlacement(tp.BOTTOM);
//tp.setSelectedIndex(1); //첫화면 탭
add("Center",tp);
setSize(640, 480);
setVisible(true);
bp.b.addActionListener(this); //새글
bi.b1.addActionListener(this); //글쓰기
bi.b2.addActionListener(this); //취소
}
public static void main(String[] args) {
new BoardMainFrame();
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==bp.b) { //새글 버튼을 눌렸을 때
//글쓰기 화면으로 이동
tp.setSelectedIndex(1);
}
else if(e.getSource()==bi.b1) { //글쓰기 버튼 눌렸을 때
//ArrayList에 저장
// 입력한 데이터 읽기
String name = bi.tf1.getText();
String subject = bi.tf2.getText();
String content = bi.ta.getText();
String pwd = String.valueOf(bi.pf.getPassword()); //char=>String변환
// password는 char[]로
BoardVO vo = new BoardVO();
vo.setName(name);
vo.setSubject(subject);
vo.setContent(content);
vo.setPwd(pwd);
bm.insert(vo); // ArrayList에 추가
// 목록 추가 => 메소드
listPrint(); //호출
// 목록 이동
tp.setSelectedIndex(0);
}
else if(e.getSource()==bi.b2) { //취소 버튼 눌렸을 때
//목록으로 이동
tp.setSelectedIndex(0);
}
}
public void listPrint() { //메소드추가
// ArrayList받기
ArrayList<BoardVO> list = bm.select();
// 테이블에 출력
// 테이블 지우기
for(int i=bp.model.getRowCount()-1; i>=0; i--) {
bp.model.removeRow(i);
}
// 출력
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// MM(월) mm(분)
for(BoardVO vo : list) {
String[] data = {
String.valueOf(vo.getNo()),
vo.getSubject(),
vo.getName(),
sdf.format(vo.getRegdate()),
String.valueOf(vo.getHit())
};
bp.model.addRow(data);
}
}
}
BoardListPanel
package com.sist.front;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class BoardListPanel extends JPanel{
JButton b;
TableColumn column;
JTable table; // 모양관리 => View
DefaultTableModel model; // 데이터관리 => 수정, 추가, 출력 => Model
public BoardListPanel() {
b = new JButton("새글");
String[] col = {"번호", "제목", "이름", "작성일", "조회수"};
String[][] row = new String[0][5];
// 상속이 없이 재정의가 가능한 클래스 ==> 익명의 클래스
model = new DefaultTableModel(row,col) {
public boolean isCellEditable(int r, int c) {
return false;
}
};
table = new JTable(model);
table.getTableHeader().setBackground(Color.cyan);
//table.setShowVerticalLines(false);
table.setShowGrid(false);
table.setRowHeight(35);
table.setSelectionForeground(Color.white);
table.setSelectionBackground(Color.pink);
table.getTableHeader().setReorderingAllowed(false); //이동불가능
JScrollPane js = new JScrollPane(table);
js.getViewport().setBackground(Color.white);
//배치
setLayout(null);
b.setBounds(10, 15, 100, 30);
js.setBounds(10, 50, 610, 380);
add(b);
add(js);
for(int i=0; i<5; i++) {
column = table.getColumnModel().getColumn(i);
DefaultTableCellRenderer render = new DefaultTableCellRenderer();
if(i==0) {
column.setPreferredWidth(30);
render.setHorizontalAlignment(JLabel.CENTER);
}
else if(i==1) {
column.setPreferredWidth(385);
render.setHorizontalAlignment(JLabel.LEFT);
}
else if(i==2) {
column.setPreferredWidth(60);
render.setHorizontalAlignment(JLabel.CENTER);
}
else if(i==3) {
column.setPreferredWidth(80);
render.setHorizontalAlignment(JLabel.CENTER);
}
else if(i==4) {
column.setPreferredWidth(45);
render.setHorizontalAlignment(JLabel.CENTER);
}
column.setCellRenderer(render);
}
//출력
//String[] data = {"1", "ArrayList 연습중입니다", "홍길동", "2020-07-24", "0"};
//model.addRow(data);
}
}
BoardInsertPanel
package com.sist.front;
import java.awt.*;
import javax.swing.*;
public class BoardInsertPanel extends JPanel {
JLabel title = new JLabel("글쓰기",JLabel.CENTER); //가운데정렬
JLabel la1,la2,la3,la4;
JTextField tf1,tf2;
JTextArea ta;
JPasswordField pf;
JButton b1,b2;
public BoardInsertPanel() {
title.setFont(new Font("굴림체", Font.BOLD, 40));
la1 = new JLabel("이름", JLabel.RIGHT);
la2 = new JLabel("제목", JLabel.RIGHT);
la3 = new JLabel("내용", JLabel.RIGHT);
la4 = new JLabel("비밀번호", JLabel.RIGHT);
tf1 = new JTextField();
tf2 = new JTextField();
ta = new JTextArea();
JScrollPane js = new JScrollPane(ta);
pf = new JPasswordField();
b1 = new JButton("글쓰기");
b2 = new JButton("취소");
setLayout(null);
title.setBounds(10, 15, 600, 45); //글쓰기탭
add(title);
la1.setBounds(50, 70, 100, 30);
tf1.setBounds(155, 70, 200, 30);
add(la1);add(tf1);
la2.setBounds(50, 105, 100, 30);
tf2.setBounds(155, 105, 350, 30);
add(la2);add(tf2);
la3.setBounds(50, 140, 100, 30);
js.setBounds(155, 140, 350, 150);
add(la3);add(js);
la4.setBounds(50, 295, 100, 30);
pf.setBounds(155, 295, 100, 30);
add(la4);add(pf);
JPanel p = new JPanel();
p.add(b1);
p.add(b2);
p.setBounds(10, 330, 600, 35);
add(p);
}
}
'Back-end > Java' 카테고리의 다른 글
JAVA의 정석 32일차 - 영화 정보 프로그램(1) (0) | 2020.07.28 |
---|---|
JAVA의 정석 31일차 - 입출력 I/O (0) | 2020.07.27 |
JAVA의 정석 29일차 - String, StringBuffer, Math, Wrapper (0) | 2020.07.23 |
JAVA의 정석 28일차 - java.lang패키지 Object클래스 (0) | 2020.07.22 |
JAVA의 정석 27일차 - 예외회피 (0) | 2020.07.21 |