当前位置: 技术问答>java相关
***Java 学的好辛苦啊,想了好几天还是不明白啊:(***
来源: 互联网 发布时间:2015-04-02
本文导语: //:Snake.java /* 一条Snake(蛇)由数段构成,每一段的类型都是Snake。 每做好一段,都会使构建器第一个参数的值递减(int i),直至最终为零, 第二个参数(Char x)的值在每次循环构建器调用时都会递增,而为给每...
//:Snake.java
/* 一条Snake(蛇)由数段构成,每一段的类型都是Snake。
每做好一段,都会使构建器第一个参数的值递减(int i),直至最终为零,
第二个参数(Char x)的值在每次循环构建器调用时都会递增,而为给每段
赋予一个独一无二的标记(a,b,c...).
*/
public class Snake
{
private Snake next;
private char c;
//Constructor Snake(int i, char x)
Snake(int i, char x)
{
c = x;
if (--i > 0)
next = new Snake(i, (char)(x + 1)); //问题1。
}
//Overriding Method toString()
public String toString()
{
String s = ":" + c;
System.out.println(s); //问题3
if (next != null)
s += next.toString(); //问题2。
return s;
}
public static void main(String[] args)
{
Snake s = new Snake(5,'a');
System.out.println("s = " + s);
}
}
/*
运行本程序后,会出现如下的运行结果:
F:JavaApp>java Snake //问题3
:a
:b
:c
:d
:e
s = :a:b:c:d:e
问题是:
1、我认为虽然生成了多个新的Snake对象,但最终next变量存放的是最后一个对象的句柄,即Snake(1,'e').因为next不是一个数组。
2、我认为这是一个无限死循环,因为next不可能为null啊!!!
它指向的是Snake(1,'e').
3、 按照我的理解,运行结果中显示的始终是“:a”呀!!
Java 学的好辛苦啊,想了好几天还是不明白啊:(
请各位给我解释一下,谢谢!!!
*/
/* 一条Snake(蛇)由数段构成,每一段的类型都是Snake。
每做好一段,都会使构建器第一个参数的值递减(int i),直至最终为零,
第二个参数(Char x)的值在每次循环构建器调用时都会递增,而为给每段
赋予一个独一无二的标记(a,b,c...).
*/
public class Snake
{
private Snake next;
private char c;
//Constructor Snake(int i, char x)
Snake(int i, char x)
{
c = x;
if (--i > 0)
next = new Snake(i, (char)(x + 1)); //问题1。
}
//Overriding Method toString()
public String toString()
{
String s = ":" + c;
System.out.println(s); //问题3
if (next != null)
s += next.toString(); //问题2。
return s;
}
public static void main(String[] args)
{
Snake s = new Snake(5,'a');
System.out.println("s = " + s);
}
}
/*
运行本程序后,会出现如下的运行结果:
F:JavaApp>java Snake //问题3
:a
:b
:c
:d
:e
s = :a:b:c:d:e
问题是:
1、我认为虽然生成了多个新的Snake对象,但最终next变量存放的是最后一个对象的句柄,即Snake(1,'e').因为next不是一个数组。
2、我认为这是一个无限死循环,因为next不可能为null啊!!!
它指向的是Snake(1,'e').
3、 按照我的理解,运行结果中显示的始终是“:a”呀!!
Java 学的好辛苦啊,想了好几天还是不明白啊:(
请各位给我解释一下,谢谢!!!
*/
|
你这是链表,跟java有什么关系
而程序很正常,有什么可能是死循环
这样看行不:
if (--i > 0)
next = new Snake(i, (char)(x + 1)); //问题1。
else
next = null;
而程序很正常,有什么可能是死循环
这样看行不:
if (--i > 0)
next = new Snake(i, (char)(x + 1)); //问题1。
else
next = null;
|
这个程序没有什么问题啊!
next = new Snake(i, (char)(x + 1))
next我认为应该是指向你新生成的snake的一个指针!
每一个next都是如此!
在内存中就象是一个链表结构的!
呵呵,我也是新手,如果有错请指出
next = new Snake(i, (char)(x + 1))
next我认为应该是指向你新生成的snake的一个指针!
每一个next都是如此!
在内存中就象是一个链表结构的!
呵呵,我也是新手,如果有错请指出
|
1问题一
你忽略了next = new Snake(i, (char)(x + 1));的前提条件是
if (--i > 0)
既是只执行了4次。
2问题二
上面的问题,你如果能理解,这个就不难了,如楼上所说System.out.println(s)其实是5个Snake对象存的字符变量(a,b,c,d,e)
3问题三
s += next.toString();
是因为对作为class的next进行强制类型转换时发生的。
你忽略了next = new Snake(i, (char)(x + 1));的前提条件是
if (--i > 0)
既是只执行了4次。
2问题二
上面的问题,你如果能理解,这个就不难了,如楼上所说System.out.println(s)其实是5个Snake对象存的字符变量(a,b,c,d,e)
3问题三
s += next.toString();
是因为对作为class的next进行强制类型转换时发生的。
|
链表是一种很有用的数据结构,它由一个一个数据单元组成,就像蛇的一节一节。每一个数据单元由一个数据体和一个“指针”构成。指针指向下一个单元内的数据体,就这样延长下去。最后一个单元内的指针指向NULL。(我是初学者,有什么说的不对的请各位指出,谢谢:) )
|
因为你每次new一个snake对象他的next被初始化的值是default的
是null
是null
|
你这个贪吃的蛇有人实现了,你可以到www.chinajavaworld.com去,就在首页上。
|
你的toString方法并没有执行啊 因为你没有调用它
|
vj++6.0
|
学习
|
C++的连表就把我搞的头都大了
最后决定改学java 了,怎么这里还有连表啊!!!
看不懂啊,怎么办?
:(
最后决定改学java 了,怎么这里还有连表啊!!!
看不懂啊,怎么办?
:(