今天做的最多的事情就是纠错了,
通过添加输出语句判断错误来源;

找到错误来源:

wb = new XSSFWorkbook(input);//语句创建错误

网上查询发现是jar包的问题;

下图为poi的jar包各个用途:(本人需要的是excel)

读取表格:


import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelUtil {
private static String substring;
public static void main(String[] args) throws IOException{
try {
//输入文件名
System.out.println("开始读入表格");
ExcelUtil.read("D://dns.xls");
} catch (IOException e) {
e.printStackTrace();
System.out.println("读入失败");
}
}
public static void read(String filePath) throws IOException { //判断是xls还是xlsx
String fileType = filePath.substring(filePath.lastIndexOf(".") + 1,filePath.length());
InputStream input = new FileInputStream(filePath);
Workbook wb = null;
if (fileType.equals("xls")) {
System.out.println("您的excel格式为.xls");
wb = new HSSFWorkbook(input);
System.out.println("成功读取表格");
} else if (fileType.equals("xlsx")) {
wb= new XSSFWorkbook(input);
} else {
System.out.println("您输入的excel格式不正确");
}
//得到一个工作表对象;
System.out.println("得到一个工作表对象");
Sheet sheet = wb.getSheetAt(0);
int rsRows = sheet.getLastRowNum();// 获取sheet表中的总行数
// 遍历行
System.out.println("遍历行");
for (int i=0;i<=rsRows;i++) {
Row row = sheet.getRow(i);
StringBuffer sb = new StringBuffer();
System.out.println("遍历单元格");
//遍历单元格
for(int j=0;j<row.getLastCellNum();j++){
String value = null;
Cell cell = row.getCell(j);
//判断单元格是否为空
System.out.println("判断单元格是否为空");
if(cell==null||cell.equals(null)||cell.getCellType()==HSSFCell.CELL_TYPE_BLANK){//空值
value="null";
}else {
//判断数据类型
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:value = "" + cell.getCellFormula();//公式型
break;
case HSSFCell.CELL_TYPE_NUMERIC:value = "" + cell.getNumericCellValue();//数值型
break;
case HSSFCell.CELL_TYPE_STRING:value = cell.getStringCellValue();//字符串型
break;
}
}
sb.append(value + " ");
substring = sb.substring(0, sb.length()-1);
} //转换为数组
String[] strings = sb.toString().split(",");
System.out.println(substring.toString());
System.out.println("操作完成!");
for(int a=0;a<strings.length;a++) {
System.out.println(strings[a]);
}
}
} }

后来又报错:HSSFCell.CELL_TYPE_STRING、BOOLEAN、NUMERIC无定义!

新版:

if(cell==null||cell.equals(null)||cell.getCellType()==CellType.BLANK){
value="null";
}else {
//判断数据类型
switch (cell.getCellType()) {
case FORMULA:value = "" + cell.getCellFormula();
break;
case NUMERIC:value = "" + cell.getNumericCellValue();
break;
case STRING:value = cell.getStringCellValue();
break;
default:
break;
}
}

运行截图:

迪杰斯特拉算法:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class Dijkstra{
public static void main(String[] args) throws IOException{
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
System.out.println("输入起点与终点:");
int a[]=new int[2];
for(int i=0;i<2;i++){
a[i]=sc.nextInt();
}
int vs=a[0];
int vf=a[1];
Dijkstra.dijkstra(vs,vf);
}
public static List<String> readTxtFile(String filePath) {
/**
* 读取文档
* @param filePath
* @return
*/
List<String> list = new ArrayList<String>();
try {
String encoding = "UTF-8";
File file = new File(filePath);
if (file.isFile() && file.exists()) {
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), encoding);
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
while ((lineTxt = bufferedReader.readLine()) != null) {
if (!lineTxt.startsWith("#"))
list.add(lineTxt);
}
read.close();
} else {
System.out.println("找不到文件");
}
} catch (Exception e) {
System.out.println("出错了");
e.printStackTrace();
}
return list; } public static String[][] createArray(String filePath){
/**
* 读取文档生成二维数组
* @param filePath
* @return
*/
List<String> list = readTxtFile(filePath);
System.out.println("读取成功");
String[][] array = new String[list.size()][];
for(int i=0;i<list.size();i++){
array[i] = new String[list.size()];
String linetxt=list.get(i);
String[] myArray = linetxt.replaceAll("\\s+", "@").split("@");
for(int j=0;j<myArray.length;j++){
array[i][j]=myArray[j];
}
}
return array;
} public static int[][] str2int(String[][] str)
{
int a,b;
a = str.length;
b = str[0].length;
int result[][] = new int[a][b];
for(int i = 0 ; i < a ; ++ i)
for(int j = 0 ; j < b ; ++ j) {
result[i][j] = Integer.parseInt(str[i][j]);
} return result;
}
public static void printArray(String array[][]){//打印输出,观察二维数组是否正确;纠错用
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
if(j!=array[i].length-1){
System.out.print("array["+i+"]["+j+"]="+array[i][j]+",");
}
else{
System.out.print("array["+i+"]["+j+"]="+array[i][j]);
} }
System.out.println();
}
}
public static void dijkstra(int vs,int vf) {
/**
* Dijkstra最短路径。
* 即图中"节点vs"到其它各个节点的最短路径。
* @param vs 起始节点
* @param Graph 图
*/ String[][] str= createArray("D:\\text.txt");
System.out.println("成功创建二维字符串数组");
printArray(str);
//将读取的String型二维数组转化为int型
int[][]Graph =str2int(str);
System.out.println("成功转化为整数组");
int NUM = Graph[0].length; int[] prenode = new int[NUM];// 前驱节点数组 int[] path = new int[NUM];// 最短距离数组 boolean[] flag = new boolean[NUM];// 该节点是否已经找到最短路径 int vnear = 0;//距离vs最近的节点 //初始化
for (int i = 0; i <path.length; i++) {
prenode[i] = i;
path[i] = Graph[vs][i];//顶点i的最短路径为顶点vs到i的权
flag[i] = false;
} flag[vs] = true;//vs自身初始化 //遍历 Graph.length-1次,找出每个顶点的最短路径
for (int v = 1; v < Graph.length; v++) {
// 每次循环求得当前距离vs最近的顶点vnear和最短距离min
int min = 100000;//100000表示无穷
for (int j = 0; j < Graph.length; j++) {
if (!flag[j] && path[j] < min) {
min = path[j];
vnear = j;
}
}
//标记顶点vnear为已经获取到最短路径
flag[vnear] = true; // 根据vnear更新vs到其他所有节点的前驱节点和最短路径
for (int k = 0; k < Graph.length; k++) {
if (!flag[k] && (min + Graph[vnear][k]) < path[k]) {
prenode[k] = vnear;
path[k] = min + Graph[vnear][k];
}
}
}
 System.out.println(";总公里数=" + path[vf]);
System.out.println("起点"+vs+"到终点"+vf+"的最短路径为:");
System.out.print("终点<-" + vf + "前驱" + prenode[vf]);
//依次输出前驱
do{
vf=prenode[vf];
System.out.print("<-前驱" + prenode[vf]);
}while(prenode[vf]==vs); } }

运行截图:

最新文章

  1. 算法小节(一)——斐波那契数列(java实现)
  2. Windows 8(虚拟机环境)安装.NET Framework3.5(includes .NET 2.0 and 3.0)
  3. ArcGIS中的三种查询
  4. Asp.NET MVC 拍卖网站,拆解【2】 Asp.NET MVC章回,第(1)节
  5. Android Studio配置Git及Git文件状态说明
  6. [LeetCode]题解(python):052-N-Queens II
  7. JavaMail 发送邮件案例
  8. TQ210开发板NFS挂载android4.0.4的rootfs的方法
  9. BestCoder 1st Anniversary
  10. 控制器View的加载过程
  11. 话说GET与POST那点恩怨
  12. 修改oracle内存
  13. junit 注意事项,切记
  14. vultr新用户注册享受50美元优惠码,长期有效
  15. java语言环境jdk的安装和环境变量的配置
  16. vue2.0的初始化
  17. 四、docker compose
  18. 初次接触Jenkins遇到的几个问题
  19. Java容器---字符容器StringBuffer &amp; StringBuilder
  20. python-day73--django课上项目01

热门文章

  1. pandas-08 pd.cut()的功能和作用
  2. java中异常的抛出:throw throws
  3. Oracle 逻辑存储结构
  4. Java 单例类
  5. gitlab中clone项目时,IP地址是一串数字
  6. C#-阿里云OSSAPI
  7. jquery 子元素筛选选择器
  8. python为什么要使用闭包
  9. 用IntelliJ IDEA学习Spring--创建一个简单的项目
  10. NOIP2019 PJ 对称二叉树