java - 表示一组键值对的类 - 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() 函数中的另一个对象?
解决方案
Para[]pary=new Para[20];
在构造函数中创建一个新的局部变量。这将使实际的类变量黯然失色pary
。
您需要更改线路
Para[]pary=new Para[20];
和
Para[]pary=new Para[rozmiar];
至
pary=new Para[20];
和
pary=new Para[rozmiar];
分别。
推荐阅读
- cassandra - Flink Cassandra sink 导致背压
- html - Angular 检测 dom-to-image 的变化并无限次渲染
- python - 以整数为参数并返回对应月份和年份的函数
- kubernetes - 我在部署 pod 时收到错误“networkPlugin cni failed to setup pod”
- android - 如何将 alac 解码器注册到多媒体框架?
- javascript - 重新渲染页面以可视化快速排序?
- java - 如何在 Java 单元测试中模拟“无法访问 Internet”以测试 liquibase 迁移
- c# - 从列表列表中选择一个元素
- angular - Storybook Angualr 和 ng-bootstrap
- json - 将 XAMPP shell 添加到新的“Windows 终端”