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

时间:2012-09-27 13:54:54

标签: 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[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
    }
}

}

5 个答案:

答案 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字段或方法(通常称为“类变量/方法”在类的所有实例之间共享。

由于Arrayfunctionstatic,因此无法引用其类的实例成员 - 无法知道要使用哪个 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);
}