会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132903个问题
JAVA 全系列/第六阶段:项目管理与SSM框架/Spring 30361楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 30362楼
WEB前端全系列/第十阶段:Nodejs编程模块/Node.js基础 30364楼
Python 全系列/第一阶段:Python入门/控制语句 30365楼

class Node():
    """
    树结构
    """
    def __init__(self, datas, left, right):
        self.datas,self.left, self.right = datas, left, right

class Tree():
    def __init__(self, root = None):
        self.root = root
    def init_data(self, datas):
        node_dict = {}

        # 封装树节点
        for d in datas:
            node = Node(d['data'], d['left'], d['right'])
            node_dict[d['data']] = node
        # 根据节点关系 填充数据 
        for d in datas:
            node = node_dict[d['data']]
            if node.left:
                node.left = node_dict[node.left]
            if node.right:
                node.right = node_dict[node.right]
            if d['is_root']:
                self.root = node

    def search(self, subtree, value):
        if subtree is None:
            return None
        elif subtree.data > value:
            return self.search(subtree.left, value)
        elif subtree.data < value:
            return self.search(subtree.right, value)
        else:
            return subtree

if __name__ == '__main__':
    node_list = [
    {'data': 60, 'left': 12, 'right': 90, 'is_root': True},
    {'data': 12, 'left': 4, 'right': 41, 'is_root': False},
    {'data': 4, 'left': 1, 'right': None, 'is_root': False},
    {'data': 1, 'left': None, 'right': None, 'is_root': False},
    {'data': 41, 'left': 29, 'right': None, 'is_root': False},
    {'data': 29, 'left': 23, 'right': 37, 'is_root': False},
    {'data': 23, 'left': None, 'right': None, 'is_root': False},
    {'data': 37, 'left': None, 'right': None, 'is_root': False},
    {'data': 90, 'left': 71, 'right': 100, 'is_root': False},
    {'data': 71, 'left': None, 'right': 84, 'is_root': False},
    {'data': 100, 'left': None, 'right': None, 'is_root': False},
    {'data': 84, 'left': None, 'right': None, 'is_root': False},
]


    tree = Tree()
    tree.init_data(node_list)

    print(tree.search(tree.root, 41).data)
    # print(tree.search(tree.root, 55))

image.png

老师,请您帮忙看看是哪里错了,查了半天没找见

Python 全系列/第十五阶段:数据结构与算法/算法与数据结构(旧) 30366楼

image.png

JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 30367楼
Python 全系列/第一阶段:Python入门/编程基本概念 30368楼

老师,我这个路径不知道为什么报错,因为我以前也是这么放的没有报错,而且这个是相同路径啊,代码在最下面

image.png

#coding=utf-8
"""测试label写法,采用面向对象的方式"""

from tkinter import *
from tkinter import messagebox

class Application(Frame):#定义Application类,继承Frame类
    def __init__(self,master = None):
        super().__init__(master)#调用父类的构造方法
        self.master = master
        self.pack()#当框架中存放了组件时,就需要调用self.pack()进行组件的摆放
        self.creatWidget()

    def creatWidget(self):
        """创建组件"""
        self.label01 = Label(self,text="baizhan哦",width=10,height=2,
                             bg="yellow",fg="blue",font=("楷体",25))
        self.label01.pack()
        self.label02 = Label(self, text="bug好多", borderwidth=5,
                             relief="groove",justify="center")
        self.label02.pack()
        global photo#将photo声明为全局变量,如果是局部变量,本算法执行后图像对象销毁,窗口不显示图像
        photo = PhotoImage(file="1.gif")
        self.label03 = Label(self,image = photo)
        self.label03.pack()

if __name__ == "__main__":#若是本程序使用,非被调用
    root = Tk()#设置主窗口
    root.geometry("400x400+100-100")#设置窗口大小
    root.title("一个经典的gui程序类的测试")
    app = Application(master = root)

    root.mainloop()


Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 30372楼

package com.bjsxt.dao.impl;

import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.beanutils.BeanUtils;

import com.bjsxt.commons.JDBCUtil;
import com.bjsxt.dao.BaseDao;

