我正在学习java。我编写了以下代码,但是当我尝试接受输入时,我在Arrayfunction()中收到此错误“无法对非静态输入字段进行静态引用”。为什么会这样,我该如何解决?
import java.util.*;
public class MultidimArrays {
Scanner input= new Scanner(System.in);
public static void main(String args[])
{
int array[][]= new int[2][3];
System.out.println("Passing array to a function");
Arrayfunction(array);
}
public static void Arrayfunction(int array[][])
{
System.out.println("Inside Array function");
for(int i=0;i<array.length;i++)
{
for(int j=0;j<array[i].length;j++)
{
System.out.println("Enter a number");
array[i][j]=input.nextInt();// error
}
}
}
答案 0 :(得分:2)
扫描仪未定义为静态,因此范围错误
在Arrayfunction
内创建扫描仪实例或使用
private static Scanner input= new Scanner(System.in);
答案 1 :(得分:0)
出现此错误的原因是:由于您尚未创建对象,因此不存在非静态变量input
,因此您无法使用它。
要解决此问题,您可以将input
设为static
static Scanner input= new Scanner(System.in);
答案 2 :(得分:0)
使您的扫描仪静态并在静态方法中使用它,或者从静态方法创建类的实例和访问扫描程序。
static Scanner input= new Scanner(System.in);
public static void Arrayfunction(int array[][])
{
System.out.println("Enter a number");
array[i][j]=input.nextInt();// error
}
或强>
Scanner input= new Scanner(System.in);
public static void Arrayfunction(int array[][])
{
System.out.println("Enter a number");
array[i][j]=new MultidimArrays().input.nextInt();// error
}
答案 3 :(得分:0)
non static
引用与instances
的{{1}}相关联。虽然所有class
代码都与static
本身绑定。
您必须添加class
。
答案 4 :(得分:0)
input
是一个实例变量(因为它没有被定义为static
),这意味着MultidimArrays
的每个实例都有一个拥有。 static
字段或方法(通常称为“类变量/方法”在类的所有实例之间共享。
由于Arrayfunction
为static
,因此无法引用其类的实例成员 - 无法知道要使用哪个 MultidimArray
。您可以通过将input
本身设为静态,或者从static
中移除ArrayFunction
限定符并创建类的实例来解决此问题:
public static void main(String args[])
{
int array[][] arr = new int[2][3]; //typo here, variable needs a name :)
System.out.println("Passing array to a function");
MultidimArray ma = new MultidimArray();
ma.Arrayfunction(arr);
}