웹 개발을 할 때 form으로부터 전송 받은 값으 숫자인지 체크해야 할 때가 있다.

이럴 때는 간단하게 숫자체크를 하는 메소드를 공통 클래스에 포함 시켜 필요할 때마다 호출하여 사용한다.

익셉션을 이용한 숫자 체크 방법
숫자를 체크하는 방식은 Double.parseDouble 또는 Integer.parseInt를 활용하여 Exception을 통해 숫자여부를 판별


public class StringNumberCheck {
 
    public static void main(String[] args) {
 
        String str_1 = "가나다라" ;
        String str_2 = "523" ;
        String str_3 = "5.7" ;
        String str_4 = "-5" ;
        String str_5 = "-5.9" ;
         
        System.out.println(isNumber(str_1)) ;
        System.out.println(isNumber(str_2)) ;
        System.out.println(isNumber(str_3)) ;
        System.out.println(isNumber(str_4)) ;
        System.out.println(isNumber(str_5)) ;
        
    }
    // 익셉션에 걸린 다는 것은 잘못된 코드라는 뜻, 반대로 활용하면 숫자인지 아닌지 가려낸다.
    public static boolean isNumber(String str){
        boolean result = false;
        try{
            Double.parseDouble(str) ;
            result = true ;
        }catch(Exception e){}
     
        return result ;
    }

}

// 숫자 : true 아닐 경우 :false
출처: https://fruitdev.tistory.com/84 [과일가게 개발자]

https://fruitdev.tistory.com/84

 

[Java] 간단한 숫자체크

웹 개발을 할때 form 으로부터 전송받은 값이 숫자인지 체크해야 할 일이 종종 있다. 이럴때는 간단하게 숫자체크하는 메소드를 공통 클래스에 포함시켜 필요할때마다 호출해서 사용하면 편하다

fruitdev.tistory.com

 

 

작업 내용 : 전체 관리 (MainClass.java)

"newsdata.txt" 파일을 줄 단위로 읽고,
'경향신문, nsd16500796.gif, http://newsstand.naver.com/032, 종합' 중
'nsd16500796.gif, http://newsstand.naver.com/032' 만 mySQL에 영구 보존
mySQL의 데이터를 조회하여 
html 파일을 생성

====================================

작업 1. "newsdata.txt" 파일을 줄 단위로 읽기 : 

	FileReadWriteClass.java
	
	내부 메서드 : ArrayList<String> readTextLine(String uri)
	
	createHTML()
	
	​
	
	1-1. 파일의 경로를 String 변수에 저장 : 
	
	=> MainClass 에서 String uri="c:/filetest/newsdata.txt";
	
	1-2. 파일읽기 : FileReader.class 
	
	1-3. 줄 단위로 읽기 : BufferedReader.class 의 readLine() <= 한 줄만 읽는 메서드(String)
	
	readLine()으로 한 줄씩 읽을 때마다 ArrayList<String> 타입 객체에 add()

======================================

작업 2, 3 : 

DBReadWriteClass.java

내부메서드 : connectMySQL() / selectData() / insertData()


작업 2. 한 줄 읽은 데이터들 분리 
	
	2-1. 분리 메서드 : String.class 의 split("구분자") <=반환 타입 : String[]
	
	2-2. 분리된 데이터 일부분 추출 : String[] 의 1, 2 번 데이터 추출

​

작업 3. SQL 문을 이용하여 mySQL 에 저장

	3-1. mySQL 드라이버 로드 : Class.forName("드라이버이름") <= ClassNotFoundException
	
	3-2. 데이터베이스 접속 : DriverManager.getConnection("주소/db", "아이디", "비밀번호")
	
	<= SQLException 
	
	3-3. 쿼리(Query) 문 실행 
	
	3-3-1. Statement 객체 생성 : Connection 객체.createStatement()
	
	3-3-2. Query 실행 : Statement객체.executeUpdate("실행Query") <=반환 타입 int

========================================================

작업 4. mySQL의 데이터를 조회 : DBReadWriteClass 의 selectData()

	4-1. selectData() 조회된 결과를 반환
	
	4-2. 데이터베이스 접속 : 기존 connectMySQL("DB명") 를 활용
	
	4-3. 데이터 조회 : select * from news_table 쿼리 필요
	
	4-3-1. 쿼리실행 : Statement.class 의 executeQuery("실행쿼리") 메서드 사용
	
	4-3-2. 쿼리 실행 후, 반환되는 데이터 : ResultSet 객체
	
	4-4. 결과 값 반환(return ResultSet 객체 반환)

======================================================== 

작업 5. html 파일을 생성 : FileReadWriteClass 의 createHTML(ResultSet rs)

	5-1. 한 줄 단위로 파일에 적기 
	
	5-1-1. FileWriter.class : 파일경로와 파일명.확장자 (c:/filetest/news.html)
	
	FileWriter fw=new FileWriter("파일경로")
	
	5-1-2. 한 줄 씩 적기 : BufferedWriter.class 의 write() 
	
	write("HTML 코드") 
	
	5-1-3. 마지막에는 반드시 close() 를 이용하여 파일 내용을 저장
	
	<html>
	
	<head><title>naver news stand</title></head>
	
	<body>
	
	<table border=1>
	
	<tr><th>Image</th><th>URL</th></tr>
	
	​
	
	<tr>
	
	<td>rs.getString("imgname")</td>
	
	<td>rs.getString("urlname")</td>
	
	</tr>
	
	​
	
	</table>
	
	</body>
	
	</html>
	
	​
	
	완료!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

====================================

추가 작업 1. 이미지 파일명 대신 이미지를 직접 출력

1-1. 이미지를 출력하는 HTML 코드 : 

<img src="파일경로/이미지파일" >

1-2. 이미지 파일 경로 : 현재 html 파일이 있는 하위폴더(newsImages)내에 존재

1-2-1. 현재 html 파일이 있는 위치 ./newsImages/ 

<img src=./newsImages/~~~.gif > 

1-3. 1-2-1. 의 HTML 코드 위치 : <td>rs.getString("imgname")</td>

<td><img src=./newsImages/+rs.getString("imgname")+ ></td>

========================================= 

추가 작업 2. URL을 마우스로 클릭하면 해당 페이지로 이동

2-1. 페이지 이동 HTML 코드 : <a href=이동주소 >화면에 보여지는 내용</a> 

2-2. HTML 코드 위치 : <td>rs.getString("urlname")</td>

"<td><a href=" + rs.getString("urlname") + " >"+ rs.getString("urlname") +"</a></td>"

 

1.FileDataReadClass

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

​public class FileReadWriteClass {

	public FileReadWriteClass() {
	}

	// 외부 txt 파일을 줄 단위로 읽어서 ArrayList로 반환하는 매소드
	public ArrayList<String> readTextLine(String uri) {
	
		ArrayList<String> lines = new ArrayList<String>();// add시킬 ArrayList
		
		try {
			FileReader fr = new FileReader(uri);
			BufferedReader br = new BufferedReader(fr);// 한 줄 단위로 읽어주는 클래스
			
			while (true) {// 무한반복
				String line = br.readLine();// 실제로 한 줄 읽는 것
		
				if (line == null) {
					return lines;
				}
				// System.out.println(line);
		
				lines.add(line);
			}
		} catch (FileNotFoundException e) {
			System.out.println("ERR readTextLine File 입출력 오류" + e.getMessage());
		} catch (IOException e) {
			System.out.println("ERR readTextLine 내부 br.readLine();오류" + e.getMessage());
		}
			return lines;// try 구문은 실행이 완료 되면 사라지기 때문에 ArrayList<String> lines = new
		
		// ArrayList<String>();를 밖에다가 써준다.	
	}

	public void createHTML(ResultSet rs) {
	
		String url = "c:/filetest/news.html";
	
		try {
			FileWriter fw = new FileWriter(url);
			BufferedWriter bw = new BufferedWriter(fw);
			bw.write("<html>");
			bw.write("<head><title>naver news</head></title>");
			bw.write("<body>");
			bw.write("<table border=1>");
			bw.write("<tr><th>image</th><th>URL</th></tr>");
			
			while (rs.next()) {
				bw.write("<tr>");
				bw.write("<td><img src=./newsimages/" + rs.getString("imgname") + "></td>");
				bw.write("<td><a href=" + rs.getString("urlname") +">"+ rs.getString("urlname")+"</a></td>");
				bw.write("</tr>");
			}
			bw.write("</table>");
			bw.write("</body>");
			bw.write("</html>");
			bw.close();
		} catch (IOException e) {
			System.out.println("ERR FileWriter 입출력 오류" + e.getMessage());
		} catch (SQLException e) {
			System.out.println("ERR ResultSet 데이터 오류" + e.getMessage());
		}
	}
}

2.DBReadWriteClass

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;//컨트롤+쉬프트+o

public class DBReadWriteClass {
		
	public DBReadWriteClass() {
	}
	
	public void insertData(ArrayList<String>lines){
	
		//String line = lines.get(0);
		//System.out.println(line);// 첫번째 데이터가 나오는지 확인(경향신문, nsd16500796.gif, http://newsstand.naver.com/032, 종합)
		//String[]words = line.split(", ");//데이터를 ()기준으로 떨어트려준다
		//System.out.println(words[1]+"_"+words[1].length());//길이 값을 알려준다.(테이블 만들 때 사용)
		//System.out.println(words[2]+"_"+words[1].length());
		//String queryInsert = "insert into news_table (imgname,urlname) values('"+words[1]+"','"+words[2]+"')";// 자바는 띄어쓰기를 잘 해야한다. mysql은 알아서 이해한다.
		//String data = words[1]+","+words[2]+")";
		//System.out.println(queryInsert+data);//insert into news_table (imgname,urlname) values(nsd16500796.gif,http://newsstand.naver.com/032)
		//문자열 분리 및 쿼리문 테스트 준비 끝
		//실제 테이블에 데이터 삽입예정
		
			this.connectMYSQL("naver_db");//insertData에서 connectMYSQL을 실행해준다. 메인에 갈 필요 없음으로.
		
			try {
				Statement stmt =mysqlConnect.createStatement();
				//System.out.println("SQL쿼리 성공");
			
			for(int i=0;i<lines.size();i++){
				
				String line = lines.get(i);// 한 줄 문자열 추출후 저장
				String[]words = line.split(", ");//저장된 문자열 분리하여 저장
				String queryInsert = "insert into news_table (imgname,urlname) values('"+words[1]+"','"+words[2]+"')";// 자바는 띄어쓰기를 잘 해야한다. mysql은 알아서 이해한다.
				
				int n=stmt.executeUpdate(queryInsert);//쿼리 실행
				
				if(n>0){
					System.out.println(i+"데이터 삽입 성공");//데이터 삽입여부확인
				}
			}
		
		//int n=stmt.executeUpdate(queryInsert);
		//if(n>0){
		//System.out.println("테이터 삽입성공");
		//}else{
		//System.out.println("데이터 삽입실패");
		//}
		
			} catch (SQLException e) {
				System.out.println("ERR SQL 쿼리 오류"+e.getMessage());
			}finally{//실행 : try{}문제가 없을 경우, catch(){} 실행종료
			
			try {
				mysqlConnect.close();//자원해제 시켜주는 메소드(.close();)
			} catch (SQLException e) {
				System.out.println("ERR mysqlConnect.close(); 오류"+e.getMessage());			
			}
		}
	}
	
		Connection mysqlConnect=null;
	
	public void connectMYSQL(String dbname){//데이터베이스 이름만 바뀌기 때문에 이 매소드를 전달할 때 호출 받을 예정((String dbname)
	
		String driverName = "com.mysql.jdbc.Driver";//드라이버 명칭은 고정
		String dbURL = "jdbc:mysql://localhost:3306/";//127.0.0.1 로컬호스트 번호
		String adminID = "root";
		String adminPW = "920424";
	
	try {
		Class.forName(driverName);
		//System.out.println("mysql 드라이버 로드 성공");
		
		mysqlConnect=DriverManager.getConnection(dbURL+dbname,adminID,adminPW);
		//System.out.println("db접속성공");
		
		} catch (ClassNotFoundException e) {
			System.out.println("ERR mysql 드라이버 로드 오류"+e.getMessage());
		} catch (SQLException e) {	
			System.out.println("ERR db접속 오류"+e.getMessage());	
		}
	}
	
	public ResultSet selectData(){
		this.connectMYSQL("naver_db");
		ResultSet rs = null;
		try {
		Statement stmt = mysqlConnect.createStatement();
		rs = stmt.executeQuery("select * from news_table");
		} catch (SQLException e) {
			System.out.println("ERR selectData내부 오류"+e.getMessage());
		}
		return rs;
	}
}

3.MainClass

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class MainClass {
	
	public static void main(String[] args) {
	
		//String uri = "c:/filetest/.txt";
		
		FileReadWriteClass frwc = new FileReadWriteClass();
		
		//ArrayList<String> lines = frwc.readTextLine(uri);
		//System.out.println(lines.size()); 확인코드
		//System.out.println(lines.get(0)); 확인코드
		
		DBReadWriteClass dbrw = new DBReadWriteClass();
		
		ResultSet rs=dbrw.selectData();
		
		/*try {
		System.out.println(rs.next());
		} catch (SQLException e) {
		System.out.println("ERR ResultSet 조회 실패 오류"+e.getMessage());
		}
		
	//dbw.insertData(lines);//DBReadWriteClass가 가지고 있는 메소드를 호출*/
		
	frwc.createHTML(rs);
	}

}


 


/*1. mysql 데이터베이스에 접속 할 수 있는 jdbc 드라이버 로딩

	1-1 mysql-connector-java-5.1.18-bin 파일을 현재 작업중인 프로젝트에 참조 (bulid path 메뉴를 사용)
	1-2 Class.forName("드라이버 이름")를 이용하여 전용 드라이버 이름을 전달

2.드라이버드을 관리하는 클래스의 매서드를 이용하여 데이터베이스에 접속(데이터베이스 주소/데이터베이스명, 접속아이디, 접속비밀번호필요)

드라이버드을 관리하는 클래스:DriverManager.class
매서드 : getConnection("주소/db이름","아이디","비밀번호")
DriverManager.getConnection("주소/db이름","아이디","비밀번호")

​

***위의 1,2에는 반드시 예외처리가 필요***

1.ClassNotFoundException

2.AQLException

기존에 만들 클래스 : DBClass의 dbConnect()내부에서 처리*/


