Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList与Array。为什么一个工作,一个不工作?_Java_Arrays_Arraylist - Fatal编程技术网

Java ArrayList与Array。为什么一个工作,一个不工作?

Java ArrayList与Array。为什么一个工作,一个不工作?,java,arrays,arraylist,Java,Arrays,Arraylist,我一直在尝试将一个较旧的赋值从数组切换到arraylist,但无论出于何种原因,当我将find方法修改为使用arraylist时,find方法无法工作。。似乎总是返回-1 这是一个大型类的一部分,所以除非完全必要,否则我不想包含所有内容,但我确实包含了声明,以防它们很重要: public class Switch { private SwitchEntry[] camTable; private int numEntries; private int maxEntries

我一直在尝试将一个较旧的赋值从数组切换到arraylist,但无论出于何种原因,当我将find方法修改为使用arraylist时,find方法无法工作。。似乎总是返回-1

这是一个大型类的一部分,所以除非完全必要,否则我不想包含所有内容,但我确实包含了声明,以防它们很重要:

public class Switch {
    private SwitchEntry[] camTable;
    private int numEntries;
    private int maxEntries;

public Switch() {
    camTable = new SwitchEntry[100];  // default value
    numEntries = 0;
    maxEntries = 100;
}

public Switch(int maxEntries) {
    camTable = new SwitchEntry[maxEntries];
    numEntries = 0;
    this.maxEntries = maxEntries;
}
原件:

public int find (MACAddress source) {
    int found = -1;
    for (int i=0; i < numEntries; i++)
        if (source.isEqual (camTable[i].getAddress())){
            found = i;
            break;
        }
    return found;               
}
解决方案:

camTable.add(numEntries++, new SwitchEntry(inFrame.getSource(),inFrame.getPort()));
试试这个

public int find (MACAddress source) {
    int found = -1;
    ArrayList<MACAddress> camTable = new ArrayList<MACAddress>();
    ListIterator<MACAddress> itr = camTable.listIterator();
    while(itr.hasNext()){
        MACAddress tempAdd = itr.next();
        if(source.getAddress().equals(tempAdd.getAddress())){
            found = itr.nextIndex();
            return found;
        }
        return found;           
    }
我假设在ArrayList中存储MACAddress的对象。在这种情况下,如果我检查tempAdd.getAddress的source.getAddress相同,那么它将重新运行ArrayList的索引。这里ArrayList是局部变量,但您可以创建为类变量

public int find (MACAddress source) {
    int found = -1;
    ArrayList<MACAddress> camTable = new ArrayList<MACAddress>();
    ListIterator<MACAddress> itr = camTable.listIterator();
    while(itr.hasNext()){
        MACAddress tempAdd = itr.next();
        if(source.getAddress().equals(tempAdd.getAddress())){
            found = itr.nextIndex();
            return found;
        }
        return found;           
    }

我假设在ArrayList中存储MACAddress的对象。在这种情况下,如果我检查tempAdd.getAddress的source.getAddress相同,那么它将重新运行ArrayList的索引。这里ArrayList是局部变量,但您可以创建为类变量

解决方案很简单,只是我的疏忽。我所要做的就是将numEntries添加回我的add语句,在从数组更改为arrayList之后,我忽略了修复它


解决方案现在贴在原来的问题上:

解决方案是直截了当的,只是我的疏忽。我所要做的就是将numEntries添加回我的add语句,在从数组更改为arrayList之后,我忽略了修复它


解决方案现在发布在原始问题中:

使用Contain method of collection.ArrayList


使用collection.ArrayList的Contain方法


arraylist在哪里?@VipinJain camTable是arralist@VipinJain在他的摄像机里,格蒂。。。我相信。你是如何获得numEntries知觉的?这也许是问题所在。还有什么是isEqual方法?@sentence您需要调试为什么它即将出现-1是包含将匹配的MACAddress对象的camTable,并且numEntries大于0 arraylist在哪里?@VipinJain camTable是arralist@VipinJain在他的摄像机里,格蒂。。。我相信。你是如何获得numEntries知觉的?这也许是问题所在。还有什么是isEqual方法?@sentence您需要调试为什么它会出现-1是camTable,包含将匹配的MACAddress对象,并且numEntries大于0我感谢您的帮助,但我只需将numEntries++添加到我的camTable.add中,就解决了这个问题。如果我有15个声望,你会看到一个上升的投票。。。不幸的是,我没有:非常感谢您的帮助,但我只需将numEntries++添加到我的camTable.add中,就解决了这个问题。如果我有15个声望,你会看到一个上升的投票。。。不幸的是,我没有:
public int find (MACAddress source) {
    int found = -1;
    ArrayList<MACAddress> camTable = new ArrayList<MACAddress>();
    ListIterator<MACAddress> itr = camTable.listIterator();
    while(itr.hasNext()){
        MACAddress tempAdd = itr.next();
        if(source.getAddress().equals(tempAdd.getAddress())){
            found = itr.nextIndex();
            return found;
        }
        return found;           
    }