机试代码

来源:互联网 发布:埃德和沃伦夫妇知乎 编辑:程序博客网 时间: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;      }   }}


原创粉丝点击