/*
 * 创建BaseDaoimpl类实现BaseDao的接口,实现接口中的抽象方法
 * 将 对数据库操作的一整套流程 写成模板 以供使用
 */

public class BaseDaoimpl implements BaseDao {
	public  int excuteUpdate(String  sql ,Object[] param) {
		Connection conn =null;
		PreparedStatement ps =null;
		int rows=0;
		try {
			conn=JDBCUtil.getConnection();
			conn.setAutoCommit(false);//设置手动提交事务
			ps=conn.prepareStatement(sql);
			ParameterMetaData pmd = ps.getParameterMetaData();//获取sql语句中需要的参数个数
			
			//通过for循环绑定param数组中的参数到sql语句中
			//因为无法判断需要的参数是什么类型的,就用setObject将参数作为对象
			for(int i=0;i<pmd.getParameterCount();i++) {
				ps.setObject(i+1,param[i] ); //(位置,参数)
			}
			rows=ps.executeUpdate();//启动更新
			conn.commit();//手动开启事务提交
		} catch (Exception e) {
			e.printStackTrace();
			JDBCUtil.rollback(conn);//设置事务回滚
		}finally {
			JDBCUtil.closeResoure(ps, conn);
		}
		return rows;
	}

	/*
	 * 完成通用查询的方法,利用泛型
	 *使用ORM映射:即将            Department d = new Department();
							d.setDepartmentId(rs.getInt("department_id"));
							d.setDepartmentName(rs.getString("department_name"));
							d.setLocationId(rs.getInt("location_id"));
							这一步封装到对象中去
	关键点:需要将Dept类中,模型对象的属性名要和数据库中的列名相同
	 */
	@Override
	//参数分别表示:输入的查询SQL语句、用来保存Dept中属性的数组、类对象(某张表)
	public <T> List<T> find(String sql, Object[] param, Class<T> clazz) {
		Connection conn=null;
		PreparedStatement ps =null;
		ResultSet rs= null;
		List<T> list =new ArrayList<>();
		try {
			conn=JDBCUtil.getConnection();
			ps=conn.prepareStatement(sql);
			//调用特定方法得到sql语句中需要用的参数的个数
			ParameterMetaData pmd=ps.getParameterMetaData();
			//绑定参数
			for(int i=0;i<pmd.getParameterCount();i++) {
				ps.setObject(i+1, param[i]);
			}
			//处理结果集
			rs=ps.executeQuery();
			//获取结果集的信息,rs.getMetaData()返回是当前操作数据库的属性个数,即列数
			ResultSetMetaData rsmd =rs.getMetaData();
			while(rs.next()) {
				//完成ORM处理,通过反射获取类模板,并且实例化
				//因为具体用的是哪个类模板并不知道,所以用泛型T表示
				T bean = clazz.newInstance();//这句话相当于Department dept =new Department();
				for(int i=0;i<rsmd.getColumnCount();i++) {
						//利用Apache工具包,完成获取clazz对象中的属性
						//先获取数据库列名
						String columnName =rsmd.getColumnName(i+1);//通过列的位置获取列名
						Object value = rs.getObject(columnName);
						//通过Apache工具包中的BeanUtil工具类,将值封装到对象中
						BeanUtils.setProperty(bean, columnName, value);
					list.add(bean);//将获取的对象保存到集合中
				}
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtil.closeResoure(ps, conn);
			JDBCUtil.closeResultSet(rs);
		}
		return list;
	}

}

image.png

老师第一个红色圈中的ParameterMetaData这个类是怎么来的,它就是用来保存ps.getParameterMetaData获取的参数的个数的嘛,但是参数个数是整型,为什么不能用 int numbuer =ps.getParameterMetaData();表示呢


第二个圈中ResultSetMetaData也是一个特有的类嘛?同样的rsmd是用来保存属性个数的话为什么不可以用整型来保存?


黄色框中的rsmd.getColumnName(i+1)这方法,既然rsmd是参数个数的话,它怎么可以用 getColumnName(i+1)

Object类型的value表示的是什么?是获取列名所对应的Dept对象嘛?


JAVA 全系列/第三阶段:数据库编程/JDBC技术(旧) 30374楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637