我提前道歉,我是一个java菜鸟。
我在声明中有这个
if(a==0 && b<4)
{
value = ((elev[a][b]-elev[a+1][b])*0.00001* double "variable" ) ;
}
所以我的主要问题是以下......
(elev[a][b]-elev[a+1][b])
返回一个int值(假设数组已初始化并使用int值填充,而对于== 0且b <4,则没有任何引用为空。
如果这很愚蠢,请提前抱歉。请不要发表评论,但我们将不胜感激。我还没有完成很多这样的java东西。
当我填充数组时,我打印了它的内容,以确保我正确填充,一切都应该是...
唉,无论在哪里(elev [a] [b] - elev [a + 1] [b])首次被引用,我都会得到一个空指针错误....但我知道这些值是放在那里的。
下一个问题。当我填充数组时,如果我想引用这些值,
while(input.hasNextInt())
{
elev[i][j] = input.nextInt(); <-- this is how i was doing it
}
of elev [] [] ...我需要说
elev[i][j] = new input.nextInt();
或者我是如何做得足够的。当我从文件中填充ArrayList时,我必须使用&#34; new&#34;前缀所以我试图找出为什么我会在那里得到一个null。
就像我说的那样,我在从文件中读取数据后打印出来并打印出所有内容都取而代之。
谢谢大家。
修改 对不起,为了简单起见,我没有提供实际的代码&#34; value&#34;
实际上是
double randKg = getRandKg(avgKgNitrogen[z]);
double gradient = 0.00001
double under = ((randKg *(elev[a][b] - elev[a+1][b]) * gradient));
第二次修改
这是我填充的代码。
try{
File file = new File(filename);
Scanner input = new Scanner(file);
int rows = 30;
int columns = 10;
int elev[][] = new int[30][10];
for(int i = 0; i < rows; ++i){
for(int j = 0; j < columns; ++j)
{
while(input.hasNextInt())
{
elev[i][j] = input.nextInt();
}
}
}
input.close();
}
catch (java.io.FileNotFoundException e) {
System.out.println("Error opening "+filename+", ending program");
System.exit(1);
}
第3次修改 所以我在这里得到空指针.....
(elev[a][b] - elev[a+1][b]) > 0 )
这就是我最初问的原因。我在填充之前已经打印过阵列,而且一切都在应该的位置。
答案 0 :(得分:0)
您将获得空指针异常,因为double“variable”不指示任何整数或双精度值。编译器只是试图将String'变量'转换为double,这是不可能的。所以,尝试从“变量”中删除双引号。此外,您尚未声明值变量的数据类型。
答案 1 :(得分:0)
忽略代码中的其他问题(由其他答案涵盖),这是关于您的实际问题:
如果代码
if(a==0 && b<4) {
value = (elev[a][b] - elev[a+1][b]);
}
与NullPointerException
崩溃,表示elev
为空。假设a
和b
的类型为int
,则没有其他方法可以生成该异常(数组超出范围的异常会有所不同)。原因有两种选择:
int elev[][] = new int[30][10];
之前执行上述代码,以便elev
仍具有初始空值。elev
与问题中显示的初始化中的elev
不同。在您的代码中,它似乎是2.您在初始化中创建本地elev
。它超出范围而被遗忘。您可能应该在方法中使用此初始化行:
elev = new int[30][10];
然后你应该在方法中使用一个类成员变量而不是局部变量:
private int[][] elev;