如何在无法对非静态输入字段进行静态引用的情况下修复错误?
我正在学习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 } }
}
扫描仪未定义为静态,因此范围错误
在Arrayfunction
创建Scanner实例或使用创建扫描仪
private static Scanner input= new Scanner(System.in);
non static
引用与class
的instances
相关联。 虽然所有static
代码都与class
本身相关联。
您必须添加static keyword
。
类中的input
是一个实例变量 (因为它没有定义为static
),这意味着MultidimArrays
每个实例都有一个自己的实例。 static
字段或方法(通常称为“类变量/方法”在类的所有实例之间共享。
由于Arrayfunction
是static
,因此无法引用其类的实例成员 – 它无法知道要使用哪个 MultidimArray
。 您可以通过使input
本身为静态来解决此问题,或者通过从ArrayFunction
删除static
限定符并创建类的实例来解决此问题:
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); }
出现此错误的原因是:由于您尚未创建对象,因此不存在非静态变量input
,因此您无法使用它。 要修复它,您可以将input
为static
static Scanner input= new Scanner(System.in);
要么使您的扫描仪静态并在静态方法中使用它,要么从静态方法创建类的实例和访问扫描程序。
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 }