机试代码
来源:互联网 发布:埃德和沃伦夫妇知乎 编辑:程序博客网 时间:2024/05/18 09:14
import java.io.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.LinkedHashMap;import java.util.Map;public class Application { /** * 定义需要读取的文件的名称,放在项目主目录或者使用绝对路径 */ private static final String FILE_NAME = "stock_price.txt"; /** * 定义时间格式化字符串 */ private static final String PATTERN = "yyyy-MM-dd"; /** * 定义sql server驱动 */ private static final String DRIVER_NAME = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; /** * 初始化时间格式化类 */ private static final SimpleDateFormat SDF = new SimpleDateFormat(PATTERN); public static void main(String[] args) { //从文件读取数据 Map<String, String> stocks = readFromFile(); //将数据转化为单调递增区间打印 printMomotone(stocks); //从数据库读取数据 readFromDB(); } /** * 从文件读取数据 * @return 日期,价格的map */ private static Map<String, String> readFromFile() { BufferedReader reader = null; Map<String, String> stocks = new LinkedHashMap<String, String>(); try { File file = new File("."); File txtFile = new File(file.getCanonicalPath() + File.separator + FILE_NAME); reader = new BufferedReader(new InputStreamReader(new FileInputStream(txtFile), "UTF-8")); String line = null; /** * 按行读取 */ while ((line = reader.readLine()) != null) { String[] lines = line.split("\\s+"); String price = lines[0].trim(); String priceDate = lines[1].trim(); stocks.put(priceDate, price); } //排序并打印 sortAndPrint(stocks); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return stocks; } /** * 对map的key进行排序 * @param stocks * @return */ private static String[]sortKeys(Map<String,String>stocks){ String[] keys = stocks.keySet().toArray(new String[] {}); for (int i = 0; i < keys.length; i++) { for (int j = 0; j < i; j++) { swap(keys, i, j); } } return keys; } /** * 打印输出 * @param stocks */ private static void sortAndPrint(Map<String, String> stocks) { String[] keys = sortKeys(stocks); System.out.println("按日期升序结果:"); for (String key : keys) { System.out.println(String.format("%s %s", key, stocks.get(key))); } } /** * 从数据库读取 */ private static void readFromDB() { Connection conn = getConnection(); String sql = "select * from data_stk_prc"; Statement stm = null; ResultSet rs = null; Map<String, String> stocks = new LinkedHashMap<String, String>(); try { stm = conn.createStatement(); rs = stm.executeQuery(sql); while (rs.next()) { stocks.put(rs.getString("date"), rs.getString("price")); } /** * 排序可考虑数据库进行实践格式化并按升序排列 */ sortAndPrint(stocks); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (stm != null) { try { stm.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } /** * 数组排序 * @param eles * @param i * @param j */ private static void swap(String[] eles, int i, int j) { long time1 = stringToTimestamp(eles[i]); long time2 = stringToTimestamp(eles[j]); if (time1 < time2) { String temp = eles[i]; eles[i] = eles[j]; eles[j] = temp; } } /** * 将字符串转化为时间方便对比,或者直接字符串大小对比 * @param d * @return */ private static long stringToTimestamp(String d) { try { return SDF.parse(d).getTime(); } catch (ParseException e) { e.printStackTrace(); } return -1L; } /** * 获取数据库连接,可以集成mybatis * @return */ private static Connection getConnection() { /** * 硬编码或配置文件读取数据库信息 * 需要在classpath下增加sql server的驱动 */ String dbURL = "jdbc:sqlserver://10.132.20.115:1433;DatabaseName=KSDB"; String userName = "ksuser"; String userPwd = "123@pwd"; try { Class.forName(DRIVER_NAME); Connection dbConn = DriverManager.getConnection(dbURL, userName, userPwd); return dbConn; } catch (Exception e) { e.printStackTrace(); System.out.print("连接失败"); } return null; } /** * 打印打掉区间 * @param stocks */ private static void printMomotone(Map<String,String> stocks){ String[] keys = sortKeys(stocks); float temp = -1F; int start = 0; for(int i=0;i<keys.length;i++){ Float current = Float.valueOf(stocks.get(keys[i])); /** * 针对当前场景下的单调区间 */ if(current<temp){ System.out.println(String.format("[%s %s,%s %s]",keys[start],stocks.get(keys[start]),keys[i-1],stocks.get(keys[i-1]))); start = i; } if(i==keys.length-1 && current>temp){ System.out.println(String.format("[%s %s,%s %s]",keys[start],stocks.get(keys[start]),keys[keys.length-1],stocks.get(keys[keys.length-1]))); }else if(i==keys.length-1){ System.out.println(String.format("[%s %s,%s %s]",keys[start],stocks.get(keys[start]),"-","-")); } temp = current; } }}
阅读全文
0 0
- 机试代码
- 代码试贴
- JS代码试例
- myeclipse注册机代码
- MyEclipse注册机代码
- 机选彩票代码
- ATM机代码实现
- 感知机 代码实现
- 感知机 Python代码
- 自动售货机代码
- 代码
- 代码!
- 代码
- 代码
- 代码
- 代码
- 代码
- 代码
- Xilinx zynq7000,zynq7k上CLOCK Distribution 调试笔记
- PCA美国城市生活质量介绍(3)
- 数组的四种复制方法
- 私有云的神经系统——品高云SDN分析
- TCP报文送达确认ACK
- 机试代码
- 手机口袋模式功能
- 如何能成为一个程序高手
- ThreadLocal(python 版)
- python multiprocessing 测试
- 线程高级编程
- 一级列表购物车完整版
- HLSL学习笔记
- 深度学习常用的数据集,包括各种数据跟图像数据。