首页 > 解决方案 > 表示一组键值对的类 - On 1D Array JAVA

问题描述

我试图实现表示键值对集的类,但是在尝试将任何元素添加到对象时我得到了 NullPointer。问题是如何在经典数组上实现该类-我尝试在开头声明空数组,然后将其填充到构造函数中。

public  class ZbiorNaTablicy extends Zbior{

public Para[] pary;  //array representing set
private int index=0;                       //index of last added object
Para pusta=new Para("pusta_para", 0);

public ZbiorNaTablicy()
{
    Para[]pary=new Para[20];
    for(int i=0;i<20;i++)
    {
          pary[i]=new Para("pusta_para",i); //i fill array with some elem
        
    }
}



public ZbiorNaTablicy(int rozmiar) {    
    if(rozmiar<2) {
        throw new IllegalArgumentException("Ta para juz jest w zbiorze");
    }
    Para[]pary=new Para[rozmiar];    
    for(int i=0;i<rozmiar;i++)
    {
          pary[i]=new Para("pusta_para",i);   //filling array with same key elements
                                              //after adding they will be replaced
    }
    
    
}



public Para szukaj (String s)
{
    for(int i=0;i<index;i++)
    {
        if((pary[i].klucz).equals(s))
        {
            return pary[i];
        }
    }
    return pusta;
}

public void wstaw (Para p) throws IllegalArgumentException           //here i get NullPointer
{
    if(index>=pary.length) throw new IllegalArgumentException("Zbior pelny");
        boolean t=false;
        for(int i=index;i<pary.length;i++) {
             if(pary[i].klucz.equals("pusta_para"))
             {
                 pary[i]=p;       //NullPointer - despite the fact that array is filled
                 index++;
                 t=true;
                 break;
             }
        }
        if(t==false) {
        throw new IllegalArgumentException("Ta para juz jest w zbiorze");
        }        
}


public void usun (String k) {
    int rozmiar=pary.length;
    Para[] set2=new Para[rozmiar-1];
    for(int i=0,l=0;i<index;i++)
    {
        if(pary[i].klucz.equals(k))
        {
           continue;
        }
       
            set2[l++] = pary[i]; 
        
    }
    pary=set2;
    
}
    
public double czytaj (String s) throws IllegalArgumentException
{
    if(szukaj(s).equals("pusta_para")) throw new IllegalArgumentException("Pary z danym kluczem nie ma w zbiorze");
    else
    {
        return szukaj(s).getWartosc();
    }

}



public void ustaw (Para p) throws IllegalArgumentException
{
    if(szukaj(p.klucz).equals("pusta_para")) wstaw(p);
    else
    {
        szukaj(p.klucz).setWartosc(p.getWartosc());
    }
}


public int ile ()
{
    return index;
}


public void czysc ()
{
    index=0;
    pary=new Para[20];

    pary[0]=pusta;
        
    
}

}

为什么当数组不为空时会发生 NullPointer - 我没有将 null 更改为 wstaw() 函数中的另一个对象?

标签: javaarraysnullpointerexception

解决方案


Para[]pary=new Para[20];在构造函数中创建一个新的局部变量。这将使实际的类变量黯然失色pary
您需要更改线路

Para[]pary=new Para[20];

Para[]pary=new Para[rozmiar];

pary=new Para[20];

pary=new Para[rozmiar];

分别。


推荐阅读