Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复无法对非静态输入字段进行静态引用的错误?_Java_Arrays_Methods - Fatal编程技术网

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

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

我正在学习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
    }
}
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);
}