Java 如何修复无法对非静态输入字段进行静态引用的错误?
我正在学习java。我编写了以下代码,但在尝试获取输入时,Arrayfunction()中出现了一个错误“无法对非静态输入字段进行静态引用”。为什么会这样?我如何修复它Java 如何修复无法对非静态输入字段进行静态引用的错误?,java,arrays,methods,Java,Arrays,Methods,我正在学习java。我编写了以下代码,但在尝试获取输入时,Arrayfunction()中出现了一个错误“无法对非静态输入字段进行静态引用”。为什么会这样?我如何修复它 import java.util.*; public class MultidimArrays { Scanner input= new Scanner(System.in); public static void main(String args[]) { int array[][]= new int
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
}
}
import java.util.*;
公共类多维数组{
扫描仪输入=新扫描仪(System.in);
公共静态void main(字符串参数[])
{
int数组[][]=新的int[2][3];
System.out.println(“将数组传递给函数”);
数组函数(数组);
}
公共静态void数组函数(int数组[])
{
System.out.println(“内部数组函数”);
对于(int i=0;i扫描仪未定义为静态,因此在错误的范围内
在Arrayfunction
中创建扫描仪实例,或使用
private static Scanner input= new Scanner(System.in);
此错误的原因是:由于尚未创建对象,因此非静态变量input
不存在,因此无法使用它。
要修复它,您可以将输入设置为静态
static Scanner input= new Scanner(System.in);
将扫描仪设为静态并在静态方法中使用,或者从静态方法创建access Scanner类的实例
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
}
非静态
引用绑定到类
的实例
。而所有静态
代码绑定到类
本身
必须在类中添加static关键字
输入
是一个实例变量(因为它没有定义为static
),这意味着多维数组
的每个实例都有自己的一个。static
字段或方法(通常称为“类变量/方法”)在类的所有实例之间共享
由于Arrayfunction
是static
,因此它无法引用其类的实例成员-它无法知道要使用哪个MultidimArray
。您可以通过使输入本身保持静态,或者从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);
}