实在不明白,请来看看~~~

llm0528 2008-06-05 11:04:02
以下是两段简单的代码,但有几个地方不是很懂,请帮忙解释下,谢谢~~~~对了,所有帮忙解答的朋友,请说的详细些,我比较菜!!!

第一段:
import java.util.Random;

public class MagicHat{
static int maxRabbits = 5;
static Random select = new Random();

public MagicHat(String hatName){
this.hatName = hatName;
rabbits = new Rabbit[1 + select.nextInt(maxRabbits)];

for(int i = 0; i <rabbits.length; i++){
rabbits[i] = new Rabbit();
}
}

public String toString(){ //问题标签
String hatString = "\n" + hatName + " contains:\n";

for(Rabbit rabbit : rabbits){ //问题标签
hatString += " " + rabbit;
}
return hatString;
}
private String hatName;
private Rabbit rabbits[];

static class Rabbit{
static private String[] rabbitNames = {"Floppsy", "Moppsy", "Gnasher", "Thumper"};
static private int[] rabbitNamesCount = new int[rabbitNames.length];
private String name;

public Rabbit(){
int index = select.nextInt(rabbitNames.length);
name = rabbitNames[index] + (++rabbitNamesCount[index]); //问题标签
}

public String toString(){
return name;
}
}
}

第二段:
public class TryNestedClass{
static public void main(String[] args){
System.out.println(new MagicHat("Gray Topper"));
System.out.println(new MagicHat("Black Topper"));
System.out.println(new MagicHat("Baseball Cap"));
}
}

问题1:
(++rabbitNamesCount[index])int类型会先将自己初试化为0,然后再将=号后面的值赋予变量,是这样子伐??
那么对于数组呢?变量拥有的仅仅只是引用而已,它又怎么把它变成数字的呢??

问题2:
for(Rabbit rabbit : rabbits){//Rabbit是嵌套的类。rabbit这里是Rabbit的类变量。rabbits是个只有元素数,没有实际数据的数组
hatString += " " + rabbit; //这个不是应该根据rabbits的数组元素来,决定循环的次数的吗?但是结果是每次调用,只循环了一次。但是,rabbits数组里的元素只止一个!!
}

问题3:
这段代码中,最后通过toString来显示类对象,它在哪里被调用了?toString()是作为运算符操作数时自动调用的吧,可是第二段代码中,哪来的运算符?

问题4:
整段代码要显示嵌套类的内容,但是我却不知道在哪里调用了嵌套类Rabbit,难道是上面的for循环??为什么呢?
...全文
115 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
npuhetao 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java_xinjun 的回复:]
问题1: java虽然没有了指针的概念,但是变量的概念你可以理解为指针,变量中会有一个指针指向有实际数据的内存块。另外,我的理解所有的变量都要手工初始化一下,避免出现错误。
问题3:toString类是重写,java中所有的类都继承Object类,这个类里面有toString方法,所以每个类都会有一个toString方法,只是你没有注意。
其余两个问题等待高手给你回答吧,我能理解,但是怕解释不好耽误你的学习。
[/Quote]
捏造的信仰 2008-06-05
  • 打赏
  • 举报
回复
++rabbitNamesCount[index] 就是 rabbitNamesCount[index] + 1 ,哪个混蛋故意写成这么难懂的方式。

int[] ints = new int[10],这 10 个元素都会初始化为 0。你自己不会写个程序验证一下吗?

MagicRat 构造函数中:
rabbits = new Rabbit[1 + select.nextInt(maxRabbits)];
谁说 rabbits 数组里的元素只止一个?

第一段代码没有 main 方法,也没有地方在调用 toString()。

楼主看看 System.out.println() 的源代码,就知道怎么回事了。

rabbits[i] = new Rabbit(); 这里不是调用了嵌套类吗?
wxinb 2008-06-05
  • 打赏
  • 举报
回复
问题1:rabbitNamesCount[index] 如果值是5 执行 【++rabbitNamesCount[index]】后表达式的值为6,并且rabbitNamesCount[index]为6;
lifanfly 2008-06-05
  • 打赏
  • 举报
回复
问题1: java虽然没有了指针的概念,但是变量的概念你可以理解为指针,变量中会有一个指针指向有实际数据的内存块。另外,我的理解所有的变量都要手工初始化一下,避免出现错误。
问题3:toString类是重写,java中所有的类都继承Object类,这个类里面有toString方法,所以每个类都会有一个toString方法,只是你没有注意。
其余两个问题等待高手给你回答吧,我能理解,但是怕解释不好耽误你的学习。
apples_009 2008-06-05
  • 打赏
  • 举报
回复
怎么又发一次..LZ慢慢理解楼上的就会明白了..
hongke1490 2008-06-05
  • 打赏
  • 举报
回复
问题1:
++rabbitNamesCount[index] 就是 rabbitNamesCount[index] + 1
问题2:
private Rabbit rabbits[];
显然,rabbits是一个Rabbit数组。
for(Rabbit rabbit : rabbits){

Rabbit rabbit;
for(int i=0;i<rabbits.length;i++){
rabbit = rabbits[i];
等价。
问题3:
对象强制转换成String时,会自动调用对象的toString方法。
问题4:
for循环中hatString += " " + rabbit;
会调用Rabbit的toString方法,取得rabbit的名字。
这么说不知道你能不能理解。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