Java写的一个双向链表模板,出了点问题,应用不了自己写的内部类,却能应用String类

问题描述

package com.read.List;public class DbLinkedList<T> {//定义内部类,用作链表的节点 private class Node<T> { Node<T> pre; //指向前一个节点 Node<T> next; //指向后一个节点 T value; //当前节点的值 public Node(T value, Node<T> next, Node<T> pre) { this.value = value; this.next = next; this.pre = pre; } public String toString() { return this.value + ""; } } public Node<T> header; //定义头节点 public int size; //定义链表的长度 public int flag; //指针所在位置 public DbLinkedList() { this.header = new Node<T>(null, null, null);//空的头节点,用来区分双向循环链表的首尾 this.flag = 0; this.size = 0; } public void add(T value)//在链表的尾巴上面加一个节点 { Node<T> temp=entry(size); temp.value=value; Node<T> next=new Node<T>(null, null, null); next.pre=temp; temp.next=next; this.flag++; this.size=this.flag; } public T get(int index) { return entry(index-1).value; } private Node<T> entry(int index) //迭代至index处的节点 { Node<T> node = this.header; for(int i=1; i<=index; i++) { node = node.next; } return node; } public void clear() { this.header = new Node<T>(null, null, null); this.size = 0; this.flag = 0; } //标志从当前位置前移一位,表示此时后进了一步 public boolean flagpre() { if(flag==0) //标志在第一步,不能再后退了 { return false; } flag--; return true; } //标志从当前位置前后一位,表示此时前进了一步 public boolean flagnext() { if(flag==size) //标志在最后一步,不能再后退了 { return false; } flag++; return true; } //在第一步时返回true public boolean firststep() { if(flag==0) { return true; } return false; } //在最后一步时返回true public boolean endstep() { if(flag==size) { return true; } return false; } public boolean isEmpty() { return this.size == 0; } public int size() { return this.size; } }package com.read.List;public class god {public static class select{String name;String x;String y;select(){}public void clear(){name=null;x=null;y=null;}}public static void main(String[] args){DbLinkedList<select> List=new DbLinkedList<select>();select temp=new select();for(int i=0;i<5;i++){temp.clear();temp.name="No."+i;temp.x="x="+i;temp.y="y="+i;List.add(temp);}temp=List.get(List.flag);System.out.println(temp.name);System.out.println(temp.x);System.out.println(temp.y);temp.clear();System.out.println(List.flag);List.flagpre();System.out.println(List.flag);temp=List.get(List.flag);System.out.println(temp.name);System.out.println(temp.x);System.out.println(temp.y);DbLinkedList<String> it=new DbLinkedList<String>();it.add("0");it.add("1");it.add("2");it.add("3");it.add("4");System.out.println(it.get(it.flag));it.flagpre();System.out.println(it.get(it.flag));}}控制台结果:No.4x=4y=454nullnullnull43其中,temp第二次赋值失败了(3个null),it成功了(3)ps:本人是新来的,积分少,见谅!

解决方案

select temp=new select(); for(int i=0;i<5;i++) { temp.clear(); temp.name="No."+i; temp.x="x="+i; temp.y="y="+i; List.add(temp); } 只创建了一个select对象,然后又temp.clear(); 输出当然是null了。不是第二次赋值失败,而是所有的引用都指向了一个对象。Java里面的对象=赋值类似与C++中的引用,不会创建新的对象的。所有select尽管循环了五次,只有一个而已。

时间: 2024-09-04 00:12:07

Java写的一个双向链表模板,出了点问题,应用不了自己写的内部类,却能应用String类的相关文章

listview-ListView 的问题,按照书上例子,仿写了一个,结果出问题了,请大家看看到底哪里出错了啊

问题描述 ListView 的问题,按照书上例子,仿写了一个,结果出问题了,请大家看看到底哪里出错了啊 先是有两个布局文件,一个是关于ListView控件的,另一个是我自己定的线性布局,实现的是一个字符旁边先是一个图样. xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent&

javascript-c# aspx 用js写了一个登陆框 想把登陆框的账号和密码 写在web.config

问题描述 c# aspx 用js写了一个登陆框 想把登陆框的账号和密码 写在web.config c# aspx 用js写了一个登陆框 想把登陆框的账号和密码 写在web.config里面 点击登陆的时候那文本框的账号密码去和web.config的做匹配 一样就登陆成功 解决方案 <appSettings> <add key=""userName"" value=""xxx"" /> <add k

写了一个JDBC就出了个异常,哎。。

问题描述 在电脑里装了一个oracle11g想用eclipse写个连接数据的程序,复习一下JDBC,代码如下:packageoracle;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;publicclassSQLManager{privatestaticfinal

自己写的一个jquery模板引擎(json比较好用)

还是一个未完成的项目,缺乏对if等的支持,希望大家能提供一下参考的意见,让我把它 写完 js代码部分 1 /// <reference path="jquery-1.3.2-vsdoc.js" /> 2 var json = { "result": "success", "total": 3, "page": 1, "rows": [{ "QuestionID&qu

JavaScript写的一个DIV 弹出网页对话框_javascript技巧

网上搜索到的代码,做了一些修改该, 修正无法自定义颜色,修正IE8 下错误,以及其他小BUG 兼容IE6~8以及火狐 可以自定义 // 提示窗口标题高度 // 提示窗口的边框颜色 // 提示窗口的标题颜色 // 提示窗口的标题背景色 // 提示内容的背景色 // 提示内容文字对齐方式 功能 可以弹出一个大DIV遮住页面(IE下 透明) 然后在屏幕中央显示显示一个小DIV 可用作功能提示 操作提示 以及公告等 提示内容可以使带HTML标记的文字,也可是一个页面链接 复制代码 代码如下: funct

JavaScript写的一个自定义弹出式对话框代码_javascript技巧

下图是我的设计思路 下面是具体的js代码 1,首先定义几个自定义函数 代码 复制代码 代码如下: //判断是否为数组 function isArray(v) { return v && typeof v.length == 'number' && typeof v.splice == 'function'; } //创建元素 function createEle(tagName) { return document.createElement(tagName); } //在

写了一个layout,拖动条连贯,内容区可为iframe_javascript技巧

写一个layout本来是一个很简单的事情,可这次的一个layout问题确让我为难了许久才做出来,下面来大概讲解一下问题的出现与解决过程. 注:本文代码皆基于jquery实现. 按照普通的方法写一个layout,一般是用一个table来实现,用中间的td拖动来控制左右两个td的大小,这个问题简单,很快就搞定.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.

微软-用c# 写的一个解压文件的程序 解压之后里面的文件不见了 贴上代码~

问题描述 用c# 写的一个解压文件的程序 解压之后里面的文件不见了 贴上代码~ string the_rar; RegistryKey the_Reg; object the_Obj; string the_Info; try { the_Reg = Registry.LocalMachine.OpenSubKey(@"SOFTWAREMicrosoftWindowsCurrentVersionApp PathsWinRAR.exe"); the_Obj = the_Reg.GetVa

编译-用Java写了一个五子棋游戏,插入背景音乐出了问题。求大神指教

问题描述 用Java写了一个五子棋游戏,插入背景音乐出了问题.求大神指教 用Java写了一个五子棋游戏,插入背景音乐.第一遍音乐结束就不放了,不能暂停,重新播放和循环播放等功能.我编译的时候用的是Java应用程序,不是APPlet. package cn.edu.ouc.fiveChess; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound