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

找到错误来源:

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); } }

运行截图:

数据结构---公交线路提示系统05(内附读取表格+迪杰斯特拉算法Java代码)的更多相关文章

  1. 数据结构---公交线路提示系统(Java后台+excel表格+web前端)

     系统大致流程: index.jsp输入站名(点击“出示站点信息”,跳转list.jsp读取表格):后台通过站名获得id:getIdbyname(String name)将id反馈至dijkstra( ...

  2. 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)

    上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...

  3. js图的数据结构处理---迪杰斯特拉算法

    /*//1.确定数据结构, mapf[i][j] 为点i到点j的距离 [ Infinity 2 5 Infinity Infinity Infinity Infinity 2 6 Infinity I ...

  4. [从今天开始修炼数据结构]图的最短路径 —— 迪杰斯特拉算法和弗洛伊德算法的详解与Java实现

    在网图和非网图中,最短路径的含义不同.非网图中边上没有权值,所谓的最短路径,其实就是两顶点之间经过的边数最少的路径:而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,我们称路径上第 ...

  5. 数据结构实验之图论七:驴友计划【迪杰斯特拉算法】(SDUT 3363)

    分析:可以求简单的任意两点间最短距离的稍微变形,一个板子题.  #include <iostream> #include <bits/stdc++.h> using names ...

  6. [数据结构]迪杰斯特拉(Dijkstra)算法

    基本思想 通过Dijkstra计算图G中的最短路径时,需要指定起点vs(即从顶点vs开始计算). 此外,引进两个集合S和U.S的作用是记录已求出最短路径的顶点,而U则是记录还未求出最短路径的顶点(以及 ...

  7. 数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法

    此处共同拥有两段代码: 一. 这段代码比較全面,当中參考了github上的相关源代码. 能够说功能强大. //Dijkstra(迪杰斯特拉算法) #include <stdio.h> #i ...

  8. 数据结构与算法——迪杰斯特拉(Dijkstra)算法

    tip:这个算法真的很难讲解,有些地方只能意会了,多思考多看几遍还是可以弄懂的. 应用场景-最短路径问题 战争时期,胜利乡有 7 个村庄 (A, B, C, D, E, F, G) ,现在有六个邮差, ...

  9. MIT挑战(如何在12个月内自学完成MIT计算机科学的33门课程|内附MIT公开课程资源和学习顺序

    译者注:本文译自Scott H. Young的博客,Scott拥有超强的学习能力,曾在12个月内自学完成麻省理工学院计算机科学的33门课程.本文就是他个人对于这次MIT挑战的介绍和总结. 版权声明:本 ...

随机推荐

  1. FORM表单 onclick()与onsubmit()

    FORM表单中onclick().submit()与onsubmit()的问题 最近遇到一次处理form数据的过滤,采用了button的onclick事件来检查,发现return false后表单仍然 ...

  2. 闭锁CountDownLatch与栅栏CyclicBarrier

    https://blog.csdn.net/lmc_wy/article/details/7866863   闭锁CountDownLatch与栅栏CyclicBarrier     浅谈 java ...

  3. linux入门—安装linux系统(1)

    一,linux介绍 linux是一套免费使用和自由传播的类Unix操作系统,简单的说就是不要钱,你可以随便使用,也可以分享给其他人. (剩下的详细内容,个人认为百度百科的内容比我瞎讲强的多,网址:ht ...

  4. 处理vue-quill-editor回显数据的时候没有空格问题

    这是我要实现的效果 这是我回显后的情况(可以看见空格都没有了) 处理后 处理方法  添加一个class="ql-editor" <quill-editor class=&qu ...

  5. 报错The "chunk" argument must be one of type string or Buffer. Received type object

    报错内容: TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be one of type string or ...

  6. mouseleave和mouseout的区别

    http://www.w3school.com.cn/tiy/t.asp?f=jquery_event_mouseleave_mouseout

  7. springboot使用RestHighLevelClient7简单操作ElasticSearch7增删查改/索引创建

    本次操作是在  Windows上安装ElasticSearch7  进行操作 导入依赖 <?xml version="1.0" encoding="UTF-8&qu ...

  8. 雪妖现世:给SAP Fiori Launchpad增添雪花纷飞的效果

    1995年7月,台湾大宇公司发布了一款国产单机角色扮演游戏神作:<仙剑奇侠传1>,所谓"一包烟,一杯茶",就能在电脑面前坐一整天. 这么经典的游戏Jerry当然已经通关 ...

  9. scrapy 下载器中间件 随机切换user-agent

    下载器中间件如下列表 ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 'scrapy.downloadermiddlewa ...

  10. [AWS][GUI][VNC]rhel 7 安装GUI ,配置VNC

    预计阅读时间:15分钟 预计配置时间:30分钟  (前提是已经申请AWS的EC2的rhel7 云主机并且成功运行) 目前AWS 亚马逊云免费试用一年,申请一个学习使用 痛点:没有GUI,无法搭建Jen ...