/*/작업 2. 위의 작업 1이 성공적으로 끝났을 경우에만 해당.

1. 테이블의 전체 데이터를 조회 : select*from emp_table

2.데이터베스의 테이블 내용을 조회할 쿼리를 실행하는 메소드 필요

	2-1.쿼리를 실행할 수 있는 메소드를 보유하는 클래스 : Statement.class
	Statement 클래스는 new를 이용하여 객체생성이 불가능하고, 반드시 접속성공한 결과를 가지고 있는 Connection 객체를 통하여 생성
	Statement stmt = conn.createStatement();

	2-1 쿼리 중 조회하는 쿼리를 실행하는 메소드 : executeQuery("쿼리문");
		executeQuery()는 반드시 결과값을 ResultSet 객체로 반환
		ResultSet rs = null;
		rs = stmt.executeQuery(selectQuery);

		만약, 
		데이터를 삭제 : delete from emo_table where name = 'AA';
		
		데이터를 수정:update emp_table set name = 'SSSS' where age=10;
		
		데이터를 추가: insert into emp_table values("AA",~~~);
		
		이와 같은 쿼리를 실행할 경우 필요한 메서드 : executeUpdate("실행쿼리")
		executeUpdate()메소드는 실행한 결과(실행 횟수)를 정수로 반환
		int n = stmt.executeUpdate("실행쿼리");

============================================

​

작업 3.조회된 데이터를 HTML로 바꾸는 법

1.없는 파일을 생성해 파일 내부에 HTML코드를 적는다.
	1-1.파일 내부에 글을 쓸 수 있는 클래스: FileWriter.Class
	
	String uri = "c:/filetest/table.html";
	FileWriter fw = new FileWriter (uri);
	
	or

	FileWriter fw = new FileWriter ("c:/filetest/table.html");

	new 이용하여 객체 생성가능
	단, 생성할 파일명, 경로가 반드시 필요.

	1-2. 줄 단위로 글을 쓰기 위해서 필요한 클래스 : BufferedWriter.class

	BufferedWriter bw = new BufferedWriter(fw); 

	new 이용하여 객체 생성가능 
	단, 생성시 파일 관련 객체가 필요.​

	1-3. 실제 파일에 글을 쓰는 메서드 : bw.write("적을내용");

	1-4. 줄을 바꿔주는 메서드 : bw.nextLine();

===================================================

HTML: 웹브라우저 내의 문서를 표현할 수 있는 언어

1.HTML 구조

<html>

​

<head>

<title>웹브라우저 탭에 보여지는 제목</title>

</head>

​

<body>

웹브라우저 내부에 보여지는 내용

</body>

​

</html>

​

1-3. 표형태로 표현할 경우:<body>이 곳에다가 적는다.</body>

	1-3-1.표
	
	<table>
	</table>
	
	1-3-2.표내부에 한 줄 : <table>이곳에다가 적는다.</table>
	
	<tr>
	</tr>
	
	1-3-3 한 줄의 한칸 : <tr>이곳 사이에 적는다.</tr>
	
	제목표현
	<th>제목</th>
	
	데이터표현
	<td>데이터</td> 


*/

1.DBClass

package com.ohj.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBClass {

	String driverName = "com.mysql.jdbc.Driver";//드라이버 명칭은 고정
	String dbURI = "jdbc:mysql://localhost:3306/testdb";//127.0.0.1 로컬호스트 번호
	String dbID = "root";
	String dbPW = "920424";
	
	Connection conn = null;

	public DBClass() {
	}

	public void dbconnect() {//접근제한자 반환데이터타입 메소드명(){ } 선언 
	
		try {
			Class.forName(this.driverName);// 드라이버 로딩(사용)
			System.out.println("드라이버 로드 성공");
	
			this.conn = DriverManager.getConnection(this.dbURI, this.dbID, this.dbPW);//드라이버들을 관리해주는 클래스 명 getConnection 변수를 선언 시켜줘야함
			System.out.println("DB 접속 성공");
	
		} catch (SQLException e) {
			System.out.println("ERR connect:" + e.getMessage());
	} catch (ClassNotFoundException e) {
		System.out.println("ERR mySQL Driver Load:" + e.getMessage());
		}
	}
	
	public ResultSet select() { //접근제한자 반환데이터타입 메소드명(){ } 선언 
		
		String selectQuery = "select*from emp_table";
		ResultSet rs = null;
	
		try {
			Statement stmt = conn.createStatement();//Statement 쿼리문을 실행할 수 있는 메소드를 가지고 있음//Connection 객체를 통해서 연결
			rs = stmt.executeQuery(selectQuery);
	
		} catch (SQLException e) {
			System.out.println("ERR:SQL오류" + e.getMessage());
		}
		return rs; 
	}
}

 

2.HTMLFileWriterClass

package com.ohj.db;


public class HTMLFileWriterClass {
	public HTMLFileWriterClass() {
	}
	
	public void HTMLFileWriterClass() {
	}
	
}

 

3.Mainclass

package com.ohj.db;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;


public class MainClass {

	public static void main(String[] args){

		DBClass dbc=new DBClass();
		
		//파일 생성 위치
		dbc.dbconnect();
		
		//전체 데이터 조회하는 메소드 호출
		ResultSet rs =dbc.select();
		
		String uri = "c:/filetest/table.html";
		
		//데이터베이스에 접속하는 메소드 호출
		try {
		
			FileWriter fw = new FileWriter (uri);
			BufferedWriter bw = new BufferedWriter(fw);
		
			bw.write("<html>");	
			bw.newLine();		
			bw.write("<head>");		
			bw.newLine();		
			bw.write("<title>table</title>");
			bw.newLine();
			bw.write("</head>");			
			bw.newLine();			
			bw.write("<body>");			
			bw.newLine();			
			bw.write("<table border=1>");			
			bw.newLine();
			bw.write("<tr><th>name</th><th>age</th><th>local</th><th>years</th><th>worker</th></tr>");
			
			try {
										
				while(rs.next()){//MYSQL에서 파일을 불러온다.(rs는 메인으로 부터 값을 전달 받는 매개변수) 값을 반복적으로 꺼내는 부분
				
				bw.write("<tr>");
				bw.write("<td>"+rs.getString("name")+"</td>");
				bw.write("<td>"+rs.getInt("age")+"</td>");
				bw.write("<td>"+rs.getString("local")+"</td>");
				bw.write("<td>"+rs.getInt("years")+"</td>");
				bw.write("<td>"+rs.getBoolean("worker")+"</td>");
				bw.write("</tr>");
				
				bw.newLine();
			
				}
			} catch (SQLException e) {
				System.out.println("오류:"+e.getMessage());
			}
			
				bw.write("</table>");
				bw.write("</body>");
				bw.write("</html>");
			
				bw.close();//저장되고 파일이 닫힌다.
														
			} catch (IOException e) {
				System.out.println("오류"+e.getMessage());
			}
	}
}

 

1.DBClass

package com.ohj.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBClass {
	String driverName = "com.mysql.jdbc.Driver";//드라이버 명칭은 고정
	String dbURI = "jdbc:mysql://localhost:3306/testdb";//127.0.0.1 로컬호스트 번호
	String dbID = "root";
	String dbPW = "920424";

	Connection conn = null;//getConnection의 변수​
		
	public DBClass() {
	}// DBClass ed

	// DB접속 메소드(드라이버 로드 및 DB 접속까지 처리)
	public void dbconnect() {
	
		try {
		
		Class.forName(this.driverName);// 드라이버 로딩
		System.out.println("드라이버 로드 성공");
		
		this.conn = DriverManager.getConnection(this.dbURI, this.dbID, this.dbPW);//드라이버들을 관리해주는 클래스명 getConnection 변수를 선언 시켜줘야함
		System.out.println("DB 접속 성공");
		
			} catch (SQLException e) {
				System.out.println("ERR connect:" + e.getMessage());
			} catch (ClassNotFoundException e) {
				System.out.println("ERR mySQL Driver Load:" + e.getMessage());
			}​						
		}	

// 전체 데이터 조회 메소드(select*from emp_table)단 조회 결과를 Main으로 전달
	public ResultSet select() {​
	
		String selectQuery = "select*from emp_table";
		ResultSet rs = null;
		try {
			Statement stmt = conn.createStatement();//Statement 쿼리문을 실행할 수 있는 메소드를 가지고 있음//Connection 객체를 통해서 연결
			rs = stmt.executeQuery(selectQuery);//쿼리실행코드 (executeUpdate()<- delete/ update/ insert)
			} catch (SQLException e) {
				System.out.println("ERR:SQL오류" + e.getMessage());
			}
			return rs; 
		}

	
	//전체 레코드 갯수 메소드(select count(*)from emp_table)
	//count(*)은 필드명이 아닌 mysql의 함수명이다.
	public int recordCount(){
	
		int n=0; //레코드의 총 갯수 저장
		
		try {
			Statement stmt =conn.createStatement();
			ResultSet rs=stmt.executeQuery("select count(*)from emp_table");
			rs.next();
			n=rs.getInt(1);
			System.out.println(n);
			} catch (SQLException e) {
				System.out.println("ERR count(*)오류"+e.getMessage());
			}
			return 0;
		}

}// class DBClass ed

 

2.MainClass

package com.ohj.db;

import java.sql.ResultSet;
import java.sql.SQLException;

public class Mainclass {
	
	public static void main(String[] args) {
	
	DBClass dbc=new DBClass();
	
	//드라이버 로드 및 DB접속 메소드 호출
	dbc.dbconnect();
	
	ResultSet rs =dbc.select();//실제 db내부에서 실행되는 것을 자바에 되돌려주는 것 /테이블 처럼 생긴 내용을 가지고 있는 것/한 줄 당 가지고 있는 것이 record
	
		try{
		
			while(rs.next()){
		
			System.out.println(rs.getString("name")+"\t");
			System.out.println(rs.getInt("age"+"\t"));
			System.out.println(rs.getString("local"+"\t"));
			System.out.println(rs.getInt("years"+"\t"));
			System.out.println(rs.getInt("worker"+"\t"));
			System.out.println(rs.getInt("----------------"));
			}
			}catch(SQLException e){
				System.out.println("ERR:SQL오류"+e.getMessage());
			}
		//int records=dbc.recordCount();
		}
}

1. 파일 다루기

package com.ohj.test;

import java.io.File;

public class MainClass {

	 public static void main(String[] args) {
	
	//1. 파일 다루기(File.class)==>예외처리가 없다.(내부데이터 건들이지 않는다.파일 자체를 건들인다.) new File("경로") 
		 File f =new File("c:/windows");
	
	//C:\Users\USER\Desktop\mysql-essential-5.1.60-win32
	
	System.out.println("읽을 수 있는지:"+f.canRead());
	System.out.println("쓸 수 있는 지"+f.canWrite());
	System.out.println("폴더 인지:"+f.isDirectory());//폴더 인지 아닌지 확인시켜주는 것
	System.out.println("파일인지"+f.isFile());//파일인지 아닌지 확인 시켜주는 것
	System.out.println("마지막 수정 날짜를 10진수로:"+f.lastModified());//맨 마지막 수정된 날짜를 10진수로 알려줌
	
	//1578873452925:1970.1.1 00:00:00 부터 현재까지의 시간을 10진수로
	
	System.out.println("파일의 크기:"+f.length());
	System.out.println("폴더일 경우 내부 폴더 및 파일 이름들"+f.list());//폴더일 경우에 String으로 반환시켜주는 것
	
		String[] file_list=f.list();
	
		for(int i=0;i<file_list.length;i++){
			System.out.println(file_list[i]);
		}
	
		String uri="c:/windows";
		String[] file_list2=f.list();
	
		for(int i=0;i<f.length();i++){
			File f2 = new File(uri+file_list2[i]);
			if(f2.isDirectory()){
				System.out.println("폴더:"+file_list2[i]);
			}else{
				System.out.println("파일:"+file_list2[i]);
			}
		}
	}
}

2. 파일 내부 데이터 읽기, 예외처리

package com.ohj.test;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class MainClass2 {

	public static void main(String[] args) {
	
	// 파일 내부(데이터:텍스트)읽기 FileReader.class(로컬 파일들을 다룰 때 pc에 있는 파일을 다룰 때)
	
		//2-1. 글자 한개씩 byte단위로 읽기 FileReader.class=>read() => (char)byte형반환 시켜줘야 함 
		//2-2. 한 줄씩 읽기 BufferedReader.class=>readLine()=>String
	
	// 1.fileReader객체를 먼저 생성 : new FileReader("읽을 파일의 경로 및 파일");
	
	// 2.BufferedReader객체를 만든다 : new BufferedReader(FileReader객체);
	
	//*FileReader.Class의 부모 클래스=>File.class
	
	//*~~inputStream.class:네트워크를 통해 데이터를 읽을 때(인터넷을 통해서) 
	
	//C:\Users\USER\workspace\20200113\src\com\ohj\MainClass2.java
	
	String uri="C:/Users/USER/workspace/20200113/src/com/ohj/MainClass2.java";
	
		try {//강제 종료를 막아주는 기능(예외처리)
	
			FileReader f1=new FileReader("c:/filetest/memo.txt");
			BufferedReader br=new BufferedReader(f1);
			String line="";
	
			while((line=br.readLine())!= null){
		
		//line=br.readLine(); // 한 줄씩 읽어라.
		//if(line==null){//EOF: end of file(즉, 문서의 끝)
		// break;
		//}
				System.out.println(line);
			}
	
		//System.out.println(br.readLine());//읽을 때도 예외처리가 들어간다. 첫번째 줄이 나옴
		//System.out.println(br.readLine());//두번째 줄이 나옴
		
		} catch (IOException fnfe) {//FileNotFoundException 클래스명//IOException예외처리가 더들어감/IOException는 FileNotFoundException보다 조상
			System.out.println(fnfe.getMessage());//파일 찾기를 실패할 경우
		}
	}
}

3. 웹 문서 파일 만들기

