我想要实现的是当相应的索引等于曲目编号时返回某个曲目。
private ArrayList<Track> tracksN;
public Track getTrack(int index)
{
for(int i = 0; i < tracksN.size(); i++)
{
if (tracksN.size().get(i)==index)
{
return i;
}
}
return null;
}
但我收到错误消息:int无法解除引用。
答案 0 :(得分:2)
我不明白为什么要迭代(当你需要i
曲目时)。你可以这样做:
public Track getTrack(int index) {
if (index >= 0 && index < tracksN.size()) {
return tracksN.get(index);
}
return null;
}
答案 1 :(得分:0)
这是错误的
if (tracksN.size().get(i)==index)
应该是
if (tracksN.get(i)==index)
tracksN
是ArrayList
,没有这样的方法.size().get(i)
。 tracksN.get(i)
将返回Track
您应该从中获取字段进行比较。
另请查看您的方法。
public Track getTrack(int index){ // you should return a Track not int
}
你必须纠正所有这些问题。
您可以使用get(index)
了解Java
答案 2 :(得分:0)
看!您将方法声明为:
public Track getTrack(int index)
{
/*..*/
}
因此返回值必须是Track或null值的实例。但是在循环中你返回一个int值。这就是为什么!
答案 3 :(得分:0)
看,我假设你有一个整数值为Track
的班级track
,如下所示:
public class Track{
public final int track;
public Track(final int track){
this.track = track;
}
public int getTrack(){
// this method is unnecessary if you declare
// track as public final
return track;
}
}
现在,您的方法应该在ArrayList
Track
个public Track getTrack(final int track){
for(final Track thisTrack: tracks){
if(thisTrack.getTrack() == track)
return thisTrack;
}
// the track wasn't found, return null
return null;
}
个对象中搜索预期的索引:
Track
所有这些都假定跟踪索引是唯一的 - 否则您将返回放入ArrayList
的第一个public final
对象,该对象符合您的搜索条件。
...更好的是,如果您对变量track
使用public Track getTrack(final int track){
for(final Track thisTrack: tracks){
if(thisTrack.track == track)
return thisTrack;
}
// the track wasn't found, return null
return null;
}
标识,那么您只需执行以下操作:
Track
如果要回收int track
个对象,那么内部varibale Track
应该是私有的,你应该提供getter和setter方法,但如果你认为public final int track
对象是创建它永远不会被更改(即是不可变的),那么你应该使用equals
声明,以便访问变量(永远不会改变并且是原始的)并不需要方法调用。
您还可以使用其他选项,我强烈反对,但您可以覆盖Object
中的indexOf
方法,并使用ArrayList
中的public class Track{
public final int track;
public Track(final int track){
this.track = track;
}
public int getTrack(){
// this method is unnecessary if you declare
// track as public final
return track;
}
@Override
public boolean equals(final Object o){
// make sure this object is a Track object
if(o instanceof Track){
final Track t = (Track)o;
// if the two track indices equal each other then they are
// same track object
return t.track == track;
}
// this Object isn't a Track object and so definitely isn't equal to
// this Track object
return false;
}
方法找到你的对象:
Track
然后在你的搜索中你可以创建一个新的public Track getTrack(final int track){
// create a new Track object to search for
final Track testTrack = new Track(track);
// get the index of this Track object (if isn't in the list, this will
// return -1)
final int index = tracks.indexOf(testTrack);
// if index is valid return the track at the given index, else
// return null (the Track doesn't exist).
return index >= 0 ? tracks.get(index) : null;
}
对象(这很糟糕,因为它为堆增加了不必要的内存,以后需要进行垃圾收集 - 将原语添加到堆栈中,这就是为什么上面是首选 - 一旦方法返回,立即回收添加到堆栈中的东西:
{{1}}