2017-02-28 7 views
0

このプログラムは正しくコンパイルされますが、幅と高さの値を入力しようとすると実行されず、代わりにエラーメッセージ " .lang.IllegalArgumentException:幅と高さが正でなければなりません "。メインメソッド以外でScannerを使用して定義した静的変数を正しく宣言するにはどうすればよいですか? (これは明らかである場合には申し訳ありません初心者プログラマ、!)不正な引数の例外 - メソッドで定義された静的変数を宣言する方法

public class Animation { 
static int width; 
static int height; 
static double x0; 
static double y0; 

public static void main (String[] args) { 
    getInputs(); 
    initStdDraw(width, height); 
    drawFace(x0, y0); 
} 

public static void initStdDraw(int width, int height) { 
    StdDraw.setCanvasSize(width, height); 
    StdDraw.setXscale(0, width); 
    StdDraw.setYscale(0, height); 
    StdDraw.rectangle(width/2, height/2, width/2, height/2); 
} 

public static void getInputs() { 
    Scanner console = new Scanner(System.in);  
    System.out.println("Please provide a canvas width and height: "); 
    int width = console.nextInt(); 
    int height = console.nextInt(); 
    System.out.println("Please provide a starting position: "); 
    double x0 = console.nextDouble(); 
    double y0 = console.nextDouble(); 
+0

を。幅/高さの値も印刷してください。 – john16384

+0

'double x0 = console.nextDouble();'の代わりに 'x0 = console.nextDouble();'を意味しますか? (他の3つの変数と同じ)静的変数を割り当てるか、関連のない新しいローカル変数を定義しようとしていますか? –

+0

はい!これは私の問題を解決した、ありがとうございました。私の以前のバージョンが私にエラーを与えた理由を説明してもらえますか? – kellabd

答えて

1

あなたはこれらのフィールドを宣言:

static int width; 
static int height; 
static double x0; 
static double y0; 

をしかし、あなたが同じ名前を持つこれらのローカル変数を宣言:あなたはそう

int width = console.nextInt(); 
int height = console.nextInt(); 
System.out.println("Please provide a starting position: "); 
double x0 = console.nextDouble(); 
double y0 = console.nextDouble(); 

メソッド内のフィールドに値を代入するのではなく、ローカル変数に代入してください。
これらは2つの異なる変数であり、メソッド内で優先度スコープを持つローカル変数と同じ名前のシャドウフィールド変数です。

さらにローカル変数はgetInputs()の実行中にのみ存在します。

あなたはローカル変数削除する必要があります。このエラーが発生した正確なラインを使用して教えてください

​​3210
関連する問題