2021-12-07_打印X_读取键盘录入_读取转换流
1. problem25:打印X
(备注:在学习算法题的过程中,如果一道题我直接通过了,我就不把它写到博客里了;只有我没做出来,或者我觉得其他人思路更好的,我学习然后不看答案手敲实现后,把它放到博客里)
public class Solution { public List<String> printX(int n) { ArrayList res = new ArrayList<>(); char[] line = new char[n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { line[j] = ' '; } line[i] = 'X'; line[n-1-i] = 'X'; res.add(String.valueOf(line)); } return res; } }
2. B站P242:读取键盘录入
/** 读取键盘录入。 System.out:对应的是标准的输出设备,控制台。 System.in:对应的是标准的输入设备,键盘。 需求: 通过键盘录入数据。 当录入一行数据后,就将该行数据进行打印。 如果录入的数据是over的话,那么就停止录入。 */ import java.io.*; class ReadIn { public static void main(String[] args) throws IOException { InputStream in = System.in; // int by = in.read();//阻塞式方法 // int by1 = in.read(); // int by2 = in.read(); // // System.out.println(by); // System.out.println(by1); // System.out.println(by2); // System.out.println('\r' + 0); // System.out.println('\n' + 0); // int ch = 0; // while ((ch = in.read()) != -1) { // System.out.println(ch); // } // // in.close(); StringBuilder sb = new StringBuilder(); while (true) { int ch = in.read(); if (ch == '\r') { continue; } if (ch == '\n') { String s = sb.toString(); if ("over".equals(s)) { break; // 结束循环 } System.out.println(s.toUpperCase()); sb.delete(0, sb.length()); // 清空缓冲区 } else { sb.append((char)ch); } } } }
3. B站P243:读取转换流
/* 字符流: FileReader FileWriter BufferedReader BufferedWriter 字节流: FileInputStream FileOutputStream BufferedInputStream BufferedOutputStream 通过刚才的键盘录入一行数据并打印其大写,发现其实就是读一行数据的原理。 也就是readLine方法。 能不能直接readLine方法,来完成键盘录入的一行数据的读取呢? readLine方法是字符流BufferedReader类的方法。 而键盘录入的read方法是字节流InputStream的方法。 那么能不能将字节流转成字符流再使用字符流缓冲区的readLine方法呢? */ import java.io.*; class TransStreamDemo { public static void main(String[] args) throws IOException { // 获取键盘录入对象 InputStream in = System.in; // 将字节流对象转成字符流对象,使用转换流。InputStreamReader InputStreamReader isr = new InputStreamReader(in); // 为了提高效率,将字符流进行缓冲区技术高效操作。使用BufferedReader BufferedReader bufr = new BufferedReader(isr); String line = null; while ((line = bufr.readLine()) != null) { if ("over".equals(line)) { break; } System.out.println(line.toUpperCase()); } bufr.close(); } }