非法参数异常 - 如何声明方法中定义的静态变量

时间:2017-02-28 08:44:38

标签: java

这个程序编译正确,但是在我尝试输入宽度和高度的值时没有运行,而是给我错误消息"线程中的异常" main" java.lang.IllegalArgumentException:width和height必须为正"。如何正确声明我在主方法之外使用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();

1 个答案:

答案 0 :(得分: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();

因此,您不必将值分配给方法中的字段,而是分配给局部变量。
这是两个不同的变量和局部变量阴影字段变量,它们的名称与方法中的优先级范围相同。

除了局部变量仅在getInputs()执行期间存在。

您应该删除局部变量:

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