「java语法树状图」语言学句法树状图

博主:adminadmin 2022-12-01 14:20:07 81

本篇文章给大家谈谈java语法树状图,以及语言学句法树状图对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

哪位大侠可以帮我写一段java代码!是关于根据数据库里的数据来形成一个动态树形图

这是代码,你可以自己调试一下。

数据结构如下:

CREATE TABLE dtree (

id int,

pid int,

name varchar(200),

url varchar(200),

title varchar(200),

target varchar(200),

icon varchar(200),

iconopen varchar(200),

opened bit);

为了实现获取数据库变量功能,需要建立一个DTree类,并编译生成CLASS文件,放入\WEB-INF\classes文件夹下。

DTree类代码如下:

package work3;

public class DTree {

private int id;

private int pid;

private String name;

private String url;

private String title;

private String target;

private String icon;

private String iconOpen;

private int opened;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public int getPid() {

return pid;

}

public void setPid(int pid) {

this.pid = pid;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getTarget() {

return target;

}

public void setTarget(String target) {

this.target = target;

}

public String getIcon() {

return icon;

}

public void setIcon(String icon) {

this.icon = icon;

}

public String getIconOpen() {

return iconOpen;

}

public void setIconOpen(String iconOpen) {

this.iconOpen = iconOpen;

}

public int getOpened() {

return opened;

}

public void setOpened(int opened) {

this.opened = opened;

}

}

work3.jsp代码如下:

%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%

%@ page import="java.sql.*"%

jsp:useBean id='settree' scope="application" class="work3.DTree" /

!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

""

html

head

meta http-equiv="Content-Type" content="text/html; charset=GB18030"

link rel="StyleSheet" href="dtree.css" type="text/css" /

script type="text/javascript" src="dtree.js"/script

titledTree in MySQL/title

/head

body

h2

Example

/h2

div class="dtree"

p

a href="javascript: d.openAll();"open all/a |

a href="javascript: d.closeAll();"close all/a

/p

script type="text/javascript"

!--

d = new dTree('d');

%

//驱动程序名

String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";

//数据库用户名

String userName = "sa";

//密码

String userPwd = "1";

//数据库名

String dbName = "master";

//表名

String tableName = "dtree";

//连接字符串

String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName="+dbName;

//加载驱动

Class.forName(driverName).newInstance();

//连接数据库

java.sql.Connection conn = DriverManager.getConnection(url,userName,userPwd);

//得到Statement实例

java.sql.Statement statement = conn.createStatement();

//查询数据

String sql = "select * from " + tableName;

//返回结果

java.sql.ResultSet rs = statement.executeQuery(sql);

//获取变量

while (rs.next()) {

settree.setId(rs.getInt(1));

settree.setPid(rs.getInt(2));

settree.setName(rs.getString(3));

settree.setUrl(rs.getString(4));

settree.setTitle(rs.getString(5));

settree.setTarget(rs.getString(6));

settree.setIcon(rs.getString(7));

settree.setIconOpen(rs.getString(8));

settree.setOpened(rs.getInt(9));

if(settree.getPid()==0)

settree.setOpened(1);

%

d.add(%=settree.getId()%,%=settree.getPid()%,'%=settree.getName()%','%=settree.getUrl()%','%=settree.getTitle()%','%=settree.getTarget()%','','',%=settree.getOpened()%);

%

}

%

document.write(d);

//--

/script

/div

/body

/html

怎么用Java统计记事本里的词条,并做成一个树状图

思路:

首先你要把词条的数据源整理好

然后把数据源和你的记事本读取的数据进行比较

最后统计每个词条出现的次数,并做成树状图

哪位大神可以帮帮忙啊,我想用Java读取Excel的数据并做成树状图,横坐标

下面是一个简单的读取例子,如果报“java.io.IOException: Invalid header signature; read 4503608217567241, expected -2226271756974174256”之类的异常请用Excel打开(如果能打的开的话)然后另存为一下。

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Date;

import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class Test0 {

 /**

  * @param args

  * @throws IOException

  * @throws FileNotFoundException

  */

 public static void main(String[] args) throws FileNotFoundException,

   IOException {

  File file = new File("C://test01.xls");// Excel文件路径

  String[][] result = getData(file, 1);

  int rowLength = result.length;

  for (int i = 0; i  rowLength; i++) {

   for (int j = 0; j  result[i].length; j++) {

    System.out.print(result[i][j] + "\t\t");

   }

   System.out.println();

  }

 }

 /**

  * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行

  * 

  * @param file

  *            读取数据的源Excel

  * @param ignoreRows

  *            读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1

  * @return 读出的Excel中数据的内容

  * @throws FileNotFoundException

  * @throws IOException

  */

 public static String[][] getData(File file, int ignoreRows)

   throws FileNotFoundException, IOException {

  ListString[] result = new ArrayListString[]();

  int rowSize = 0;

  BufferedInputStream in = new BufferedInputStream(new FileInputStream(

    file));

  // 打开HSSFWorkbook

  POIFSFileSystem fs = new POIFSFileSystem(in);

  HSSFWorkbook wb = new HSSFWorkbook(fs);

  HSSFCell cell = null;

  for (int sheetIndex = 0; sheetIndex  wb.getNumberOfSheets(); sheetIndex++) {

   HSSFSheet st = wb.getSheetAt(sheetIndex);

   // 第一行为标题,不取

   for (int rowIndex = ignoreRows; rowIndex = st.getLastRowNum(); rowIndex++) {

    HSSFRow row = st.getRow(rowIndex);

    if (row == null) {

     continue;

    }

    int tempRowSize = row.getLastCellNum() + 1;

    if (tempRowSize  rowSize) {

     rowSize = tempRowSize;

    }

    String[] values = new String[rowSize];

    Arrays.fill(values, "");

    boolean hasValue = false;

    for (short columnIndex = 0; columnIndex = row.getLastCellNum(); columnIndex++) {

     String value = "";

     cell = row.getCell(columnIndex);

     if (cell != null) {

      // 注意:一定要设成这个,否则可能会出现乱码

      cell.setEncoding(HSSFCell.ENCODING_UTF_16);

      switch (cell.getCellType()) {

      case HSSFCell.CELL_TYPE_STRING:

       value = cell.getStringCellValue();

       break;

      case HSSFCell.CELL_TYPE_NUMERIC:

       if (HSSFDateUtil.isCellDateFormatted(cell)) {

        Date date = cell.getDateCellValue();

        if (date != null) {

         value = new SimpleDateFormat("-MM-dd")

           .format(date);

        } else {

         value = "";

        }

       } else {

        value = new DecimalFormat("0").format(cell

          .getNumericCellValue());

       }

       break;

      case HSSFCell.CELL_TYPE_FORMULA:

       // 导入时如果为公式生成的数据则无值

       if (!cell.getStringCellValue().equals("")) {

        value = cell.getStringCellValue();

       } else {

        value = cell.getNumericCellValue() + "";

       }

       break;

      case HSSFCell.CELL_TYPE_BLANK:

       break;

      case HSSFCell.CELL_TYPE_ERROR:

       value = "";

       break;

      case HSSFCell.CELL_TYPE_BOOLEAN:

       value = (cell.getBooleanCellValue() == true ? "Y"

         : "N");

       break;

      default:

       value = "";

      }

     }

     if (columnIndex == 0  value.trim().equals("")) {

      break;

     }

     values[columnIndex] = rightTrim(value);

     hasValue = true;

    }

    if (hasValue) {

     result.add(values);

    }

   }

  }

  in.close();

  String[][] returnArray = new String[result.size()][rowSize];

  for (int i = 0; i  returnArray.length; i++) {

   returnArray[i] = (String[]) result.get(i);

  }

  return returnArray;

 }

 /**

  * 去掉字符串右边的空格

  * 

  * @param str

  *            要处理的字符串

  * @return 处理后的字符串

  */

 public static String rightTrim(String str) {

  if (str == null) {

   return "";

  }

  int length = str.length();

  for (int i = length - 1; i = 0; i--) {

   if (str.charAt(i) != 0x20) {

    break;

   }

   length--;

  }

  return str.substring(0, length);

 }

}

请问这个树状图在Java中应该怎么做?

打个比方

可以写一个Tree的类

public class Tree extends BaseDomain {

private String id;

private String key;

private String icon;

private String title;

private String value;

private String text;

private String code;

private String mtype;

private String type;

/**

* 部门的特殊个别字段

* 1.部门 / 2.岗位 的编码

*/

private String number;

private Double order;

private Double sort;

private String href;

private String component;

private ListTreeT children;

private String parentId;

private boolean hasParent = false;

private boolean hasChildren = false;

private Date createTime;

private Date modifyTime;

public void initChildren(){

this.children = new ArrayList();

}

}

在写一个工具类

public class TreeUtil {

protected TreeUtil() {

}

private final static String TOP_NODE_ID = "0";

/**

* 用于构建菜单

*

* @param nodes nodes

* @param T   T

* @return T TreeT

*/

public static T TreeT build(ListTreeT nodes) {

if (nodes == null) {

return null;

}

ListTreeT topNodes = new ArrayList();

nodes.forEach(node - {

String pid = node.getParentId();

if (pid == null || TOP_NODE_ID.equals(pid)) {

topNodes.add(node);

return;

}

for (TreeT n : nodes) {

String id = n.getId();

if (id != null id.equals(pid)) {

if (n.getChildren() == null)

n.initChildren();

n.getChildren().add(node);

node.setHasParent(true);

n.setHasChildren(true);

n.setHasParent(true);

return;

}

}

if (topNodes.isEmpty())

topNodes.add(node);

});

TreeT root = new Tree();

root.setId("0");

root.setParentId("");

root.setHasParent(false);

root.setHasChildren(true);

root.setChildren(topNodes);

root.setText("root");

return root;

}

}

写完了这两个在写业务层

一个构建书的方法

private void buildTrees(List trees, List menus, List ids) {

menus.forEach(menu - {

ids.add(menu.getId().toString());

Tree tree = new Tree();

tree.setId(menu.getId().toString());

tree.setKey(tree.getId());

tree.setParentId(menu.getParentId().toString());

tree.setText(menu.getName());

tree.setTitle(tree.getText());

tree.setIcon(menu.getIcon());

tree.setComponent(menu.getComponent());

tree.setCreateTime(menu.getCreateTime());

tree.setCreateTime(menu.getCreateTime());

tree.setHref(menu.getHref());

tree.setSort(menu.getSort());

tree.setCode(menu.getCode());

tree.setMtype(menu.getMtype());

trees.add(tree);

});

}

MapString, Object result = new HashMap();

ListDept depts = findDepts(dept, request);

ListTreeDept trees = new ArrayList();

buildTrees(trees, depts);

TreeDept deptTree = TreeUtil.build(trees);

result.put("rows", deptTree);

result.put("total", depts.size());

java树状结构图如果控制权限,我是把数据全部存在一张表中,子节点存有父节点的id号,树状图已经出来

我想你这个要实现的所谓的权限应该是,只要用户点击某个节点就查询其是否有该节点的权限吧?如果有权限就展示有权限操作的内容,没有就提示没有权限?我不知道我理解的对不对。

或者是另一种情况,就是当前登录的用户有哪些菜单的权限就在树形图中只展示他有权限的菜单。

前者需要通过ajax去数据库判断,当然如果对无刷新要求不高可以直接跳action去数据库判断;后者在输出树状图的时候就把权限判断好,后面就不需要判断了。

如何用Java实现树形结构啊?

package tree;

import java.util.LinkedList;

import java.util.List;

/**

* 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历

*

* 参考资料0:数据结构(C语言版)严蔚敏

*

* 参考资料1:

*

* 参考资料2:

*

* @author ocaicai@yeah.net @date: 2011-5-17

*

*/

public class BinTreeTraverse2 {

private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

private static ListNode nodeList = null;

/**

* 内部类:节点

*

* @author ocaicai@yeah.net @date: 2011-5-17

*

*/

private static class Node {

Node leftChild;

Node rightChild;

int data;

Node(int newData) {

leftChild = null;

rightChild = null;

data = newData;

}

}

public void createBinTree() {

nodeList = new LinkedListNode();

// 将一个数组的值依次转换为Node节点

for (int nodeIndex = 0; nodeIndex array.length; nodeIndex++) {

nodeList.add(new Node(array[nodeIndex]));

}

// 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树

for (int parentIndex = 0; parentIndex array.length / 2 - 1; parentIndex++) {

// 左孩子

nodeList.get(parentIndex).leftChild = nodeList

.get(parentIndex * 2 + 1);

// 右孩子

nodeList.get(parentIndex).rightChild = nodeList

.get(parentIndex * 2 + 2);

}

// 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理

int lastParentIndex = array.length / 2 - 1;

// 左孩子

nodeList.get(lastParentIndex).leftChild = nodeList

.get(lastParentIndex * 2 + 1);

// 右孩子,如果数组的长度为奇数才建立右孩子

if (array.length % 2 == 1) {

nodeList.get(lastParentIndex).rightChild = nodeList

.get(lastParentIndex * 2 + 2);

}

}

/**

* 先序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void preOrderTraverse(Node node) {

if (node == null)

return;

System.out.print(node.data + " ");

preOrderTraverse(node.leftChild);

preOrderTraverse(node.rightChild);

}

/**

* 中序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void inOrderTraverse(Node node) {

if (node == null)

return;

inOrderTraverse(node.leftChild);

System.out.print(node.data + " ");

inOrderTraverse(node.rightChild);

}

/**

* 后序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void postOrderTraverse(Node node) {

if (node == null)

return;

postOrderTraverse(node.leftChild);

postOrderTraverse(node.rightChild);

System.out.print(node.data + " ");

}

public static void main(String[] args) {

BinTreeTraverse2 binTree = new BinTreeTraverse2();

binTree.createBinTree();

// nodeList中第0个索引处的值即为根节点

Node root = nodeList.get(0);

System.out.println("先序遍历:");

preOrderTraverse(root);

System.out.println();

System.out.println("中序遍历:");

inOrderTraverse(root);

System.out.println();

System.out.println("后序遍历:");

postOrderTraverse(root);

}

}

java语法树状图的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于语言学句法树状图、java语法树状图的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-01,除非注明,否则均为首码项目网原创文章,转载请注明出处。