package com.ohj.test;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class MainClass3 {
	
	public static void main(String[] args) {// 웹 문서 파일 만들기 

	// 3.파일에 데이터(한 줄씩 쓰기)
	
		//3-1.filewriter.Class -> write("문자열")
		//3-2 BufferedWriter.class=>newLine()줄 /write("문자열")
		
		String uri = "c:/filetest/basic.html"; 	//어느 경로에 어떤 파일명으로 
			try {
				FileWriter fw=new FileWriter(uri);
				BufferedWriter bw=new BufferedWriter(fw);
		
				bw.write("<html>");
				
				bw.newLine();
				
				bw.write("<body bgcolor='yellow'>");
				
				bw.newLine();
				
				bw.write("웹페이지 내부에 보여지는 글씨");
				
				bw.newLine();
				
				bw.write("<form action = 'test.html' method='get'>");
				
				bw.write("<input type = 'text' name='txt' />"); 
				
				bw.write("<input type = 'submit' />");//띄어쓰기를 잘해야함
				
				bw.write("</form>");
				
				bw.newLine();
				
				bw.write("</body>");
				
				bw.newLine();
				
				bw.write("</html>");
				
				bw.close();
				
			} catch (IOException e) {
				System.out.println(e.getMessage());//파일 찾기를 실패할 경우		
			}
		}
}
package com.ohj.test;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class MainClass4 {
	
	public static void main(String[] args) {// 웹 문서 파일 만들기 
	
	// 3.파일에 데이터(한 줄씩 쓰기)
	
	//3-1.filewriter.Class -> write("문자열")
	//3-2 BufferedWriter.class=>newLine()줄 /write("문자열")
	
	String uri = "c:/filetest/main.java";//어느 경로에 어떤 파일명으로 
	
		try {
	
			FileWriter fw=new FileWriter(uri);
			BufferedWriter bw=new BufferedWriter(fw);
	
			bw.write("public class Main{");
			
			bw.newLine();
			
			bw.write("public static void main(String[] args) {");
			
			bw.newLine();
			
			bw.write("System.out.println(\"출력\");");
			
			bw.newLine();
			
			bw.write("}");
			
			bw.newLine();
			
			bw.write("}");
			
			bw.close();
			
			} catch (IOException e) {
				System.out.println(e.getMessage());//파일 찾기를 실패할 경우
			}
	}
}

1.ParentClass

package com.ohj.extend;

public class ParentClass {
	private int n=10;// 부모클래스,본인클래스 내부에서만 사용 가능한 변수
	
	boolean b = false;//같은 패키지 내부에서만 사용 가능한 변수
	
	public char c='A';//어디서든 접근 사용 가능한 변수
	
	protected String s ="test";//패키지가 달라도 자식 클래스에게는 허용
	
	public ParentClass() {
		System.out.println("PatrentClass()생성자 내부");
	}
	
	public ParentClass(int n) {
		this.n=n;
		System.out.println(n);
	}
	
	public void ParentMethod() {//어디서든 호출가능
		System.out.println("PatrentMethod()생성자 내부");
	}
	
	void defaultClass(){//같은패키지내에서만 호출가능
		System.out.println("defaultClass()생성자 내부");
	}
	
	private void privateMethod() {//부모 클래스 내부에서만 호출 가능
		System.out.println("privateMethod()생성자 내부");
	}

}

 

2.childClass

package com.ohj.extend;

//new ParentClass();

public class ChildClass extends ParentClass{//extends : 물려받는 것

	public ChildClass() {

		//super();//부모 클래스를 호출한다. 무조건 앞에다가 적어줘야한다.
		super(250);

		System.out.println("ChildClass 생성자 내부");

	}
}

3.OtherClass

package com.ohj.extend.pkg;

// 다른 패키지에 있는 클래스를 사용 할 경우 반드시 import
import com.ohj.extend.ParentClass;

public class OtherClass extends ParentClass {
	public OtherClass() {
		System.out.println("OtherClass 생성자 내부");
	}

	public void ParentMethod() {//어디서든 호출가능
	
	int s =100;
	
	System.out.println("OtherClass PatrentMethod 내부"+100);
	
	//부모로부터 받은 메소드를 자식이 고쳐서 쓸 수 있다. 이와 같은 기법을 override라고 부른다.
	//자식클래스는 부모로부터 물려받은 메소드의 {}내부만 수정 가능하다.
	
	}
}

4.MainClass

package com.ohj.extend;

import com.ohj.extend.pkg.OtherClass;

// 상속, 접근제한자에 관한 내용

public class MainClass {
	public static void main(String[] args) {

		//ParentClass pc= new ParentClass();
		
		ChildClass cc= new ChildClass();//boolean b변수를 상속한다.
		
		//OtherClass oc = new OtherClass();	
	}
}

 

1.InfoClass

package com.ohj.news;

public class InfoClass {
	int a=10;
	String s="info";

	public InfoClass(){//클래스 생성자가 없을 때 기본 생성자를 만들어준다.
	}

	public InfoClass(int n,String s){
	
		this.a = n;
		this.s = s;
	
	}

//오버라이드:상속된 자식이 내부를 고치는 것

	public String toString(){
		return a+" "+s;
	}

	public static void test(int n){
		int c = a;
	}

	public static void t(){
		int b =	a;
	}

}

2.MainClass

package com.ohj.news;

public class MainClass {
	
public static void main(String[] args) {

	InfoClass ic1= new InfoClass();
	InfoClass ic2= new InfoClass();
	
	System.out.println(ic1.toString());
	
	//com.ohj.news_ex.InfoClass@15db9742
	System.out.println(ic2.toString());
	
	//com.ohj.news_ex.InfoClass@6d06d69c 참조값 알아내기
	System.out.println(ic1.getClass());
	
	//class com.ohj.news_ex.InfoClass 어떤 객체의 타입을 알고 싶다.
	}
}




help->Ecilpse Marketplace -> eclipse theme ->인스톨 


Window -> perferences -> General

1.BookClass_ex1

1. BookClass

package com.ohj.books;

public class BookClass {

	String title,author,press,picture;
	int price,dc_price,dc;


	public BookClass() {		
	}
	
					//"iOS와 안드로이드를 위한 HTML5", "로빈 닉슨", "한빛미디어", 33000, "07041351.jpg", 10
	public BookClass(String t,String a,String p,int pr,String pic,int d) {
	
		this.author =a;		
		this.dc=d;		
		this.dc_price=dc;		
		this.picture=pic;		
		this.press=p;		
		this.price=pr;		
		this.title=t;		
		this.dc_price=this.dcOperator(d);//반환된 할인가격을 대입
	}
	
	private int dcOperator(int dp){//할인률 계산 10,000원에서 10%할인하면 -> 10,000*(1-0.1)=9,000원
		double d= dp*0.01;
		return (int) (this.price*(1-d));
	}
}

2.DataClass

package com.ohj.books;

import java.util.ArrayList;

public class DataClass {

	//저장될 객체 타입을 예약 : <BookClass>
	
	ArrayList<BookClass> books=new ArrayList<BookClass>();

	public DataClass() {
		
		books.add(new BookClass("DO it HTML 5 CSS 3", "고경희", "이지스퍼블리싱", 16800, "06365234.jpg", 20));	
		books.add(new BookClass("모던 웹 디자인을 위한 HTML5 CSS3 입문", "윤인성", "한빛미디어", 30000, "06992821.jpg", 20));	
		books.add(new BookClass("HTML5 CSS3와 함께하는 드림위버 CS6 무작정 따라하기", "고경희", "길벗", 24000, "07056591.jpg", 10));	
		books.add(new BookClass("Head First HTML5 Programming", "엘리자베스 롭슨, 에릭 프리먼", "한빛미디어", 34000, "06950729.jpg", 20));	
		books.add(new BookClass("만들면서 배우는 HTML5 CSS3 jQuery", "야무", "한빛미디어", 25000, "06837215.jpg", 23));		
		books.add(new BookClass("HTML5 CSS3", "양용석", "로드북", 25000, "06741081.jpg", 15));		
		books.add(new BookClass("HTML5 CSS3 WebGL로 재미있게 배우는 HTML5 게임 프로그래밍", "제이콥 세이드린", "제이펍", 30000, "06980245.jpg", 10));		
		books.add(new BookClass("HTML5 캔버스 완벽 가이드", "데이비드 기어리", "위키북스", 40000, "07085557.jpg", 10));		
		books.add(new BookClass("올인원웹실무가이드 HTML 5 CSS 3", "나인환 김은영 외 1명", "제우미디어", 28000, "06630397.jpg", 16));		
		books.add(new BookClass("HTML5와 CSS3로 작성하는 반응형 웹 디자인", "벤 프레인", "에이콘출판", 30000, "06983417.jpg", 20));		
		books.add(new BookClass("HTML5가 보이는 그림책","ANK Co Ltd", "성안당", 31500, "06992821.jpg", 21));		
		books.add(new BookClass("HTML5 Canvas", "스티브 펄튼, 제프 펄튼", "한빛미디어", 38000, "06806523.jpg", 20));		
		books.add(new BookClass("세르게이의 HTML5 CSS3 퀵 레퍼런스", "세르게이 마브로디", "제이펍", 20000, "07114432.jpg", 10));		
		books.add(new BookClass("이제 실전이다 HTML5 CSS3 사이트제작의 모든것", "양용석", "로드북", 25000, "06880352.jpg", 10));		
		books.add(new BookClass("iOS와 안드로이드를 위한 HTML5", "로빈 닉슨", "한빛미디어", 33000, "07041351.jpg", 10));
		
	}

}

3.MethodClass

package com.ohj.books;

import java.util.ArrayList;

public class MethodClass {
		
		public MethodClass() {//기본 생성자
		}

		//데이터 연산 결과 확인 메소드
		public void dataTest (ArrayList<BookClass>books){
		
			for(int i=0;i<books.size();i++){
				System.out.print(books.get(i).price+"원\t");
				System.out.print(books.get(i).dc+"%\t");
				System.out.println(books.get(i).dc_price+"원");
			}
		
		}
		
		//첵제목을 포함하는 검색하는 메소드
		public void searchTitle(ArrayList<BookClass>books,String keyword){
		
			for(int i=0;i<books.size();i++){
				if(books.get(i).title.contains(keyword)){			
					System.out.println(books.get(i).title);			
				}			
			}		
		}
		
		//저자를 검색하여 책 제목을 출력하는 메소드 
		public void searchAuthor(ArrayList<BookClass>books,String keyword){
		
			for(int a=0;a<books.size();a++){
				if(books.get(a).author.contains(keyword)){
					System.out.println(books.get(a).title);
				}
			}
		}
		
		//출판사를 검색하여 책 제목과 저자를 출력하는 메소드		
		public void searchPress(ArrayList<BookClass>books,String keyword){
		
			for(int a=0;a<books.size();a++){		
				if(books.get(a).press.contains(keyword)){
					System.out.println("책제목 :"+books.get(a).title+"/저자 :"+books.get(a).author);			
				}			
			}	
		}

}

 

4.MainClass

package com.ohj.books;

public class MainClass {
	
		public static void main(String[] args) {
		
		//메인에서 각 객체를 생성하고, 각 메소드에 데이터를 전달
		
		DataClass dc =new DataClass();
		
		MethodClass mc= new MethodClass();
		//데이터 연산 결과 확인 메소드 호출
		
		mc.dataTest(dc.books);
		//책제목을 포함하는 검색 메서드 호출
		
		String searchTitle = "HTML";
		
		mc.searchTitle(dc.books, searchTitle);
		
		//책제목을 포함하는 검색 메서드 호출
		
		String searchAuthor = "제프";
		
		mc.searchTitle(dc.books, searchAuthor);
		
		//책제목을 포함하는 검색 메서드 호출
		
		String searchPress = "미디어";
		
		mc.searchTitle(dc.books, searchPress);

////////////////////////////////////////////////////////////////

/*//출판사 검색 결과값 책 제목과 저자

String searchPress="한빛미디어";

for(int a=0;a<dc.books.size();a++){

if(dc.books.get(a).press.contains(searchPress)){

System.out.println("책제목 :"+dc.books.get(a).title+"/저자 :"+dc.books.get(a).author);

}

}*/

//////////////////////////////////////////////////////////////

/*//저자 검색 : String의 contains"검색어")

String searchAuthor="고경희";

for(int a=0;a<dc.books.size();a++){

if(dc.books.get(a).author.contains(searchAuthor)){

System.out.println(dc.books.get(a).title);

}

}*/

//////////////////////////////////////////////////////////2번

/*//책 제목 검색 : String의 contains("검색어")

//책 제목: dc.Books.get(0).title

//첵제목을 포함하는 검색 : dc.books.get(0).title.contains("검색어")

String searchTitle="HTML";

for(int i=0;i<dc.books.size();i++){

if(dc.books.get(i).title.contains(searchTitle)){

System.out.println(dc.books.get(i).title);

}

}*/
////////////////////////////////////////////////////////////1번

// 데이터 연산 결과 확인 코드

/*for(int i=0;i<dc.books.size();i++){

System.out.print(dc.books.get(i).price+"원\t");

System.out.print(dc.books.get(i).dc+"%\t");

System.out.println(dc.books.get(i).dc_price+"원");

}*/

		}
}

 

2.BookClass_ex2

1.BookClass

package com.ohj.books;

public class BookClass {

	String title,author,press,picture;
	int price,dc_price,dc;
	
	public BookClass() {
	}

	// 방법 2번을 위한 추가 생성자
	
	public BookClass(String t, String a){// 방법 2를 위한 추가 생성자
		this.title=t;
		this.author=a;
	}
	//"iOS와 안드로이드를 위한 HTML5", "로빈 닉슨", "한빛미디어", 33000, "07041351.jpg", 10
	public BookClass(String t,String a,String p,int pr,String pic,int d) {
	
			this.author =a;
			this.dc=d;
			this.dc_price=dc;
			this.picture=pic;
			this.press=p;
			this.price=pr;
			this.title=t;
			this.dc_price=this.dcOperator(d);//반환된 할인가격을 대입
	}
	
	private int dcOperator(int dp){//할인률 계산 10,000원에서 10%할인하면 -> 10,000*(1-0.1)=9,000원
		
		double d= dp*0.01;
		
		return (int) (this.price*(1-d));
		
		}
	}

2.DataClass

package com.ohj.books;

import java.util.ArrayList;

public class DataClass {

	//저장될 객체 타입을 예약 : <BookClass>
	ArrayList<BookClass> books=new ArrayList<BookClass>();

