会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132808个问题
JAVA 全系列/第一阶段:JAVA 快速入门/变量、数据类型、运算符 12258楼
JAVA 全系列/(隐藏)第二十三阶段:数字货币交易所项目/服务中台_后台管理系统的开发 12259楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Maven 12260楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 12263楼

package com.bjxst;

public class MyDoublyLinkedList<E> implements MyList<E> {
    private Node head;
    private Node tail;
    private int size;

    @Override
    public void add(E element) {
        this.linkedLast(element);

    }
    private void linkedLast(E element){
        //首先获取尾部节点
        Node t = this.tail;
        //创建节点对象
        Node node1 =new Node(t,null,element);

        node1=this.tail;
        if(t==null){
            node1 =this.head;
        }else{
            node1 = t.next;
        }
        this.size++;
    }

    @Override
    public E get(int index) {
        //对Index做合法性校验
        this.checkIndex(index);

        //根据节点对象查找位置
        Node<E> node = this.getNode(index);
        return node.item;

    }
    private void checkIndex(int index){
        if(!(index>=0&&index<this.size)){
            throw new IndexOutOfBoundsException("index"+index+"size"+size);
        }
    }
    private Node getNode(int index){
        if (index<(this.size>>1)){
            Node node = this.head;
            for (int i=0;i<index;i++){
                node = node.next;
            }
            return node;
        }else{
            Node node = this.tail;
            for (int i=this.size-1;i>index;i--){
                node = node = node.prev;
            }
            return node;
        }




    }

    @Override
    public int size() {
        return this.size;
    }

    @Override
    public E remove(int index) {
        //对index进行合法性校验
        this.checkIndex(index);
        //根据指定位置获取节点对象
        Node<E> node = this.getNode(index);
        //获取节点对象中的元素
        E item = node.item;
        //判断当前节点是否为头节点
        if(node.prev ==null){
            node.next=this.head;

        }else{
            node.prev.next = node.next;

        }
        //判断当前节点是否为尾结点
        if(node.next==null){
            node.prev = this.tail;
        }else{
            node.next.prev = node.prev;
        }
        node.next =null;
        node.prev= null;
        node.item =null;

        this.size--;
        return item;


    }
    //创建节点内部类
    class Node<E>{
        E item;
        Node<E> prev;
        Node<E> next;
        Node(Node<E> prev,Node<E> next,E item){
            this.prev = prev;
            this.next=next;
            this.item = item;
        }
    }
    public void addFirst(E element){
        this.linkFirst(element);
    }
    private void linkFirst(E element){
        //获取头结点对象
        Node head = this.head;
        Node node1 = new Node(null,head,element);
        //将新节点定为头节点
        node1 =this.head;

        if(head==null){
            node1 = this.tail;
        }else{
            node1=head.prev;
        }
        this.size++;
    }
    public void addLast(E element){
        this.linkedLast(element);
    }

    public static void main(String[] args) {
        MyList<String> myList = new MyDoublyLinkedList<>();
        myList.add("a");
        myList.add("b");
        myList.add("at");
        myList.add("e");
        myList.add("e");



        System.out.println(myList.remove(3));
    }
}

屏幕截图 2021-08-30 093615.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 12264楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程技术(旧) 12265楼
JAVA 全系列/第五阶段:JavaWeb开发/Servlet技术详解 12266楼

老师,请问为什么我i这里文件不存在啊,我的图片是放在桌面上的

# tftp下载器
from socket import *
import struct     # 帮助组织数据
filename = 'siyue.jpg'    # 存放要下载的文件名
server_ip = '10.174.149.195'  # 存放服务器所在的IP地址
send_data = struct.pack('!H%dsb5sb' % len(filename), 1, filename.encode(), 0, 'octet'.encode(), 0)
s = socket(AF_INET, SOCK_DGRAM)    # 创建套接字对象
s.sendto(send_data, (server_ip, 69))  # 第一次发送,链接服务器69端口
f = open(filename, 'ab')   # 创建一个空文件,名字与我们要下载的文件同名,a:以追加模式打开(必要时可以创建)append;b:表示二进制
while True:
    recv_data = s.recvfrom(1024)  # 接收数据
    caozuoma, ask_num = struct.unpack('!HH', recv_data[0][:4])  # 获取操作码、数据块编号
    rand_port = recv_data[1][1]   # 获取服务器的随机端口

    if int(caozuoma) == 5:
        print('文件不存在...')
        break
    print("操作码:%d,ACK:%d,服务器随机端口:%d,数据长度:%d"%(caozuoma, ack_num, rand_port, len(recv_data[0])))
    f.write(recv_data[0][4:])   # 将数据写入
    if len(recv_data[0]) < 516:
        break
    ack_data = struct.pack("!HH", 4, ack_num)
                          # 操作码和快编号分别占用两个空间
    s.sendto(ack_data, (server_ip, rand_port))   # 回复ACK确认包

image.png

Python 全系列/第三阶段:Python 网络与并发编程/网络通信 12268楼
JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 12270楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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