java - 为什么我需要初始化这个成员数组
问题描述
如果我没有用相同的预期长度初始化这个成员数组 'arryMem',我会得到 nullPointerException 但初始化它可以工作,请帮助我理解这一点。
class BubRec {
Integer arryMem[] = {0, 0, 0, 0, 0, 0, 0};// if arrMem[]; throws NullPointerException
int n;
BubRec(Integer ary[]) {
for (int i = 0; i <= ary.length - 1; i++) {
arryMem[i] = ary[i];
}
n = arryMem.length;
}
Integer[] sortBubRec() {
int temp = 0;
if (n >= 0) {
for (int i = 0; i < (arryMem.length - 1); i++) {
if (arryMem[i] > arryMem[i + 1]) {
temp = arryMem[i];
arryMem[i] = arryMem[i + 1];
arryMem[i + 1] = temp;
}
}
n--;
sortBubRec();
}
return arryMem;
}
}
public class BubbleRecMain {
public static void main(String[] args) {
Integer arry[] = {34, 56, 78, 1, 2, 4, 7};
BubRec bubRec = new BubRec(arry);
Integer sortedArry[] = bubRec.sortBubRec();
for (int i = 0; i < sortedArry.length; i++) {
System.out.println(sortedArry[i]);
}
}
}
输出:
1 2 4 7 34 56 78
解决方案
因为您必须在尝试填充数组之前指定数组的长度。
您可以通过arryMem = new Integer[ary.length];
在 BubRec 构造函数中使用来做到这一点:
class BubRec {
Integer arryMem[];
int n;
BubRec(Integer ary[]) {
arryMem = new Integer[ary.length];
for (int i = 0; i <= ary.length - 1; i++) {
arryMem[i] = ary[i];
}
n = arryMem.length;
}
// ...
}
推荐阅读
- javascript - 如何在 jQuery 代码中实现 ::ng-deep 的功能
- c - 计算一个数字除以另一个数字的次数
- c# - 使用 NAudio 在 WPF 上创建音频播放器。绑定不起作用
- excel - 如何在 Excel 中设置刷新顺序?包含数据库数据和更多层的数据透视表
- python - 用于弹性搜索的 Python API - 每次响应 10000
- ruby-on-rails - 无法在 Rails 5.1 中加载 google-cloud-text_to_speech Gem 的默认凭据
- ios - WKWebView iframe X-Frame-Options 是“拒绝”
- python - pandas:如何查询多级列数据框?
- javascript - 使用 dropzone 上传文件时出现问题
- api - Blogger API 中的 URL 和 customMetaData 选项