	public DataClass() {
		books.add(new BookClass("DO it HTML 5 CSS 3", "고경희", "이지스퍼블리싱", 16800, "06365234.jpg", 20));		
		books.add(new BookClass("모던 웹 디자인을 위한 HTML5 CSS3 입문", "윤인성", "한빛미디어", 30000, "06992821.jpg", 20));		
		books.add(new BookClass("HTML5 CSS3와 함께하는 드림위버 CS6 무작정 따라하기", "고경희", "길벗", 24000, "07056591.jpg", 10));		
		books.add(new BookClass("Head First HTML5 Programming", "엘리자베스 롭슨, 에릭 프리먼", "한빛미디어", 34000, "06950729.jpg", 20));		
		books.add(new BookClass("만들면서 배우는 HTML5 CSS3 jQuery", "야무", "한빛미디어", 25000, "06837215.jpg", 23));		
		books.add(new BookClass("HTML5 CSS3", "양용석", "로드북", 25000, "06741081.jpg", 15));		
		books.add(new BookClass("HTML5 CSS3 WebGL로 재미있게 배우는 HTML5 게임 프로그래밍", "제이콥 세이드린", "제이펍", 30000, "06980245.jpg", 10));		
		books.add(new BookClass("HTML5 캔버스 완벽 가이드", "데이비드 기어리", "위키북스", 40000, "07085557.jpg", 10));		
		books.add(new BookClass("올인원웹실무가이드 HTML 5 CSS 3", "나인환 김은영 외 1명", "제우미디어", 28000, "06630397.jpg", 16));	
		books.add(new BookClass("HTML5와 CSS3로 작성하는 반응형 웹 디자인", "벤 프레인", "에이콘출판", 30000, "06983417.jpg", 20));	
		books.add(new BookClass("HTML5가 보이는 그림책","ANK Co Ltd", "성안당", 31500, "06992821.jpg", 21));	
		books.add(new BookClass("HTML5 Canvas", "스티브 펄튼, 제프 펄튼", "한빛미디어", 38000, "06806523.jpg", 20));	
		books.add(new BookClass("세르게이의 HTML5 CSS3 퀵 레퍼런스", "세르게이 마브로디", "제이펍", 20000, "07114432.jpg", 10));	
		books.add(new BookClass("이제 실전이다 HTML5 CSS3 사이트제작의 모든것", "양용석", "로드북", 25000, "06880352.jpg", 10));	
		books.add(new BookClass("iOS와 안드로이드를 위한 HTML5", "로빈 닉슨", "한빛미디어", 33000, "07041351.jpg", 10));
		
		}

}

3.MethodClass

package com.ohj.books;

import java.util.ArrayList;

public class MethodClass {
   private DataClass dc=new DataClass(); // 이 내부에서만 쓸 수 있는 전용 데이터로 만들기 위해 private을 작성한다. 
   
   public MethodClass() { // 기본 생성자
   }
   
   //데이터 연산 결과 확인 Method
   public void dataTest(){    //(ArrayList<BookClass> books) 매개변수를 제거해준다
      ArrayList<BookClass> books  =dc.books; //method가 호출될 때 만들어지고, 종료될때 사라지는 변수 --> 이렇게 해주면 this.dc.books.get(i).price 이런식으로 길게 작성하지 않아도 된다.
                                             //private DataClass dc=new DataClass();를 삭제해주고 =dc.books; 에서 =new DataClass().books;로 변경(이러면 변수2개에서 하나로 줄어들게됨
      
      for(int i=0;i<books.size();i++){ // books.size(); 에 dc.를 붙여준다.(dc라는 객체는 현재 class가 가지고있는 변수 => 빨리 찾기 위해 this. 붙인다.)
         System.out.print(books.get(i).price+"원\t");   
         System.out.print(books.get(i).dc+"%\t"); 
         System.out.println(books.get(i).dc_price+"원"); 
      }
   }
   
   //1.책 제목을 포함하는 검색 method
   public void searchTitle(String keyword){ //(ArrayList<BookClass> books) 매개변수를 제거해준다
      ArrayList<BookClass> books  = this.dc.books;//method가 호출될 때 만들어지고, 종료될때 사라지는 변수 --> 이렇게 해주면 this.dc.books.get(i).price 이런식으로 길게 작성하지 않아도 된다.
      for(int i=0;i<books.size();i++){
         if(books.get(i).title.contains(keyword)){//검색어를 받게 될 변수를 기입
            System.out.println(keyword+"키워드가 포함된 책 제목 : "+books.get(i).title);
         }
      }
   }
   
   //2.저자 검색하여 저자가 작성한 책 제목 검색
   public void searchAuthor(String keyword){//(ArrayList<BookClass> books) 매개변수를 제거해준다
      ArrayList<BookClass> books  = this.dc.books;//method가 호출될 때 만들어지고, 종료될때 사라지는 변수 --> 이렇게 해주면 this.dc.books.get(i).price 이런식으로 길게 작성하지 않아도 된다.
      for(int i=0;i<books.size();i++){
         if(books.get(i).author.contains(keyword)){
            System.out.println(keyword+"이(가) 저자인 책 제목 : "+books.get(i).title);
         }
      }
   }

   //3.출판사 검색(책 제목과, 저자명 출력)
   
   /*
   //▼방법 1.
   public ArrayList<String> searchPress(String keyword){//(ArrayList<BookClass> books) 매개변수를 제거해준다
      ArrayList<BookClass> books  = this.dc.books; //검색 할 전체 데이터
      ArrayList<String> r=new ArrayList<String>(); //검색한 결과 저장
      for(int i=0;i<books.size();i++){
      if(books.get(i).press.contains(keyword)){
         r.add(books.get(i).title+","+books.get(i).author);
      }
   }
      return r;
   }*/
   
   
   /*
   //▼방법 2.
   public ArrayList<BookClass> searchPress(String keyword){
      ArrayList<BookClass> books  = this.dc.books; //검색 할 전체 데이터
      ArrayList<BookClass> r=new ArrayList<BookClass>(); //검색한 결과 저장

      for(int i=0;i<books.size();i++){
      if(books.get(i).press.contains(keyword)){
         r.add(new BookClass(books.get(i).title, books.get(i).author));
      }
   }
      return r;
   }*/
   
   
   
   //▼방법 3.
   public ArrayList<ResultClass> searchPress(String keyword){
      ArrayList<BookClass> books  = this.dc.books; //검색 할 전체 데이터
      ArrayList<ResultClass> r=new ArrayList<ResultClass>(); //검색한 결과 저장

      for(int i=0;i<books.size();i++){
      if(books.get(i).press.contains(keyword)){
         r.add(new ResultClass(books.get(i).title, books.get(i).author));
      }
   }
      return r;
   }
   
   
   
         /*출판사를 검색하여 책 제목과 저자를 반환하는 메서드
         1, 2, 3 모두 ArrayList를 사용 : 검색 결과가 각기 다르기 때문
         
         ●●방법 1 : 두 개의 문자열을 ','로 구분하여 하나의 문자열로 만드는 방법
         
            ArrayList<String> r=new ArrayList<String>(); // <어떤 타입의혹은 어디의 데이터가 들어갈건지 선정>();
            r.add(books.get(i).title+","+books.get(i).author); //r에다가 title과 author를 대입시켜준다. 이렇','로 묶어주면 하나의 문자열이 만들어 진다.
            return r; //r값을 반환한다.
         
               MainClass에서
            String searchPress="길벗";
            ArrayList<String> result=mc.searchPress(searchPress);
               처럼 선언해준다. 
            for(int i=0;i<result.size();i++){
               String[] s=result.get(i).split(",");
               System.out.println("제목 : "+s[0]);
               System.out.println("저자 : "+s[1]);
            }
         //위 for문으로 결과값 출력.
         
         ●●방법 2 : 두 개의 결과값을 하나의 객체에 저장 후 ArrayList에 추가(기존 클래스 활용)
         ArrayList<BookClass> r=new ArrayList<BookClass>();
         r.add(new BookClass(books.get(i).title, books.get(i).author)); //BookClass 객체가 생성될 때 첫번째 값과 두번째값을 전달
               
               ====>BookClass 에 
               public BookClass(String t, String a){    // 방법2를 위한 추가 생성자(MethodClass의 books.get(i).title가 t로 books.get(i).author 가 a로 들어가게 된다.)
                  this.title=t;
                  this.author=a;
               }
               를 작성해준다.
               
         public class BookClass{
            public BookClass(String t, String a){  // 방법2를 위한 추가 생성자(books.get(i).title가 t로 books.get(i).author 가 a로 들어가게 된다.)
               this.title=t;
               this.author=a;
            }
         }
          이 후, MainClass 에서
             ArrayList<BookClass> result=mc.searchPress(searchPress);      //검색결과 출력
      for(int i=0;i<result.size();i++){
         System.out.println((i+1+".")+"제목 : "+result.get(i).title);
         System.out.println((i+1+".")+"저자 : "+result.get(i).author);
      }
      위와 같이 작성해주면 동일값 출력 가능
      
         ●●방법 3 : 새로운 클래스를 설계하여 사용
         ResultClass.java //ResultClass 새로 생성
         public class ResultClass{
             String title, author;
             public ResultClass(){ //기본 생성자
          
          }
             public ResultClass(String t, String a){
              this.title=t;
              this.author=a;
          }
         }
         
         //>>method의 return 타입 : ArrayList<ResultClass>로 변경
         //>>method 내부
         public ArrayList<ResultClass> searchPress(String keyword){
         ArrayList<BookClass> books  = this.dc.books; //검색 할 전체 데이터
         ArrayList<ResultClass> r=new ArrayList<ResultClass>(); //검색한 결과 저장

         for(int i=0;i<books.size();i++){
         if(books.get(i).press.contains(keyword)){
         r.add(new ResultClass(books.get(i).title, books.get(i).author));
         }
      }
         return r;
      }
         
         위와같이 하고난 후
         
         MainClass에서
         ArrayList<ResultClass> result=mc.searchPress(searchPress);      //검색결과 출력
         for(int i=0;i<result.size();i++){
            System.out.println((i+1+".")+"제목 : "+result.get(i).title);
            System.out.println((i+1+".")+"저자 : "+result.get(i).author);
            }   
         }
         처럼 작성해주면 동일한 결과값 출력 가능.
         
         */
      

}

4.ResultClass

package com.ohj.books;

public class ResultClass {

	String title,author;
	
	public ResultClass() {//기본생성자
	}

	public ResultClass(String t, String a){	
		this.title=t;
		this.author=a;
	}
}

5.MainClass

package com.ohj.books;

import java.util.ArrayList;

public class MainClass {
	
		public static void main(String[] args) {
		
		//메소드에 키워드만 전달
		
		//DataClass dc =new DataClass();
		
		MethodClass mc= new MethodClass();
		//데이터 연산 결과 확인 메소드 호출
		
		mc.dataTest();
		
		//책 제목을 포함하는 검색 메서드 호출
		
		String searchTitle = "HTML";
		
		mc.searchTitle(searchTitle);
		
		//저자를 검색하여 책 제목을 출력하는 메소드 
		
		String searchAuthor = "제프";
		
		mc.searchTitle(searchAuthor);//결과값 보임
		
		/////////////////////////////////////////////////////////////////////
		
		System.out.println("---------------------------------------");
		
		/*//방법 3번 결과 출력
		
		String searchPress = "미디어";
		
		ArrayList<ResultClass> result=mc.searchPress(searchPress);
		
		//검색 결과 출력
		
		for(int i=0;i<result.size();i++){
		
		System.out.print("제목 " +result.get(i).title+"\t");
		
		System.out.println("저자"+result.get(i).author);
		
		}*/
		//////////////////////////////////////////////
		
		System.out.println("---------------------------------------");
		/*//방법 2번 결과 출력
		
		String searchPress = "미디어";
		
		​
		
		ArrayList<BookClass> result=mc.searchPress(searchPress);
		
		//검색 결과 출력
		
		for(int i=0;i<result.size();i++){
		
		System.out.print("제목 " +result.get(i).title+"\t");
		
		System.out.println("저자"+result.get(i).author);
		
		}*/
		
		System.out.println("---------------------------------------");
		/*//출판사를 검색하여 책 제목과 저자를 출력하는 메소드
		
		String searchPress = "미디어";
		
		//방법 1번 결과 출력
		
		ArrayList<String> result=mc.searchPress(searchPress);
		
		//검색 결과 출력
		
		for(int i=0;i<result.size();i++){
		
		String[] s=result.get(i).split(",");
		
		System.out.print("제목 " +s[0]+"\t");
		
		System.out.println("저자"+s[1]);
		
		}*/
		
		System.out.println("---------------------------------------");
		
		////////////////////////////////////////////////
		
		/*//출판사 검색 결과값 책 제목과 저자
		
		String searchPress="한빛미디어";
		
		for(int a=0;a<dc.books.size();a++){
		
		if(dc.books.get(a).press.contains(searchPress)){
		
		System.out.println("책제목 :"+dc.books.get(a).title+"/저자 :"+dc.books.get(a).author);
		
		}
		
		}*/
		
		System.out.println("---------------------------------------");
		
		//////////////////////////////////////////////////////////////
		
		/*//저자 검색 : String의 contains"검색어")
		
		String searchAuthor="고경희";
		
		for(int a=0;a<dc.books.size();a++){
		
		if(dc.books.get(a).author.contains(searchAuthor)){
		
		System.out.println(dc.books.get(a).title);
		
		}
		
		}*/
		
		System.out.println("---------------------------------------");
		
		//////////////////////////////////////////////////////////2번
		
		/*//책 제목 검색 : String의 contains("검색어")
		
		//책 제목: dc.Books.get(0).title
		
		//첵제목을 포함하는 검색 : dc.books.get(0).title.contains("검색어")
		
		String searchTitle="HTML";
		
		for(int i=0;i<dc.books.size();i++){
		
		if(dc.books.get(i).title.contains(searchTitle)){
		
		System.out.println(dc.books.get(i).title);
		
		}
		
		}*/
		
		System.out.println("---------------------------------------");
		
		////////////////////////////////////////////////////////////1번
		
		// 데이터 연산 결과 확인 코드
		
		/*for(int i=0;i<dc.books.size();i++){
		
		System.out.print(dc.books.get(i).price+"원\t");
		
		System.out.print(dc.books.get(i).dc+"%\t");
		
		System.out.println(dc.books.get(i).dc_price+"원");
		
		}*/
		
		}

}

 

3.String

