【问题标题】:How do I fix the error where I cannot make a static reference to a non-static input field?如何修复无法对非静态输入字段进行静态引用的错误?
【发布时间】:2012-09-19 08:06:23
【问题描述】:

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

}

【问题讨论】:

    标签: java arrays methods


    【解决方案1】:

    扫描器未定义为静态,因此位于错误的范围内

    Arrayfunction 中创建 Scanner 实例或使用

    private static Scanner input= new Scanner(System.in);
    

    【讨论】:

      【解决方案2】:

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

      static Scanner input= new Scanner(System.in);
      

      【讨论】:

        【解决方案3】:

        要么将你的 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
              }
        

        【讨论】:

          【解决方案4】:

          non static 引用与classinstances 相关联。虽然所有static 代码都与class 本身相关联。

          您必须添加static keyword

          【讨论】:

            【解决方案5】:

            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);
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-11-04
              • 1970-01-01
              • 2013-03-31
              • 2013-02-25
              相关资源
              最近更新 更多