原文链接

在日常工作中,我们常常会进行文件读写操作,除去我们最常用的纯文本文件读写,更多时候我们需要对Excel中的数据进行读取操作,本文将介绍Excel读写的常用方法,希望对大家学习Java读写Excel会有帮助。

在开始进行Java读写Excel前,我们需要先下一个jxl的jar包,这个jar包中提供了相关读写Excel的方法,在百度里所搜一下jxl.jar下载就会出现很多下载地址了,这里不再累述。随后我们将jxl.jar放到classpath下或者在工程的buildpath中添加jxl.jar后,便可以开始Java读写Excel的神秘之旅了。

第一章

Java读取Excel数据

首先,创建一个xls文件(如:jxltest.xls),然后在文件中添加一些数据,Excel文件创建完成后,我们便可以开始写代码读取了:

代码如下:

package jxl.zhanhj;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class GetExcelInfo {
public static void main(String[] args) {
GetExcelInfo obj = new GetExcelInfo();
// 此处为我创建Excel路径:E:/zhanhj/studysrc/jxl下
File file = new File("E:/zhanhj/studysrc/jxl/getExcleinfo.xls");
obj.readExcel(file);
}
// 去读Excel的方法readExcel,该方法的入口参数为一个File对象
public void readExcel(File file) {
try {
// 创建输入流,读取Excel
InputStream is = new FileInputStream(file.getAbsolutePath());
// jxl提供的Workbook类
Workbook wb = Workbook.getWorkbook(is);
// Excel的页签数量
int sheet_size = wb.getNumberOfSheets();
for (int index = 0; index < sheet_size; index++) {
// 每个页签创建一个Sheet对象
Sheet sheet = wb.getSheet(index);
// sheet.getRows()返回该页的总行数
for (int i = 0; i < sheet.getRows(); i++) {
// sheet.getColumns()返回该页的总列数
for (int j = 0; j < sheet.getColumns(); j++) {
String cellinfo = sheet.getCell(j, i).getContents();
System.out.println(cellinfo);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.test;

import jxl.*;
import jxl.read.biff.BiffException; import java.io.*; public class ReadExcel { public static void main(String[] args) throws BiffException, IOException {
Workbook book = Workbook.getWorkbook(new File("Test.xls")); //获得第一个工作表对象
Sheet sheet = book.getSheet("sheet_one");
//Sheet sheet = book.getSheet(0); int rows = sheet.getRows();
int cols = sheet.getColumns(); System.out.println("总列数:" + cols);
System.out.println("总行数:" + rows);
System.out.println("----------------------------"); int i=0;
int j=0;
//循环读取数据
for(i=0;i<cols;i++)
{
for(j=0;j<rows;j++)
{
System.out.println("第"+j+"行,第"+i+"列为:"+sheet.getCell(i, j).getContents());
} } } }

上面这个例子是一个很简单读取Excel并将各单元格的数据打印到控制台上,更多Excel操作方法,请参加jxl API。

下面我们再对上面的例子进行一个小小的扩展:

1、读取一个目录下的所有Excel文件

2、读取的每个Excel文件的数据写入到不同的txt中

代码如下:

package jxl.zhanhj;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class GetExcelInfo {
public static void main(String[] args) {
GetExcelInfo obj = new GetExcelInfo();
// 此处路径指定到目录而不是单个文件
File file = new File("E:/zhanhj/studysrc/jxl");
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files)
// 如果还存在子目录则继续读取子目录下的Excel文件
if (f.isDirectory()) {
File[] subfiles = f.listFiles();
for (File fi : subfiles) {
// 对文件进行过滤,只读取Excel文件,非Excel文件不读取,否则会出错
if (fi.getName().indexOf(".xls") > 0) {
obj.readExcelWrite2TXT(fi);
}
}
} else {
// 对文件进行过滤,只读取Excel文件,非Excel文件不读取,否则会出错
if (f.getName().indexOf(".xls") > 0) {
obj.readExcelWrite2TXT(f);
}
}
}
}
// 去读Excel的方法readExcel,该方法的入口参数为一个File对象
public void readExcelWrite2TXT(File file) {
// 创建文件输出流
FileWriter fw = null;
PrintWriter out = null;
try {
// 指定生成txt的文件路径
String fileName = file.getName().replace(".xls", "");
fw = new FileWriter(file.getParent() + "/" + fileName + ".txt");
out = new PrintWriter(fw);
// 创建输入流,读取Excel
InputStream is = new FileInputStream(file.getAbsolutePath());
// jxl提供的Workbook类
Workbook wb = Workbook.getWorkbook(is);
// Excel的页签数量
int sheet_size = wb.getNumberOfSheets();
for (int index = 0; index < sheet_size; index++) {
// 每个页签创建一个Sheet对象
Sheet sheet = wb.getSheet(index);
// sheet.getRows()返回该页的总行数
for (int i = 0; i < sheet.getRows(); i++) {
// sheet.getColumns()返回该页的总列数
for (int j = 0; j < sheet.getColumns(); j++) {
String cellinfo = sheet.getCell(j, i).getContents();
// 将从Excel中读取的数据写入到txt中
out.println(cellinfo);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 记得关闭流
out.close();
fw.close();
// 由于此处用到了缓冲流,如果数据量过大,不进行flush操作,某些数据将依旧
// 存在于内从中而不会写入文件,此问题一定要注意
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

下面我们来一起对Java读取Excel流程做一个总结:

1、打开工作文件Workbook,在此之前先用java的io流创建或者读取文件

2、打开工作表Sheet

3、读行,然后读列(行和列是从0开始的)

4、进行数据进行操作

第二章

接着上一节的内容,本节主要讲述如何通过Java程序向Excel文件中写数据,包括:1、数据类型的控制;2、单元格及数据的格式化。

要快速上手,我们还是通过阅读代码来学习,这样可以帮助大家建立一个更直观的概念和认识。

创建新文件

package com.test;

import jxl.*;
import java.io.*; import jxl.write.*;
import jxl.write.biff.RowsExceededException; public class CreateExcel { public static void main(String[] args) throws RowsExceededException, WriteException{
WritableWorkbook book;
try {
System.out.println("---start---");
//打开文件
book = Workbook.createWorkbook(new File("Test.xls")); //生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet("sheet_one", 0); //在Label对象的构造中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为Hello World
Label label = new Label(0,0,"Hello World"); //将定义好的单元格添加到工作表中
sheet.addCell(label); /*生成一个保存数字的单元格
必须使用Number的完整包路径,否则有语法歧义
单元格位置是第二列,第一行,值为789.123*/
jxl.write.Number num = new jxl.write.Number(0,1,123.456);
sheet.addCell(num); //写入数据并关闭文件
book.write();
book.close();
System.out.println("---end---"); } catch (IOException e) {
System.out.println(e);
} } }

1、写入Excel及数据类型控制

程序描述:通过Java程序新建一个名为test.xls的文件,并在Excel的第一行第一列写一个字符串,在第一行第二列写一个数字,在第一行第三列写一个日期。 

package jxl.zhanhj;
import java.io.File;
import java.util.Date;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.Number;
import jxl.write.DateTime;
public class CreateExcel {
public static void main(String args[]) {
try {
// 打开文件
WritableWorkbook book = Workbook.createWorkbook(new File(
"test.xls"));
// 生成名为“sheet1”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet("sheet1", 0);
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0),单元格内容为string
Label label = new Label(0, 0, "string");
// 将定义好的单元格添加到工作表中
sheet.addCell(label);
// 生成一个保存数字的单元格,单元格位置是第二列,第一行,单元格的内容为1234.5
Number number = new Number(1, 0, 1234.5);
sheet.addCell(number);
// 生成一个保存日期的单元格,单元格位置是第三列,第一行,单元格的内容为当前日期
DateTime dtime = new DateTime(2, 0, new Date());
sheet.addCell(dtime);
// 写入数据并关闭文件
book.write();
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
}  

几个重要对象解析:

1、WritableWorkbook:用于创建打开Excel文件

2、WritableSheet:用于创建Excel中的页签

3、Label:将单元格指定为文本型,并写入字符串

4、Number:将单元格指定为数字型,并可写入数字

5、DateTime:将单元格指定为日期型,并可写入日期

掌握这几个类及其方法后,我们便可以方便的向Excel进行写入操作了,更多对象请参见jxl api。

2、写入时单元格及数据的格式化

程序描述:在数据写入到单元格后,对数据进行格式化,包括字体大小、颜色等

package jxl.zhanhj;
import java.io.File;
import java.util.Date;
import jxl.CellType;
import jxl.Workbook;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.format.Alignment;
import jxl.write.DateFormat;
import jxl.write.Label;
import jxl.write.NumberFormat;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.Number;
import jxl.write.DateTime;
import jxl.write.WriteException;
public class CreateExcel {
public static void main(String args[]) {
try {
// 打开文件
WritableWorkbook book = Workbook
.createWorkbook(new File("test.xls"));
// 生成名为“sheet1”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet("sheet1", 0);
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0),单元格内容为string
Label label = new Label(0, 0, "string",
getDataCellFormat(CellType.LABEL));
// 将定义好的单元格添加到工作表中
sheet.addCell(label);
// 生成一个保存数字的单元格,单元格位置是第二列,第一行,单元格的内容为1234.5
Number number = new Number(1, 0, 1234.5,
getDataCellFormat(CellType.NUMBER));
sheet.addCell(number);
// 生成一个保存日期的单元格,单元格位置是第三列,第一行,单元格的内容为当前日期
DateTime dtime = new DateTime(2, 0, new Date(),
getDataCellFormat(CellType.DATE));
sheet.addCell(dtime);
// 写入数据并关闭文件
book.write();
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
public static WritableCellFormat getDataCellFormat(CellType type) {
WritableCellFormat wcf = null;
try {
// 字体样式
if (type == CellType.NUMBER || type == CellType.NUMBER_FORMULA) {// 数字
NumberFormat nf = new NumberFormat("#.00");
wcf = new WritableCellFormat(nf);
} else if (type == CellType.DATE) {// 日期
DateFormat df = new DateFormat("yyyy-MM-dd hh:mm:ss");
wcf = new WritableCellFormat(df);
} else {
WritableFont wf = new WritableFont(WritableFont.TIMES, 10,
WritableFont.NO_BOLD, false);
// 字体颜色
wf.setColour(Colour.RED);
wcf = new WritableCellFormat(wf);
}
// 对齐方式
wcf.setAlignment(Alignment.CENTRE);
wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
// 设置上边框
wcf.setBorder(Border.TOP, BorderLineStyle.THIN);
// 设置下边框
wcf.setBorder(Border.BOTTOM, BorderLineStyle.THIN);
// 设置左边框
wcf.setBorder(Border.LEFT, BorderLineStyle.THIN);
// 设置右边框
wcf.setBorder(Border.RIGHT, BorderLineStyle.THIN);
// 设置背景色
wcf.setBackground(Colour.YELLOW);
// 自动换行
wcf.setWrap(true);
} catch (WriteException e) {
e.printStackTrace();
}
return wcf;
}
}

几个重要对象解析:

1、WritableCellFormat:用于格式化单元格

2、WritableFont:用于格式化字体

更多请参加jxl api。

到这里本节的讲解就结束了,下面我们可以总结出Excel的写入流程:

1、用WritableWorkbook创建Excel文件

2、用WritableSheet创建页签

3、用Label、Number、DateTime等创建单元格内容

4、在创建单元格内容时,我们可以给写一个格式化方法,对单元格内容进行格式化

5、格式化主要包括2类:单元格格式化(WritableCellFormat)、值的格式化(WritableFont)

继前两节的Java读取、写入Excel后,本期将推出Java修改Excel中数据以及格式的方法和技巧,如果大家学习了前面的读、写Excel,相信学习本节内容将是不费吹灰之力啊,不过要灵活的运用还需多加努力呀。

package jxl.zhanhj;  

import java.io.*;
import java.util.HashMap; import jxl.*;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException; public class UpdateExcel {
public static void main(String args[]) {
WritableWorkbook book = null;
HashMap<String, String> map = new HashMap<String, String>();
map = getPCKV();
try {
// Excel获得文件
Workbook wb = Workbook.getWorkbook(new File("update_test.xls"));
// 打开一个文件的副本,并且指定数据写回到原文件
book = Workbook.createWorkbook(new File("update_test.xls"), wb);
Sheet sheet = book.getSheet(0);
WritableSheet wsheet = book.getSheet(0);
int colunms = sheet.getColumns();
// 不读表头
for (int i = 1; i < sheet.getRows(); i++) {
StringBuffer pcin = new StringBuffer();
// 将省市组合起来与HashMap进行匹配
String province = sheet.getCell(4, i).getContents().trim();
String city = sheet.getCell(5, i).getContents().trim();
pcin = pcin.append(province).append("-").append(city);
// 如果不匹配,则在该行的最后加入标注信息
if (!map.containsValue(pcin.toString())) {
Label label = new Label(colunms, i, "省市选择出错",
getDataCellFormat());
wsheet.addCell(label);
}
}
book.write();
} catch (Exception e) {
System.out.println(e);
} finally {
try {
book.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} // 设置标注的格式为黄底红字
public static WritableCellFormat getDataCellFormat() {
WritableCellFormat wcf = null;
try {
WritableFont wf = new WritableFont(WritableFont.TIMES, 10,
WritableFont.BOLD, false);
// 字体颜色
wf.setColour(Colour.RED);
wcf = new WritableCellFormat(wf);
// 对齐方式
wcf.setAlignment(Alignment.CENTRE);
wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
// 设置上边框
wcf.setBorder(Border.TOP, BorderLineStyle.THIN);
// 设置下边框
wcf.setBorder(Border.BOTTOM, BorderLineStyle.THIN);
// 设置左边框
wcf.setBorder(Border.LEFT, BorderLineStyle.THIN);
// 设置右边框
wcf.setBorder(Border.RIGHT, BorderLineStyle.THIN);
// 设置背景色
wcf.setBackground(Colour.YELLOW);
// 自动换行
wcf.setWrap(true);
} catch (WriteException e) {
e.printStackTrace();
}
return wcf;
} // 省市对应关系Map
public static HashMap<String, String> getPCKV() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("01", "河北省-石家庄");
map.put("02", "河北省-秦皇岛");
map.put("03", "河北省-唐山");
map.put("04", "四川省-成都");
map.put("05", "四川省-绵阳");
map.put("06", "四川省-达州");
map.put("07", "广西省-桂林");
map.put("08", "广西省-南宁");
map.put("09", "广西省-柳州");
return map;
}
}

到这里,Java修改Excel单元格的数据及格式便告一段落了,本节给出了一个较为简单的场景进行了讲述,目的在于引导大家学习Java修改Excel的常用流程和方法,若读者能将Java操作Excel学得更深,往往可以发挥更大的作用。比如程序中利用HashMap来存储对应关系,如果要将全国的省市纳入进来,利用HashMap不是很好的做好,我们可以改成通过利用数据库来达到同样的效果,这里的改进留给读者。

读到这里,可能有部分读者会产生疑问,这种操作,直接在Excel中,我们不是也可以操作吗?为什么通过Java来修改,是不是多此一举了?其实不然,如果读者将Java读写文件结合起来,以及在将此程序稍微扩展一下,对每个Excel的所有页签进行遍历,那么Java程序处理的数据里和复杂度,远远不是单纯的Excel能企及的。举个简单的场景(仅仅将上述场景进行扩展):

第三章 

向已有的Excel中添加WorkSheet

package com.test;

import jxl.*;
import java.io.*; import jxl.read.biff.BiffException;
import jxl.write.*;
import jxl.write.biff.RowsExceededException; public class UpdateExcel { public static void main(String[] args) throws BiffException, IOException, RowsExceededException, WriteException{
//获得文件
Workbook wb = Workbook.getWorkbook(new File ("Test.xls")); //打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book = Workbook.createWorkbook(new File ("Test.xls"), wb); //添加一个工作表
WritableSheet sheet = book.createSheet("sheet_two", 1); sheet.addCell(new Label(0,0,"Test data for sheet_two")); //输出
System.out.println(sheet.getCell(0, 0).getContents()); book.write();
book.close(); } }

  使用XSSFWorkbook读取EXCEL文件

导入jar包,jar包地址 https://pan.baidu.com/s/1gHaIGyFjQL6mqiWHXtdD4w

代码如下

package com.zk.test;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.IOException; public class TestStream {
public static void main(String[] args){
try {
//创建工作簿
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream("D:\\excel.xlsx")); //System.out.println("xssfWorkbook对象:" + xssfWorkbook);
//读取第一个工作表
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
System.out.println("var member=[");
//System.out.println("sheet对象:" + sheet);
//获取最后一行的num,即总行数。此处从0开始计数
int maxRow = sheet.getLastRowNum();
//System.out.println("总行数为:" + (maxRow+1));
for (int row = 1; row <= maxRow; row++) {
//获取最后单元格num,即总单元格数 ***注意:此处从1开始计数***
System.out.println("{");
int maxRol = sheet.getRow(row).getLastCellNum();
//System.out.println("--------第" + row + "行的数据如下--------");
System.out.println("phone:\""+sheet.getRow(row).getCell(1) + "\",");
System.out.println("name:\""+sheet.getRow(row).getCell(0)+"\",");
if(row!=maxRow) {
System.out.println("},");
}else {
System.out.println("}");
}
}
System.out.println("]");
} catch (IOException e) {
e.printStackTrace();
}
}
}

  

Java读取、写入、处理Excel文件中的数据(转载)的更多相关文章

  1. [Python]将Excel文件中的数据导入MySQL

    Github Link 需求 现有2000+文件夹,每个文件夹下有若干excel文件,现在要将这些excel文件中的数据导入mysql. 每个excel文件的第一行是无效数据. 除了excel文件中已 ...

  2. SQLite从Excel文件中导入数据

    元数据 另存为.csv格式 用记事本打开 打开后的数据 Android客户端开发的时候使用了SQLite数据库,为了测试,需要将一些excel文件中的数据导入到数据库的表中,下面是几个步骤: 数据库表 ...

  3. 用Python的pandas框架操作Excel文件中的数据教程

    用Python的pandas框架操作Excel文件中的数据教程 本文的目的,是向您展示如何使用pandas 来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其 ...

  4. 用python的pandas读取excel文件中的数据

    一.读取Excel文件   使用pandas的read_excel()方法,可通过文件路径直接读取.注意到,在一个excel文件中有多个sheet,因此,对excel文件的读取实际上是读取指定文件.并 ...

  5. matlab读取excel文件中的数据

    1.读取sheet1中的所有数据 1.1首先我们建立一个sheet表,表名为‘111’ 1.2 默认这些文本以及数字都放在sheet1中,我们将此excel选入当前工作目录(必要步骤), 选入当前工作 ...

  6. python从Microsoft Excel文件中导入数据

    excel中后缀为csv和xls,二者区别如下:1.xls 文件就是Microsoft excel电子表格的文件格式.2.csv是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中. ...

  7. MATLAB读写Excel文件中的数据

    读取: %读取filename文件中指定表的数据,存入dataRead矩阵中 dataRead=xlsread('filename.xls',sheet); 写入: %将矩阵dataWrite中的数据 ...

  8. gridview读取Excel文件中的数据,并将其导入数据库

    原文发布时间为:2008-10-16 -- 来源于本人的百度文章 [由搬家工具导入] //将需要导入的文件上传到服务器           string filePath = "" ...

  9. 将excel文件中的数据导入到mysql

    ·在你的表格中增加一列,利用excel的公式自动生成sql语句,具体方法如下:          1)增加一列(假设是D列)          2)在第一行的D列,就是D1中输入公式:=CONCATE ...

随机推荐

  1. [ZJOI2008] 骑士 - 基环树dp

    一类基环树dp都是这个套路吧 随便拆掉环上的一条边 然后跑树形dp,设\(f[i][0/1]\)表示以第\(i\)个人为根的子树,第\(i\)个人选或不选,能收获的最大值 以断点\(u,v\)为根分别 ...

  2. phpstorm实现分屏展示代码

    第一种 选择你要分屏的页面 [Window]—>[Editor Tabs]—>[Split Vertically]or[Split Horizontally]  第二种 把鼠标箭头放到你想 ...

  3. Github中进行fork后,原仓库更新了如何与原仓库同步

    我们经常在Github中Fork别人优秀的项目(在自己的GitHub下面生成一个repository),如果原仓库作者或组织更新仓库,此时你Fork的项目并不会更新,如果我们想要更新操作,该如何操作? ...

  4. 162.扩展User模型-使用Proxy模型

    扩展用户模型: Django内置的User模型虽然已经足够强大了,但是有时候还是不能满足我们的需求,比如在验证用户登录的时候,它用的是用户名作为验证,而我们有时候需要通过手机号码或者是邮箱进行验证,还 ...

  5. wpf 程序启动显示图片

    一.设置图片的生成操作 程序启动时会出现0.5秒的图片显示,再显示程序界面. 二.写代码实现相同效果 /// <summary> /// App.xaml 的交互逻辑 /// </s ...

  6. JavaScript的Map和Set

    JavaScript的Map和Set 1.map:映射(通过key获得value).增.删 2.set:增.删.判断是否包含某个元素 1. Map <!DOCTYPE html><h ...

  7. dijkstra算法为什么不能处理带有负边权的图

      1 2 3 1 0 8 9 2 10 0 10 3 10 -2 0 先看样例再解释,看邻接矩阵会发现, 如果用dijkstra算1-2的最短路因为贪心思想所以得到的结果是8,但明显可以看到1-3- ...

  8. 2020牛客竞赛 DP F 碎碎念

    作者:儒生雄才1链接:https://ac.nowcoder.com/discuss/366644来源:牛客网 题目连接:https://ac.nowcoder.com/acm/contest/300 ...

  9. CF399B Red and Blue Balls

    题目 CF399B 洛谷RemoteJudge 思路 很容易发现,栈中靠上的蓝色球的出栈,对它下方的蓝色球没有影响. 举个例子: 第一步中靠上的蓝色球在第三步出栈了,这一过程对它下面的蓝色球(即第一步 ...

  10. 02-Java基础语法【数据类型转换、运算符、方法入门】

    重点知识记录 01.数据类型转换 当数据类型不一样是,将会发生数据类型转换. 1)自动类型转换(隐式): 特点:代码不需要进行特殊处理,自动完成: 规则:数据范围从小到大:byte < shor ...