package com.ohj.string;

public class MainClass {//String에 대해 자세히 들어가기

	public static void main(String[] args) {
	
			String str1 = "Java";
			//기존 문자열을 all 소문자로 반환
			
			System.out.println(str1.toLowerCase());
			//기존 문자열을 all 대문자로 반환
			
			System.out.println(str1.toUpperCase());
			//지정 문자의 index 번호를 반환
			
			System.out.println(str1.indexOf('v'));
			//지정 index의 문자를 반환
			
			System.out.println(str1.charAt(2));
			//지정된 문자열로 시작하는지 (boolean)
			
			System.out.println(str1.startsWith("j"));
			//지정된 문자열로 끝나는지(boolean)
			
			System.out.println(str1.endsWith("a"));
			//지정된 문자열을 포함하는지(boolean)
			
			System.out.println(str1.contains("a"));
			//지정된 인덱스로 부터 모두 반환
			
			System.out.println(str1.substring(1));
			//지정한 첫번째 인덱스부터 두번째 인덱스 직전까지의 문자들을 반환
			
			System.out.println(str1.substring(1,3));
			
			System.out.println("----------------------------");
			
			String str2 = " Ja va ";

			//문자열의 양쪽 공백을 제거
			System.out.println("*"+str2.trim()+"*");
			
			//지정된 문자로 분리하여 배열로 전환한다.
			String[] s = str2.split("");
			
			System.out.println(s.length);
			
			//두개의 문자열 비교(boolean)
			if(str1.equals(str2)){
				System.out.println(true);
			}
			System.out.println("----------------------------");
			
			String str3;//이렇게 선언하게 되면 String이 안에 들어가지 않기 때문에 프린트 할 수 없다.(매소드 사용불가)
			
			System.out.println("----------------------------");
			
			String str4 = "";
			
			//문자열 변수의 값이 있는지(boolean)
			System.out.println(str4.isEmpty());
			System.out.println("----------------------------");
			
			String str5 = null;//실행 후, null point 에러 발생
			
			System.out.println(str5.isEmpty());
			
			}
}

2.String2

1.DataClass

import java.util.ArrayList;

public class DataClass {
			
		ArrayList<NewsClass> newsList=new ArrayList<NewsClass>();
		
		public DataClass(){
			
		String str="[지디넷코리아]"+
		
		"IT서비스 '빅3'가 기존 소프트웨어(SW)개발방식에 웹기술이 확산될 것이란 공통 전망을 내놨다. 삼성SDS, LG CNS, SK C&C 모두 자체 기술과 해외 오픈소스 및 상용 솔루션을 접목해 향후 늘어날 것으로 보이는 프로젝트 수요에 대응할 뜻을 밝혔다."+
		
		"15일 업계에 따르면 3사가 맡고 있는 프로젝트에 센차터치와 ExtJS, 제이쿼리(jQuery)와 제이쿼리모바일, 티타늄과 폰갭과 앱스프레소 등 이미 상용화된 개발프레임워크가 일부 도입됐거나 관련 문의가 다수 들어온 것으로 확인됐다."+ 
		
		"SK C&C는 티타늄, 폰갭, 앱스프레소는 국내시장서 역할이 크지 않지만 중국서 사전영업 지원시 고객들로부터 관심을 받고 있는 기술들이라고 묘사했다. 무료버전 모바일 애플리케이션(이하 '앱') 개발환경으로 지금처럼 모바일웹과 앱개발 환경이 발전하고 시장 성숙도가 높아지는 시기에 그 활용이 늘 거란 전망이다. "+
		
		"삼성SDS는 티타늄, 폰갭, 앱스프레소같은 '하이브리드프레임워크'가 도입비용 감소, 운영 효율화를 요구하는 시장 상황에서 발생한다고 설명했다. 단일 소스코드로 여러 단말기를 지원시 장점이 있다는 분석이다. 현재 윈도가 정복한 PC와 달리 모바일에는 iOS와 안드로이드 등 여러 운영체제(OS)가 존재한다는 이유에서다. "+
		
		"LG CNS는 상용솔루션인 센차터치와 오픈소스인 제이쿼리모바일이 현재 모바일시장에서 가장 대표적인 HTML5 자바스크립트 프레임워크라고 평했다. 2가지 기술에 장단점이 있어 프로젝트 상황에 따라 선택적으로 활용하게 된다고 덧붙였다. 어도비의 폰갭은 하이브리드앱 개발 프레임워크에 속하며 역시 종종 도입된다고 언급했다."+ 
		
		"■모바일오피스-스마트워크로 기업시장에 확산되는 웹기술 "+
		
		"하이브리드앱 개발기술과 UI프레임워크는 HTML5 표준과 자바스크립트같은 웹기술로 SW를 만들 수 있게 해주는 도구지만 현업에서는 용도가 구별된다. "+
		
		"우선 제이쿼리와 센차터치 등 UI프레임워크는 SW사용자가 접하는 단말기 표시화면과 반응체계 등 UI 개발을 간편케 해주는 용도다. 개인 개발자와 중소규모 앱개발사가 모바일앱을 만들면서 여러 단말기에 맞춰 UI를 개발할 수 있게 돕는 기술로 쓰이기 시작했다. "+
		
		"국내 기업시장으로의 도입이 표면화된 건 최근이다. 지난해부터 미래웹기술연구소는 센차와 손잡고 그 기술 공인교육을 진행중이다. 모바일솔루션업체 인크로스도 제이쿼리파운데이션과 손잡고 제이쿼리 개발자 생태계 확산에 나서며 연계된 웹앱개발 솔루션 '다빈치스튜디오'도 선보였다. 전문 기술인력과 잘 정비된 툴을 요구하는 시장수요에 대응하는 차원으로 이해된다."+ 
		
		"그리고 하이브리드앱 기술은 상이한 단말 운영체제(OS)나 단말 플랫폼 등에 한 번에 대응하는 SW개발을 지원한다. 어도비가 폰갭을, KTH가 앱스프레소를 들고 저변확대에 나섰다. "+
		
		"하이브리드앱 기술은 지난 2011년부터 관심을 모은 모바일 전사 앱플랫폼(MEAP)이라 불리는 기업용 솔루션의 장점과 일부 겹치는 것처럼 비치기도 한다. 하지만 실제로 2가지 기술은 상호보완적이다. MEAP 솔루션에는 전통적인 애플리케이션수명주기(ALM) 관점의 역할이 더 크게 요구된다. 기업내 SW개발조직이 모바일앱 개발을 기존 솔루션 지원처럼 체계적으로 맡을 때 쓰이는 것이다."+ 
		
		"■같은 듯 다른 하이브리드앱 개발 대응전략 "+
		
		"당장 하이브리드앱 개발 기술의 실사용이 아주 많은 상황이라고 단정하긴 어려울 수도 있다. 기술 수요에 대해 3사가 인지하는 온도차를 보인다. 하지만 새해 HTML5와 자바스크립트 기술을 활용하는 웹기반 프레임워크 도입이 산업계 프로젝트에 늘어날 것이란 전망은 맥을 같이 한다. 자체 MEAP 솔루션과 외부 하이브리드앱 개발기술의 접목을 시도하는 노력도 진행형이다. "+
		
		"SK C&C는 고객들의 문의가운데 자사 '넥스코어모바일플랫폼(NMP)'과의 호환성 측면에 대한 질문이 적잖다고 밝혔다. 실제 도입환경에선 NMP의 라이브러리와 오픈소스 기술 혼용사례가 많고 개발조직내 경험에 따라서 상용 솔루션도 쓰인다고 설명했다. 향후 오픈소스 활용이 늘고 곧 데스크톱 웹앱 영역에서도 HTML5 프레임워크 활용이 주류를 형성할 것이라고 전망했다. "+
		
		"삼성SDS도 이런 기술 도입은 일시적 현상이 아니라 더 늘어난다는 예상을 내놨다. 모바일 환경에서 여전히 제조사별 OS와 플랫폼간 특성차 때문이다. 향후 윈도폰 등 신규OS를 채택한 단말기 출시도 줄을 이을 전망이고 같은 안드로이드OS도 제조사별 구동환경이 조금씩 다른 상황이라는 근거를 들었다. 다만 자체 기술개발이나 향후 대응계획은 구체적으로 언급하지 않았다."+
		
		"LG CNS 진단은 비교적 구체적이다. 그에 따르면 HTML5가 표준화될 때까지 향후 2~3년간 하이브리드앱 개발 프레임워크에 대한 수요가 이어지다, 일부 사라지는 기술도 나타난다. 업계엔 순수하게 HTML5를 지원하는 프레임워크만 남는다. 회사는 이에 대비해 오픈소스와 상용솔루션 활용과 더불어 자체 UI플랫폼 '디브온M스크린'과 하이브리드앱 플랫폼 'MXP'솔루션 개발에 주력했다고 밝혔다."+
		
		"개인 개발자와 중소규모 벤처업체들의 웹기술 활용이 주로 B2C 시장을 겨냥한 모바일 플랫폼 대응에 그쳤다면, 이같은 주요 IT서비스업체들의 전략은 그 주 고객층인 대규모 조직들의 PC기반의 전통적 업무환경과 만나는 스마트폰, 태블릿간의 연계성 요구에 따른 것으로 이해된다."+
		
		"모바일과 노트북 및 데스크톱을 넘나드는 환경에서 다양한 사용자 환경과 단말기 특성차를 최소화하는 해법으로 웹표준 기술과 그 활용을 도와주는 개발플랫폼의 중요성이 점차 강조될 전망이다. 업계에 따르면 삼성SDS와 LG CNS가 사용중인 센차터치와 ExtJS 유료 버전이 마이크로소프트(MS) 윈도폰과 삼성 타이젠을 지원할 가능성도 있는 것으로 알려졌다."+
		
		"Copyright ⓒ 2012 CBS Interactive Inc.";
		
		newsList.add(new NewsClass(str));//arratList에 추가가 되어있음 NewsClass n에 저장된 것을 가져온다.
		
	}
		
}

​

​

2.NewsClass

public class NewsClass {

String news;

public NewsClass() {
}

public NewsClass(String n) {

this.news=n;

}
}
//1.데이터 클래스 객체를 만들어 놓는다 (dc.newsList.get.(0).news) 데이터클래스에 들어있는 뉴스리스트에서 0번방에서 get꺼내서 뉴스를 연다

3.MainClass

import java.util.ArrayList;
public class MainClass {//String에 대해 자세히 들어가
public static void main(String[] args) {
/* 문제 1. 위의 str 데이터 중 "HTML5"과 "하이브리드앱"라는 단어가 몇번 노출되는 지

노출 횟수를 resultNum이라는 배열명으로 저장하여 출력

​

1.검색키워드 변수에 저장 String keyword1="HTML5";

String keyword2="하이브리드앱";

2.전체 데이터를 띄어쓰기("")기준으로 분리

String[] split = dc.newsList.get(0).news.split("");

2-1. dc: DataClass dc = new DataClass()'

2-2. newClass : ArrayList<NewsClass> newList = new ArratList<NewsList>();

2-3. get(0) : ArrayList 내의 데이터를 추출하는 메소드(현재 add()된 객체가 1개이므로)

2-4 news: NewsClass 객체의 멤버 변수(즉 실제 기사인 문자열로 저장)

2-5. split("") : 전체 기사에 단어들이 띄어쓰기로 구분 되어 있으므로

2-6 String[] split = : String 의 split()는 반환 형태가 String 배열이므로

3. 키워드를 찾을 때마다 1씩 증가 시킬 배열 선언,키워드가 두 개이므로 배열의 크기(길이)를 두개로 설정 단 1씩 증가해야하므로 초기값을 0으로 설정

resultNum[0]:"HTML5"을 찾을 때마다 1씩증가(resultNum[0]++)==(resultNum[0]=resultNum[0]+1;)

resultNum[1]:"하이브리드앱"을 찾을 때마다 1씩증가

int[] resultNum={0,0};

4.분리괸 단어들과 키워드를 비교검색

for(int i=0;i<Spilit.length;i++{

if(split[i].contains(keyword1)){//"HTML5"

resultNum[0]++;

}

}

for(int i=0;i<Spilit.length;i++{

if(split[i].contains(keyword2)){//"하이브리드앱"

resultNum[1]++;

}

}

5.검색결과 출력

syso(keyword1+":"+resultNum[0]);

syso(keyword2+":"+resultNum[1]);*/
DataClass dc= new DataClass();
String keyword1="HTML5";

String keyword2="하이브리드앱";

String[] split = dc.newsList.get(0).news.split(" ");
int[] resultNum=new int[2];

resultNum[0]=0;

resultNum[1]=0;
//int[] resultNum={0,0};

for(int i=0;i<split.length;i++){

if(split[i].contains(keyword1)){//"HTML5"

resultNum[0]++;

}
if(split[i].contains(keyword2)){//"HTML5"

resultNum[1]++;

}

}

System.out.println(keyword1+":"+resultNum[0]);

System.out.println(keyword2+":"+resultNum[1]);
//문제 2. 위의 str 데이터를 모두 역순(space기준)으로 

// resultStr 변수저장하여 출력

//오름차순 내림차순 할때 이것을 쓴다.
String[] resultStr = new String[split.length];

int index = split.length-1;
for(int i=0;i<resultStr.length;i++){

resultStr[i]=split[index];

index--;

}

//역순 출력

for(int i=0;i<resultStr.length;i++){

System.out.println(resultStr[i]);

}
}
}

1.DataClass

package com.ohj.array;
import java.util.ArrayList;
public class DataClass {

ArrayList<EmployeeClass> empArr = new ArrayList<EmployeeClass>();//임포트 해줘야 함

	public DataClass(){

		empArr.add(new EmployeeClass(1001, "송민호", "사원", "2007-03-01", 300, 0, 20));
		empArr.add(new EmployeeClass(1002, "이영민", "대리", "2007-04-02", 250, 80, 30));
		empArr.add(new EmployeeClass(1003, "김민우", "과장", "2005-02-10", 500, 100, 30));
		empArr.add(new EmployeeClass(1004, "장희재", "부장", "2003-09-02", 600, 0, 20));
		empArr.add(new EmployeeClass(1005, "오종호", "과장", "2005-04-07", 450, 200, 30));
		empArr.add(new EmployeeClass(1006, "최형우", "부장", "2003-10-09", 480, 0, 30));
		empArr.add(new EmployeeClass(1007, "윤가람", "부장", "2004-01-08", 520, 0, 10));
		empArr.add(new EmployeeClass());

	}

}

 

