机试代码

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中恢复数字序列可以使用循环和条件语句的方式来实现。首先,我们可以定义一个整型数组来存储数字序列,然后根据题目要求进行处理。 假设我们要恢复的数字序列是按升序排列的。首先,我们可以利用循环遍历数组,检查当前元素是否与前一个元素相差1。如果相差不是1,则说明序列被破坏,我们需要将当前元素加1并恢复序列。具体代码如下: ```java public class Main { public static void main(String[] args) { int[] nums = {1, 2, 3, 5, 6}; int n = nums.length; for (int i = 1; i < n; i++) { if (nums[i-1] != nums[i] - 1) { // 破坏的序列需要修复 nums[i] = nums[i-1] + 1; } } for (int i = 0; i < n; i++) { System.out.print(nums[i] + " "); } } } ``` 运行以上代码,输出结果为 `1 2 3 4 5 6`,成功恢复了破坏的数字序列。 需要注意的是,以上代码只能恢复序列中的一个破坏位置。如果序列中有多个破坏位置,可以在循环中使用逻辑判断来修复。 例如,序列 `{1, 2, 4, 6, 8}` 中有两个破坏位置,我们可以根据题目要求,将相邻两个元素的中间位置加入序列。具体代码如下: ```java public class Main { public static void main(String[] args) { int[] nums = {1, 2, 4, 6, 8}; int n = nums.length; List<Integer> res = new ArrayList<>(); for (int i = 0; i < n-1; i++) { res.add(nums[i]); if (nums[i+1] != nums[i] + 1) { res.add(nums[i] + 1); } } res.add(nums[n-1]); int[] result = new int[res.size()]; for (int i = 0; i < res.size(); i++) { result[i] = res.get(i); } for (int i = 0; i < result.length; i++) { System.out.print(result[i] + " "); } } } ``` 运行以上代码,输出结果为 `1 2 3 4 4 6 6 7 8`,成功恢复了两个破坏位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值