日期:2014-05-20  浏览次数:20634 次

新手编译不过去,是书上的答案
有一个equals()重写的问题

书上给的答案是这样的,可小弟就是编译不出来,麻烦各位看一下


class   Movie
{
int   year;
String   name;
public   boolean   equals   (Object   obj)
{
if   (obj   instanceof   Movie)
{
{ Movie   m=(Movie)obj;}

if   (name.equals(m.name)&&year==m.year))
{
return     true;
}
}
 
return     false;

}
}

------解决方案--------------------
1. { Movie m=(Movie)obj;}
花括号去掉
2. if (name.equals(m.name)&&year==m.year))
后面多了个小括号
------解决方案--------------------
1:if (obj instanceof Movie) 意思:如果传来的Object 是Movie类型 (虽然Movie是你定义的一个类,但这也是一个数据类型)

2: { Movie m=(Movie)obj;} 前边的花括号去掉!!
3:if (name.equals(m.name)&&year==m.year)) 是name的值如果和传来的name相同并且year和传来的year相同就 return true;

你的代码改写为:
class Movie
{
int year;
String name;
public boolean equals (Object obj)
{
private Movie m;//这个要定义在if外边 ,要不下边的if就调用不到
if (obj instanceof Movie){
m=(Movie)obj;
}

if (name.equals(m.name)&&year==m.year)){
return true;
}
return false;
}
}



------解决方案--------------------
楼上们说的都差不多了。。。
------解决方案--------------------
class Movie {
int year;

String name;

public boolean equals(Object obj) {
if (obj instanceof Movie) {

Movie m = (Movie) obj;

if (name.equals(m.name) && year == m.year) {
return true;
}
}

return false;

}
}
------解决方案--------------------
楼上都说了,括号配对问题。
太乱了,格式化一下就能看出来了。