2.EmployeeClass

package com.ohj.array;
public class EmployeeClass {

	int empNo=0;
	String eName ="";
	String job="";
	String hireDate="";
	int sale=0;
	int commission=0;
	int deptNo=0;
	
	public EmployeeClass(){//기본 생성자
	}
//모든데이터를 전달받는 생성자

	public EmployeeClass(int e,String n,String j,String h,int s,int c,int f,int d){
	this.empNo=e;
	this.eName=n;
	this.job=j;
	this.hireDate=h;
	this.sale=s;
	this.commission=c;
	this.deptNo=d;
	}

//부서 식별 번호가 없는 데이터를 전달받는 생성자

	public EmployeeClass(int e,String n,String j,String h,int s,int c,int f){
	
	this.empNo=e;
	this.eName=n;
	this.job=j;
	this.hireDate=h;
	this.sale=s;
	this.commission=c;

	}
}

 

3.InfoClass

package com.ohj.array;

	public class InfoClass {//클래스 선언 부에는 private를 절대 붙이지 않는다

		private String no;//private 내 클래스 내부에서만 사용하겠다.외부에서는 변수 값을 사용 할 수 없다.
		int age = 0;

		private InfoClass(){//이곳에 private를 적용하면 main에 객체를 생성하지 못한다.
		}

		public InfoClass(String string) {

			this.no=string;
			this.ageOperator();
		}

		private void ageOperator(){

			//ic.no = "881234-4345678";
			String[] s=this.no.split("-");// -를 기준으로 둘로 쪼갬
			//s[0] :"881234"//s[1]"2345678"이 들어가게 된다.
			String year=s[0].substring(0,2);//뽑아내려는 숫자 s[0]에는 0=8/1=8로 순서대로 들어가 있다. 시작 인덱스번호를 가져온다.(0부터 2번까지의 숫자를 가져온다)
			System.out.println(year);
			String genderNo=s[1].substring(0,1);
			System.out.println(genderNo);

			if(genderNo.equals("1")||genderNo.equals("2")){// 젠더가 1이거나 2이면
				this. age = 2020-(1900+Integer.parseInt(year));
				System.out.println(this.age);//문자열을 숫자로 바꾸는 메소드
			}else{
				this. age = 2000+Integer.parseInt(year);//주민등록번호를 나이를 구하는 법
				if(age>2020){	
					System.out.println("연도를 잘못 입력하셨습니다.");
				}else{
					this.age=2020-this.age;
				}
			}
		}
	}

 

4.TestClass

package com.ohj.array;


public class TestClass {

	int a =10;
	final float PI=3.14f;// 최종값이라고 선언했기 때문에 밑에서 바꿀 수 없다.(final)
	public TestClass(){
		this.a=100;
		//this.PI=3.13195f 상수 값은 변경불가
		float f2 = this.PI;// 꺼내 쓸 수는 있다
	}
}

 

5.MainClass

package com.ohj.array;

import java.util.ArrayList;

public class MainClass {
		public static void main(String[] args) {
			DataClass dc = new DataClass();
			for(int i =0;i<dc.empArr.size();i++){
				System.out.println(dc.empArr.get(i).eName);
			}
//InfoClass ic = new InfoClass("181234-3345678");
//System.out.println(ic.age);
//TestClass tc = new TestClass();

//ArrayList<TestClass> a = new ArrayList<TestClass>();//예약을 해놨기 때문에 따로 설정해줄 필요가 없음
//a.add(tc);
//int s = a.size();//방개수를 아는 방법
//System.out.println(s);
//Object t = a.get(0);
//TestClass t2 = (TestClass)a.get(0);
		}

}

/*​

배열 : 주로 여러개의 값을 저장 할때

배열의 특징 : 동일한 데이터 타입만 저장 가능

초기 인덱스(방)의 개수는 수정 불가능

초기에 인덱스(방)의 갯수를 설정

ex) TestClass[] tArr= new TestClass[3];

​

ArrayList : 외부클래스로 존재(ArrayList.Class)

이것을 사용하려면 반드시 import가 필요(import java.util.ArrayList)

내부 메소드를 통하여 갯수가 정해지고 수정가능, 따라서 객체생성이 필수(new ArrayList())

ArrayList는 주로 객체들을 저장할 때 사용

타양한 타입의 데이터를 한번에 보관 할 수있다(오브젝트 파일로 추가되기 때문에 가능하다)

ex)ArrayList a = new ArrayList();

a.add(new TestClass);

a.add(true);

a.add(1123);

a.add(12.5);

a.add('abcd);

단 저장된 값은 오브젝트 타입으로 저장된다.

따라서 데이터를 사용 할 경우 원래 타입으로 변환해야 한다.

예 TestClass t =(TestClass)a.get(0);

​

만약 동일한 타입의 객체들을 저장할 경우에는 미리 타입을 예약한다.(배열과 ArrayList의 차이점)

ex) ArrayList<TestClass> a = new ArrayList<TestClass>();

a.add(new TestClass());//테스트 클래스 타입으로 저장 됨.

TestClass tt = a.get(0);//테이터 타입 변환 필요 없음.

​

arrayList의 주요 메소드

1. add; // 맨 마지막 위치에 데이터 추가

2. get(인덱스번호);//지정한 위치의 데이터 추출

3. remove(인덱스번호)//지정한 위치의 데이터를 제거하고 그 데이터를 반환.

4. size() // 데이터의 갯수를 반환
​

ArrayList에 데이터를 추가하거나 삭제할 경우, size()는 자동으로 바뀐다.

ex) ArrayList<TestClass> a= new ArrayList<TestClass>();

a.add(new testClass); // Size()=>1

a.add(new testClass); // Size()=>2

a.add(new testClass); // Size()=>3

a.remove(0); //size()=>2

이 때 제거된 데이터 위치로 다른 데이터들이 한칸씩 이동된다.

*/

 

1.employee_ex

1.InfoClass

package com.ohj.emp;

//public 접근제한자
//default : 접근제한자
public class InfoClass {

	//멤버변수, 속성, 전역변수
	int empNo; // 사원 식별번호
	String eName; // 사원이름
	String job; //직책
	String hireData; //입사일
	int sale; // 급여
	int commision;//성과급
	int deptNo;//부서식별번호
	
	public InfoClass(){ //기본생성자
	}

					//1001, "송민호", "사원", "2007-03-01", 300, 0, 20
	//외부로부터 데이터를 전달받는 생성자(식별번호, 사원이름, 직책, 입사일, 급여, 성과급, 부서식별번호의 변수를 잡아줌
	public InfoClass(int e,String en,String j,String h,int s,int c,int d){

		this.empNo=e; //this는 클래스 자기 자신을 말한다.
		this.eName=en;
		this.job=j;
		this.hireData=h;
		this.sale=s;
		this.commision=c;
		this.deptNo=d;
	}
}

 

2.DateClass

package com.ohj.emp;

public class DateClass {

	InfoClass[] ic =new InfoClass[14];
	public DateClass(){//외부로 부터 전달 받은 값을 나타냄

		//식별번호, 사원이름, 직책, 입사일, 급여, 성과급, 부서식별번호
		ic[0] = new InfoClass(1001, "송민호", "사원", "2007-03-01", 300, 0, 20);
		ic[1] = new InfoClass(1002, "이영민", "대리", "2007-04-02", 250, 80, 30);
		ic[2] = new InfoClass(1003, "김민우", "과장", "2005-02-10", 500, 100, 30);
		ic[3] = new InfoClass(1004, "장희재", "부장", "2003-09-02", 600, 0, 20);
		ic[4] = new InfoClass(1005, "오종호", "과장", "2005-04-07", 450, 200, 30);
		ic[5] = new InfoClass(1006, "최형우", "부장", "2003-10-09", 480, 0, 30);
		ic[6] = new InfoClass(1007, "윤가람", "부장", "2004-01-08", 520, 0, 10);
		ic[7] = new InfoClass(1008, "이명희", "차장", "2004-03-08", 500, 0, 30);
		ic[8] = new InfoClass(1009, "송종영", "사장", "1996-10-04",1000, 0, 20);
		ic[9] = new InfoClass(1010, "황영호", "과장", "2005-04-07", 500, 0, 10);
		ic[10] = new InfoClass(1011, "김현정", "사원", "2007-03-01", 280, 0, 30);
		ic[11] = new InfoClass(1012, "강정혜", "사원", "2007-08-09", 300, 0, 20);
		ic[12] = new InfoClass(1013, "박민훈", "부장", "2002-10-09", 560, 0, 20);
		ic[13] = new InfoClass(1014, "조인성", "사원", "2007-11-09", 250, 0, 10);

	}

}

3.OperClass

package com.ohj.emp;

public class OperClass {//매소드를 저장하는 클래스
	
	public OperClass(){ // 기본생성자
	}

	public void avgHireDate(InfoClass[] ic){//평균을 구하는 메소드

		int sum=0; String hd; String[] s;

		for(int i=0;i<ic.length;i++){

			//String hd =dc.ic[0].hireData;
			//System.out.println(hd);
			hd =ic[i].hireData;
			//String[]s=hd.split("-");// 쪼개는 것 "2007-03-01"-> "2007","03","01"
			//System.out.println(s[0]);
			//System.out.println(s[1]);
			//System.out.println(s[2]);
			s=hd.split("-");
			//System.out.println(2020+s[0]);//숫자+문자=문자열
			//int y = Integer.parseInt(s[0]);//문자열로 되어있는 숫자를 숫자로 바꿔주는 것 ex) "2007"=>2007
			//System.out.println(2020-y); //숫자와 문자는 -를 할 수 없지만 문자를 숫자로 바꾸면 -를 할 수 있다.
			sum = sum+(2020-Integer.parseInt(s[0]));
		}//for ED

		//평균 재직연수를 구하라
		double avg = sum/(ic.length*1.0);
		System.out.println(avg);
	}
}

4. MainClass

package com.ohj.emp;
public class MainClass {

	   public static void main(String[] args) {

	      DateClass dc = new DateClass();
	      //OperClass oc = new OperClass(); // 1. 객체 생성해주고
	      //oc.avgHireData(dc.ic); // 2. operclass에 선언해놓은것을 여기로 불러옴
	                        // 주의할점은 main에서 일단 코드를 먼저 만들어 놓고 그 다음에
	                        // operclass를 만들어서 옮기는 식으로 해야 한다.

	      // System.out.println(dc.ic[13].commission); -->데이터 확인용
	      // 진짜 데이터가 확인이 되는지 먼저 점검 한 후에 코딩을 시작해야 한다.

	      
	      // 2007년에 입사한 사람 (내가 해결한 코드)
	      
	      String hd;
	      String[] s;
	      int year;
	      int year2;
	      
	      for (int i = 0; i < dc.ic.length; i++) {
	         hd = dc.ic[i].hireData;
	         s = hd.split("-");
	         int y=Integer.parseInt(s[0]);
	         year=y;
	         year2=1995;
	         
	         year2=y+1;
	         
	         if(y<=year2){
	            System.out.println(y+"년 입사자 : "+dc.ic[i].eName);
	         }else if(year2<2008){
	            System.out.println("연산 종료");
	         }
	         /*
	          if(y==2005){
	            System.out.println("2005 입사자 : "+dc.ic[i].eName);
	         }
	         if(y==2004){
	            System.out.println("2004 입사자 : "+dc.ic[i].eName);
	         }
	         if(y==2003){
	            System.out.println("2003 입사자 : "+dc.ic[i].eName);
	         }
	         if(y==2002){
	            System.out.println("2002 입사자 : "+dc.ic[i].eName);
	         }
	         if(y==1996){
	            System.out.println("1996 입사자 : "+dc.ic[i].eName);
	         }
	         */
	         
	      }
	      
	      
	      /*
	      int dn;
	      String en;
	      
	      
	      for(int i=0; i<dc.ic.length;i++){
	         dn=dc.ic[i].deptNo;
	         if(dn==30){
	            System.out.println("30 부서 인원 : "+dc.ic[i].eName);
	         }
	      }
	      
	      for(int i=0; i<dc.ic.length;i++){
	         en=dc.ic[i].job;
	         if(en.equals("과장")){
	            System.out.println("과장 직급자 : "+dc.ic[i].eName);
	         }
	      }
	      */
	   }
	}

2.member

1.InfoClass

package com.ohj.member;

public class InfoClass {
	String name; //이름
	String joinDate;//가입일
	String lastVisitDate;//최종방문일
	int numVisit;//방문횟수
	String gender;//성별
	String age;//연령대

	public InfoClass(){//기본생성자
	}

	public InfoClass(String n,String j,String last,int nv, String g,String a){

		this.name=n;
		this.joinDate=j;
		this.lastVisitDate=last;
		this.numVisit=nv;
		this.gender=g;
		this.age=a;

	}
}

2.DateClass

package com.ohj.member;

public class DateClass {

	InfoClass[] ic=new InfoClass[98];// 쪼개진 데이타

