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が存在しないため、使用できません。inputそれを修正するには、次のように作成できますstatic

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

inputクラス内の はインスタンス変数です( として定義されていないためstatic)。つまり、 の各インスタンスにMultidimArraysは独自のインスタンスが 1 つあります。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 に答える
0

参照はのnon staticに関連付けられてinstancesclassます。すべてのstaticコードはclassそれ自体に関連付けられています。

を追加する必要がありstatic keywordます。

于 2012-09-27T13:59:37.460 に答える