如何在无法对非静态输入字段进行静态引用的情况下修复错误?

我正在学习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引用与classinstances相关联。 虽然所有static代码都与class本身相关联。

您必须添加static keyword

类中的input是一个实例变量 (因为它没有定义为static ),这意味着MultidimArrays每个实例都有一个自己的实例。 static字段或方法(通常称为“类变量/方法”在类的所有实例之间共享。

由于Arrayfunctionstatic ,因此无法引用其类的实例成员 – 它无法知道要使用哪个 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 ,因此您无法使用它。 要修复它,您可以将inputstatic

 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 }