		public DateClass(){//외부로 부터 전달 받은 값을 나타냄

			String[] member=new String[98];//원본 데이타(raw data) 생성자가 끝나면 소멸 시켜줘야하기 때문에

			member[0]="임재,20190509,20190510,8,남,30대후반";

			member[1]="성열,20190509,20190510,1,남,30대중반";
			member[2]="천재,20190509,20190510,3,남,30대초반";
			member[3]="현수,20190509,20190509,1,남,20대후반";
			member[4]="진우,20190509,20190510,2,남,30대초반";
			member[5]="영주,20190509,20190510,2,비공개,비공개";
			member[6]="종화,20190509,20190509,0,남,20대후반";
			member[7]="윤정,20190509,20190510,3,비공개,비공개";
			member[8]="종호,20190509,20190510,3,남,20대중반";
member[9]="동현,20190509,20190510,5,남,20대중반";
member[10]="경래,20190509,20190510,1,남,20대후반";
member[11]="상일,20190509,20190510,6,남,30대후반";
member[12]="재형,20190509,20190510,2,남,30대중반";
member[13]="경민,20190509,20190510,4,남,20대중반";
member[14]="경애,20190507,20190507,0,비공개,비공개";
member[15]="동현,20190507,20190507,0,남,40대초반";
member[16]="종인,20190507,20190507,0,남,40대중반";
member[17]="은혁,20190426,20190504,3,남,30대후반";
member[18]="은정,20190426,20190426,1,여,30대중반";
member[19]="정은,20190426,20190426,0,여,40대후반";
member[20]="진수,20190426,20190426,1,비공개,비공개";
member[21]="은석,20190426,20190504,2,남,50대초반";
member[22]="수진,20190426,20190426,0,여,30대초반";
member[23]="비공개,20190426,20190426,1,비공개,비공개";
member[24]="재희,20190426,20190426,2,여,40대후반";
member[25]="의환,20190426,20190426,1,남,20대후반";
member[26]="관현,20190425,20190425,0,남,40대초반";
member[27]="성욱,20190425,20190426,3,남,30대후반";
member[28]="의열,20190425,20190426,5,여,30대후반";
member[29]="가영,20190425,20190426,1,여,30대중반";
member[30]="현수,20190425,20190505,5,남,40대초반";
member[31]="기대,20190425,20190426,2,남,40대중반";
member[32]="근준,20190425,20190425,0,남,20대후반";
member[33]="성준,20190425,20190426,3,남,20대후반";
member[34]="종오,20190425,20190426,3,남,50대중반";
member[35]="병욱,20190425,20190426,5,남,30대초반";
member[36]="서경,20190425,20190426,2,여,30대후반";
member[37]="비공개,20190425,20190426,1,비공개,비공개";
member[38]="관순,20190425,20190426,3,여,30대초반";
member[39]="충현,20190425,20190426,1,남,30대초반";
member[40]="시형,20190425,20190426,1,남,30대후반";
member[41]="정윤,20190425,20190426,3,여,30대중반";
member[42]="호섭,20190425,20190426,1,남,40대후반";
member[43]="상민,20190425,20190426,1,남,30대중반";
member[44]="수영,20190425,20190426,1,여,30대중반";
member[45]="경훈,20190425,20190426,1,비공개,비공개";
member[46]="남현,20190218,20190510,10,남,30대후반";
member[47]="두근,20190218,20190218,0,남,20대중반";
member[48]="윤정,20181022,20190114,18,여,20대후반";
member[49]="현민,20181022,20190115,31,남,20대후반";
member[50]="철우,20181011,20181024,7,남,30대초반";
member[51]="동주,20181011,20190324,75,남,20대후반";
member[52]="승민,20181002,20181208,48,남,20대중반";
member[53]="근학,20180927,20190129,45,남,20대후반";
member[54]="수민,20180927,20190412,50,남,20대후반";
member[55]="형석,20180927,20190418,7,남,20대후반";
member[56]="명재,20180927,20190118,41,남,30대초반";
member[57]="병호,20180927,20181008,3,남,50대초반";
member[58]="민태,20180927,20190208,49,남,20대중반";
member[59]="신혜,20180927,20190120,49,여,20대후반";
member[60]="성권,20180927,20180928,5,남,20대후반";
member[61]="영봉,20180927,20181217,45,남,20대후반";
member[62]="성구,20180927,20190123,47,남,20대후반";
member[63]="부욱,20180927,20181119,24,남,30대초반";
member[64]="주현,20180712,20180712,2,여,20대초반";
member[65]="다희,20180626,20180626,1,여,20대중반";
member[66]="다을,20180625,20180807,40,여,20대중반";
member[67]="대희,20180625,20181217,57,남,20대중반";
member[68]="자훈,20180625,20190305,47,여,20대중반";
member[69]="지원,20180625,20180727,38,여,20대중반";
member[70]="재학,20180625,20181101,45,남,20대중반";
member[71]="지혜,20180625,20190410,89,여,20대중반";
member[72]="중훈,20180625,20180727,31,남,20대중반";
member[73]="한솔,20180625,20181205,62,여,20대중반";
member[74]="예림,20180625,20181227,28,여,20대중반";
member[75]="수현,20180625,20190210,17,여,20대중반";
member[76]="소현,20180625,20180727,63,여,20대중반";
member[77]="해성,20180625,20180726,38,남,20대후반";
member[78]="진안,20180625,20180727,45,남,20대후반";
member[79]="지원,20180625,20180726,17,여,20대초반";
member[80]="경희,20180625,20190424,27,여,20대중반";
member[81]="도형,20180625,20190504,72,남,20대후반";
member[82]="태수,20180625,20180808,70,남,20대중반";
member[83]="가은,20180625,20180807,42,여,20대중반";
member[84]="힘찬,20180625,20180727,33,남,20대중반";
member[85]="상협,20180625,20181025,43,남,20대중반";
member[86]="용선,20180625,20190102,66,남,20대중반";
member[87]="승현,20180625,20181206,50,남,20대중반";
member[88]="지원,20180625,20180723,16,여,20대중반";
member[89]="한진,20180419,20180719,47,남,20대후반";
member[90]="유찬,20180419,20181017,71,남,20대후반";
member[91]="기태,20180419,20180813,39,남,20대후반";
member[92]="지훈,20180419,20190209,34,남,20대후반";
member[93]="봉기,20180419,20181002,71,남,20대후반";
member[94]="정규,20180419,20180627,39,남,20대초반";
member[95]="상준,20180419,20181228,95,남,20대후반";
member[96]="유림,20180419,20180701,53,여,20대후반";
member[97]="소영,20180419,20180615,44,여,20대후반";

	for(int i=0; i<member.length;i++){

		String[] s =member[0].split(",");// 띄어쓰기 했으면 쉼표 옆에 띄어쓰기를 해줘야함
		int n =Integer.parseInt(s[3]);

		ic[0]=new InfoClass(s[0],s[1],s[2],n,s[4],s[5]);

		}
	}
}

3.MainClass

package com.ohj.member;

import java.util.ArrayList;//외부클래스를 가져오는 것 JRE

import java.util.Random;
public class MainClass {
	
	public static void main(String[] args){
		//랜덤코드 
		ArrayList lottoNumber = new ArrayList();

		for(int i=0; i<46;i++){
			lottoNumber.add(i);
		}
		
		Random rnd = new Random();//임의의 정수를 위한 객체

		ArrayList sixNumber=new ArrayList();//임의의 수 6개 저장

		for(int i=0; i<6;i++){//중복되지않는 임의의 수 6개 추출
			int index = rnd.nextInt(lottoNumber.size());
			Object n = lottoNumber.remove(index);
			sixNumber.add(n);

		}
		
		for(int i=0; i<sixNumber.size();i++){//추출된 6개 숫자 출력
			System.out.println(sixNumber.get(i)+",");
		}

////////////////////////////////////////////////////////////
/*ArrayList lottoNumber = new ArrayList();

	for(int i=0; i<46;i++){
	lottoNumber.add(i);
	}


//lottNember[0]=>1 0번 방에는 1번
//lottNember[1]=>2 1번 방에는 2번
//lottNember[44]=>45 44번 방에는 45번


	Random rnd = new Random();
	int index = rnd.nextInt(lottoNumber.size());//-> 사이즈는 45개 

//lottoNumber.size()->45
//rnd.nextInt(lottoNumber.size())=> 0~44


Object n = lottoNumber.remove(index);//중복값은 get이 아니고 remove로 값을 제거

System.out.println(n);
System.out.println(lottoNumber.size());


index = rnd.nextInt(lottoNumber.size());

n = lottoNumber.remove(index);//중복값은 get이 아니고 remove로 값을 제거

System.out.println(n);
System.out.println(lottoNumber.size());*/
}

}

':: IT > JAVA' 카테고리의 다른 글

20200107 메소드, String  (0) 2020.03.24
20200106 JAVA arraylist 배열  (0) 2020.03.23
20200102 JAVA Class(클래스, 메소드 기초, 배열)  (0) 2020.03.22
20191231 if문, 반복문(for문), 메소드  (0) 2020.03.18
20191230 JAVA 시작  (0) 2020.03.18

1.Books_ex

 

1. DateClass

 

package com.ohj.books;

public class DateClass {//InfoClass 객체들 저장
	InfoClass[] ic= new InfoClass[6];// 책 정보들 저장

	public DateClass (){

		ic[0]=new InfoClass("이것이 자바자",30000,"신용권","한빛미디어");//ic에 책 정보들 저장
		//System.out.println(ic[0].press);//데이타클래스에서 잘 입력되었는지 확인1번쨰//확인코드
        
		ic[1] = new InfoClass("파이선",25000,"홍길동","길벗");
		//System.out.println(ic[1].press);////확인코드
        
		ic[2] = new InfoClass("정보처리기사",35000,"기사","길벗");
		ic[3] = new InfoClass("HTML",15000,"꾸미기","한빛출판사");
		ic[4] = new InfoClass("JSP&Serlet",23000,"열혈","길벗출판사");
		ic[5] = new InfoClass("오라클",21000,"oracle","A길벗출판사");

		//System.out.println("DataClass 생성자 작업 완료");//확인코드

	}
}

 

2. InfoClass

package com.ohj.books;

public class InfoClass {//책제목,가격,저자,출판사 정보 4가지 정보

	String title; //제목
	int price; //가격
	String outhor; //저자
	String press; //출판사

	public InfoClass(){//기본 생성자
	}

	//외부로부터 값을 전달받는 생성자
	//("이것이 자바자"(String),30000(int),"신용권"(String),"한빛미디어"(String));//ic에 책 정보들 저장

		public InfoClass(String t,int p, String a,String pr){
			title=t;
			price=p;
			outhor=a;
			press=pr;
			//System.out.println("InfoClass 생성자 작업 완료");//확인코드
		}
}//InfoClass End

3.MainClass

package com.ohj.books;

public class MainClass {
	public static void main(String[] args) {

		DateClass dc = new DateClass();//데이타클래스에서 잘 입력되었는지 확인2번째

		//dc는 두 책의 정보를 보유(ic배열)
		//int sum = dc.ic[0].price+dc.ic[1].price;//두 책의 가격을 합하기

		int sum=0;//전체 책 값구하기
		for(int i=0;i<dc.ic.length;i++){
			sum= sum+dc.ic[i].price;
		}

		System.out.println(sum);

		for(int i=0; i<dc.ic.length;i++){// 전체 도서 정보중에서 출판사가 길벗인 책의 제목을 출력
			if(dc.ic[i].press.equals("길벗")){//길벗이라는 글자가 정확히 포함된 자료만 가지고 온다.
				System.out.println(dc.ic[i].title);
			}
		}

		for(int i=0; i<dc.ic.length;i++){// 전체 도서 정보중에서 출판사가 길벗인 책의 제목을 출력
			if(dc.ic[i].press.contains("길벗")){//길벗이라는 글자를 포함하는 자료를 가지고 온다.(contains)
				System.out.println(dc.ic[i].title);
			}
		}
	}
}

2.Class_ex

1. TestClass

package com.ohj.classes;
public class TestClass {
	// 사람의 정보를 넣어주는 클래스
	// 전체 데이터를 보관하는 배열
	InfoClass[] ic = new InfoClass[10];// 10개의 방을 만든다.
	
	public TestClass() {
	ic[0]=new InfoClass( "A" , 28 , "KR" , 1 , "정규");
	ic[1]=new InfoClass( "B" , 31 , "JP" , 3 , "비정규");
	ic[2]=new InfoClass( "C" , 28 , "JP" , 1 , "정규");
	ic[3]=new InfoClass( "D" , 29 , "KR" , 2 , "정규");
	ic[4]=new InfoClass( "E" , 28 , "US" , 2 , "비정규");
	ic[5]=new InfoClass( "F" , 32 , "US" , 5 , "정규");
	ic[6]=new InfoClass( "G" , 28 , "KR" , 1 , "비정규");
	ic[7]=new InfoClass( "H" , 29 , "EU" , 2 , "비정규");
	ic[8]=new InfoClass( "I" , 33 , "EU" , 6 , "정규");
	ic[9]=new InfoClass( "J" , 28 , "KR" , 1 , "비정규");

	// InfoClass ic2 = new InfoClass( "A",28, "KR", 1, "정규");
	// 생성자 내부에서 불러옴(info에서 가져옴)salaryOperator();
	} 

///////////////////////밖에 선언 하기!!!!!!!!///////////////////////////////////////////////////////////

	public int[] total() {
	// 전 사원의 총 수입 배열(총 수입 = 총 연봉+총 생활비)
	int[] totalArray = new int[10];
	for (int i = 0; i < ic.length; i++) {// 전사원
		// 근무 (재직)기간 내의 총 생활비 변수(월 생활비*12*재직년수)
		int costOfliving = 0;
		// 근무 (재직)기간 내의 총 연봉 변수(연봉*재직년수)

		int total = 0;
		total = ic[i].salary * ic[i].years;

		if (ic[i].local.equals("US")) {
			costOfliving = 70 * 12 * ic[i].years;
		}
		if (ic[i].local.equals("JP")) {
			costOfliving = 50 * 12 * ic[i].years;
		}
		if (ic[i].local.equals("EU")) {
			costOfliving = 100 * 12 * ic[i].years;
		}
	
		totalArray[i] = total + costOfliving;
		}//for end
	
	return totalArray;
	
		}
}// TestClass END

2.InfoClass

package com.ohj.classes;

public class InfoClass {

	// 사람의 정보를 보관하는 클래스
	String name; 
	int age; 
	int salary;
	String local;
	int years;
	String worker;
	
	// 동일한 이름의 생성자, 메서드를 만들어 사용라는 기법
	//=> '오버로딩'라 부른다.
	// *주의 할 사항 : 메서드의 매개변수 타입이 달라야 하고, 또는 매개변수의 갯수가 달라야한다.

	public InfoClass(){//기본 생성자
	}

	//오버로딩 생성자

	// "A",28 , , "KR" , 1 , "정규"

	public InfoClass(String n, int a, String lo, int y, String j){//값이 들어 오는 순서대로 만들어줘야함. 정보내용을 입력.
		name = n;
		age = a;
		local=lo;
		years = y;
		worker = j;//각각의 변수에 대입 될 수 있도록 등록한다.
		salaryOperator();//연봉 계산하는 메소드 호출
	}

	//연봉 계산하는 메서드
	public void salaryOperator(){ 
		if(worker.equals("정규")){
			salary=250*13;//정규직일 경우
		}else{
			salary =200*13; //비정규직일 경우
		}
	}
}

3.MainClass

