1

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

}

4

5 回答 5

3

扫描仪未定义为静态,因此在错误的范围内

在内部创建 Scanner 实例 Arrayfunction或使用

private static Scanner input= new Scanner(System.in);
于 2012-09-27T13:56:02.167 回答
0

这个错误的原因是:由于你没有创建对象,所以非静态变量input不存在,所以你不能使用它。要修复它,您可以制作inputstatic

static Scanner input= new Scanner(System.in);
于 2012-09-27T13:57:27.567 回答
0

要么使您的 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
      }
于 2012-09-27T13:57:37.453 回答
0

non static引用与 的相关instancesclass。虽然所有static代码都与class自身相关联。

您必须添加static keyword.

于 2012-09-27T13:59:37.460 回答
0

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

因为Arrayfunctionis static,它不能引用其类的实例成员——它无法知道使用哪个 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);
}
于 2012-09-27T14:02:24.173 回答