package com.ohj.classes;

public class MainClass {
	public static void main(String[] args) {
		//각 사람이 회사에 근무하면서 받을 수 있는 총 수입을 계산
		//총 수입 총연봉=연봉*재직연수/총 생활비 = 월*12*재직연수
		TestClass tc = new TestClass();//객체 선언

		int[] total = tc.total();
	
		for(int i =0; i<total.length; i++){
			System.out.println(tc.ic[i].name+"사원의 총수입:"+total[i]);
		}
	}
}

3.emp

1.EMPClass

package com.ohj.emp;

public class EMPClass { // 클래스 선언
	int[] age = { 27, 34, 28, 26, 41, 28, 42, 29, 29, 32 };
	char[] gender = { 'f', 'm', 'f', 'm', 'm', 'f', 'm', 'm', 'f', 'm' };
	int[] pay = { 460, 200, 250, 300, 300, 200, 350, 200, 400, 440 };
	String[] code = { "JP", "FR", "JP", "US", "CN", "DE", "KR", "JP", "DE", "KR" };
	/**1. 나이,성별, 급여, 나라 별 값을 배열로 선언해준다. ***/
	
	public EMPClass() { // 기본 생성자 : 생성자 이름은 클래스 이름과 같아야한다. void 같은 것을 붙이면 안된다.
		System.out.println("EMPClass 생성자 내부");
		}

// 생성자 안에 들어가면 안된다.

	public void Sum(int[] a, String str) {// 2. 1번 : 배열 형태의 값과 스트링 형태의 값을 매개변수로 받는다.
		int s = 0;
		for (int i = 0; i < a.length; i++) {
			s = s + a[i];
		}
		System.out.println(str + "의 합" + s);
	}// 섬 메소드 끝 

	public int sum_return(int[] a) {// 2번
		int s = 0;
		for (int i = 0; i < a.length; i++) {
				s = s + a[i];
			}

		return s;

	}

	public int[] test() {// 3번
		int a = 10;
		int b = 20;
		int[] r = { a, b };
		return r;
	}

	public ResultDate test2() {// 4번 test2 를 불러오려면 ResultDate test2로 불러줘야한다. 
		int a = 10;
		float b = 20;
		String s = "ABC";
		
		ResultDate rd = new ResultDate();// 클래스를 만들어줘서 가져옴

		rd.r1 = a;
		rd.r2 = b;
		rd.r3 = s;

		return rd;

	}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

	public void sum1() { // 매서드 1번 만들어지지만 실행은 되지 않는 것// 누군가 사용하고 싶다고 호출 해줘야 함
		int n = 10 + 20;
		System.out.println("합:" + n);
	}

	public int sum2() { // 매서드 2번
		int n = 10 + 20;
		return n;
	}

	public void sum3(int a, int b){ //매서드 3번
		int n = a+b;
		System.out.println("전달 받은 값의 합 :"+ n);
	}

	public double div(float f1,int a){ // 매서드 4번
		double d = f1/a;
		return d;
		}
}
// 문제 1 월급이 400 이상인 사람의 인원수
// 문제 2 성별이 여자인 사람들의 월급 합
// 문제 3 성별이 여자인 사람들의 월급 합과 평균연령
// 문제 4 독일에 근무하는 사원들의 평균 급여

2.ResultClass

package com.ohj.emp;

public class ResultDate { //3. 결과값을 받을 수 있는 변수들 선

	int r1;// 4번
	float r2;
	String r3;

	public ResultDate() {
		}

}

 

3.EMPClassMain

package com.ohj.emp;

public class EMPClassMain {
	
	public static void main (String[] args){
		EMPClass emp = new EMPClass();//타입은 이름과 같다.
		
		emp.Sum(emp.age,"나이"); //1번 : 섬 메소드 호출(매개변수값인 이엠피 에이지와 스트링값을 넣어준다.)
		emp.Sum(emp.pay,"급여");
		
		System.out.println("나이 합:"+emp.sum_return(emp.age));//2번 
		System.out.println("급여 합:"+emp.sum_return(emp.pay));

		int[] r3 = emp.test();//3번
		System.out.println(r3[0]+" "+r3[1]);

		ResultDate result = emp.test2();//4번

		System.out.println(result.r1);
		System.out.println(result.r2);
		System.out.println(result.r3);

		System.out.println(" ");
		emp.sum1();//매서드 1번 반환하지 않기 때문에(return) 변수에 결과값을 대입하여도 반환되지 않아 오류가 뜬다.
 
		int r = emp.sum2();//매서드 2번

		System.out.println(r);// r값에 입력시키고 r r값을 불러온다.
		System.out.println("결과를 바로 출력하는 방법 : "+ emp.sum2());//결과값을 바로 출력만 하고 싶을 때는 이 방법을 쓰도록 한다.

		emp.sum3(12, 13);// 매서드 3번 이 것을 이용하려면 어떤 값을 넣어줘야한다. 

		double r2 = emp.div(12.4f, 55); // 매서드 4번 

		System.out.println(r2);
		System.out.println(r+r2);// 결과값을 나중에 쓰는 예시 r과 r2의 결과값을 나중에 불러왔다.

	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////////// 
/*
 * //1번 문제 월급이 400 이상인 인원 수
 * //월급 : emp의 pay 배열을 이용
 * //400 이상 : emp.pay[0]>= 400
 * //사람의 인원 수 : int count = 0;
 * //pay배열의 전체 데이터 검색 : for(;;){}
 * //400과 비교 : if(){}
 * 
 * int count = 0;//선언
 * for(int a = 0;a<emp.pay.length;a++){//int를 선언 해주고; pay 배열의 최대값보다 작다.(큰 금액)
 * 		if(emp.pay[a] >= 400){
 * 		count=count+1;//count++; 동일
 * 		}
 * }
 * 
 * System.out.println("월급이 400 이상인 사람의 인원 수 :"+count);
 * 
 * //2번 문제 성별이 여자인 사람의 월급의 합
 * // gender배열 
 * // 성별이 여자 : emp.gender[0]=='f' char 이기 때문에
 * //월급 pay배열
 * //합 : int sum = 0;
 * //데이터 검색 : for(;;){}
 * //비교 : if(){}
 * 
 * int count2 = 0;
 * for(int b = 0; b<emp.gender.length;b++){ //배열을 돌아서 확인해라
 * 		if(emp.gender[b]=='f'){//만약 f면
 * 			count2 = count2+emp.pay[b];//그 수를 더하라
 * 			}
 * 		}
 * 
 * System.out.println("성별이 여자인 월급의 합 :"+count2);
 * 
 * // for(){} 내에서 선언 된 변수는 for문이 종료 되면 자동 소멸
 * //따라서 for문 밖에서는 사용이 불가.
 * // 특정 범위(지역)에서만 사용 되는 변수:지역변수라 호칭;
 * ex)int a = 0, int b = 0; for문 내에서만 사용하는 변수를 지정해주는 것이 좋다.
 * 
 * // 3번 문제 성별이 남자인 사람들의 월급 합과 평균연령
 * int sum2 = 0;
 * int paysum = 0;
 * int count3 = 0;
 * for(int c = 0; c<emp.gender.length; c++){
 * 		if(emp.gender[c]=='m'){
 * 			sum2 = sum2+emp.pay[c];
 * 			paysum = paysum+emp.age[c];
 * 		count3++;
 * 		}
 * }
 * double avg = sum2/(count3*1.0);//평균을 적으려면 가장 긴 타입인 double을 적어야한다.
 * System.out.println("남자의 월급의 합 : "+sum2);
 * System.out.println("남자 평균 연령은 : "+avg);
 * /*for(int d = 0; d<emp.age.length;d++){
 * 		if(emp.gender[d]=='m'){
 * 			count4 = (count4+emp.age[d])/2;
 * 		}
 * }
 * System.out.println("남자 평균 연령은 : "+ count4);
 */
	
// 문제 4 독일에 근무하는 사원들의 평균 급여
// int sum = 0;
// int paysum2 = 0;
// for(int a = 0; a < emp.code.length;a++){
// 		if(emp.code[a].equals("DE")){
// 			sum = sum+emp.pay[a];
// 			count++;
// 		}
// }
// double avg2 = sum/(count*1.0);
// System.out.println("독일 사원의 평균 급여는 : "+avg2);*/

':: IT > JAVA' 카테고리의 다른 글

20200107 메소드, String  (0) 2020.03.24
20200106 JAVA arraylist 배열  (0) 2020.03.23
20200103 JAVA (ArrayList, split, Integer.parseInt, remove)  (0) 2020.03.22
20191231 if문, 반복문(for문), 메소드  (0) 2020.03.18
20191230 JAVA 시작  (0) 2020.03.18

1. if문

package Control;

public class MainClass {
	public static void main (String [] args) {
    	// 좋은 코드는 남이 봤을 때 보기 편한 코드가 좋은 코드.(길지라도) 주석으로 내용을 적어주자.

		String[] code={"JP", "FR", "JP", "US", "CN", "DE", "KR", "JP", "DE","KR"};
		System.out.println(code[0]);
        //방을 지정하여 그 방에 값을 가져온다.
        
		System.out.println(code.length);
        //배열의 총개수를 알수 있는 방법(length) 10개의 결과값을 가지고 있다.

		//일본(jp)지역에 근무(code)하고 있는 사원의 인원수를 알고 싶다. 찾을 때 마다 1씩 증가시킨다.count(int변수)누적값은 ;만 들어가면 안되며 0값을 넣어야한다. 
		int count = 0;
		count = count +1;

		//if문을 사용하는 법
		int count = 0;

		//문자를 서로 비교하여 같거나 다름을 나타 내려면 == 표시가 아니라 equals(기본적으로 제공해주는 '매소드'라고 부른다.)를 넣어 같음과 다름을 비교한다.
		// 코드 []방에 jp를 true와 false로 결과값을 내보낸다.

		if(code[0].equals("JP")){ //true
		count=count+1;//내용을 표시하는 것(개수를 셀 수 있도록)
		}

		if(code[1].equals("JP")){ //false 이 부분이 실행 불가로 됨
		count=count+1;
		}

		if(code[2].equals("JP")){ //true
		count=count+1;
		}

		if(code[3].equals("JP")){ //false
		count=count+1;
		}

		if(code[4].equals("JP")){ //false
		count=count+1;
		}

		if(code[5].equals("JP")){ //false
		count=count+1;
		}

		if(code[6].equals("JP")){ //false
		count=count+1;
		}

		if(code[7].equals("JP")){ //true
		count=count+1;
		}

		if(code[8].equals("JP")){ //false
		count=count+1;
		}

		if(code[9].equals("JP")){ //false
		count=count+1;
		}

		System.out.println(count);
        
		//count=count+1;-> count++;로 나타낼 수 있다.
		if(code[9].equals("JP")){ //false
		count=count++;
		}
        
 }//main end

	

2. 반복문(for)

package Control;

public class MainClass {
	public static void main (String [] args) {
 	//반복문 배우기 (for문)
    
		String[] code={"JP", "FR", "JP", "US", "CN", "DE", "KR", "JP", "DE","KR"};
		int[] age={27,34,28,26,41,28,42,29,29,32};

		/*1번 사원의 나이의 합
		int sum = 0;//누적을 시키는 것(합누적변수)

		//sum=sum+age[0];~~sum=sum+age[9];
		for(int a = 0; a < age.length; a++){//age 배열의 개수를 넣어야해서 age를 넣어야 함 
			sum = sum+age[a];
		}

		System.out.println("사원나이의 합 :"+sum);

		}*/
		
		//2번 국내("KR")에 근무라는 사원 나이의 합

		int sum = 0;//누적함수
		for(int m = 0; m < code.length; m++){//10번 반복 시키는 것
			if(code[m].equals("KR")){ //검색(for아님 if) 만약 KR이라면(실행이 됬다면)
				sum= sum+age[m];//그 age를 더하라(age의 m번방 값을 가져와라)
				}
			}

		System.out.println(sum);

		}
}

3. 이중 for문(구구단 예시)

package Method;

//파일 이름을 바꾸려면 파일 아이콘을 눌러서 f2를 누르면 된다. 그럼 해당된 내용이 모두 바뀐다.

public class BookClass {

	String author = "";//저자
	int price = 0; //정가
	int r_price=0; //판매가

		public BookClass(){//기본 생성자
			}

		public void realPrice(int d){//판매가 연산 메서드

			r_price = price-d;//할인 가격 (유동성)
		}
}

//사본을 만들 때 new를 붙여서 사용한다.

3. 메소드

 

3-1. BookClass.java

 

package Method;

//파일 이름을 바꾸려면 파일 아이콘을 눌러서 f2를 누르면 된다. 그럼 해당된 내용이 모두 바뀐다.

public class BookClass {

	String author = "";//저자
	int price = 0; //정가
	int r_price=0; //판매가

		public BookClass(){//기본 생성자
			}

		public void realPrice(int d){//판매가 연산 메서드

			r_price = price-d;//할인 가격 (유동성)
		}
}

//사본을 만들 때 new를 붙여서 사용한다.

 

3-1. MainClass.java

 

package Method;
public class MainClass {

public static void main(String[] args) {

	//사본을 보관하는 것을 객체라고 한다.크게 통틀어 변수이다.

	BookClass b1 = new BookClass();//사본

	b1.author = "저자";//내용을 넣어줌
	b1.price = 200;//내용을 넣어줌 원가
	b1.realPrice(120);//할인가를 넣어준 실제판매한가

	System.out.println("저자의 실제 판매가는 :"+ b1.r_price);//실제 판매가를 나타냄

	BookClass b2 = new BookClass();//사본2

	b2.author = "홍길동";
	b2.price = 150;
	b2.realPrice(100);

	System.out.println("홍길동의 실제 판매가는 :"+ b1.r_price);

	BookClass[] books= new BookClass[2]; //배열 안에 2개가 있다.공간을 만들어놓고 배열하는 방식 세 줄을 써야함

	books[0]=b1;
	books[1]=b2;	

	System.out.println(books[0].author);
	System.out.println(books[1].author);

	BookClass[] books2={b1,b2}; //넣음과 동시에 방을 만들어 배열하는 방식 한 줄로 가능해서 경제적임

	System.out.println(books2[0].author);
	System.out.println(books2[1].author);
	System.out.println(books[0].author+"||"+books2[0].author);

	}
}

+ Recent posts