gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:49:03 24 4
gpt4 key购买 nike

该程序可以正确编译,但当我尝试输入宽度和高度值时,该程序无法运行,而是给出错误消息“线程“main”中出现异常 java.lang.IllegalArgumentException:宽度和高度必须为正数” 。如何在 main 方法之外正确声明使用 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();

最佳答案

您声明这些字段:

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

关于java - 非法参数异常 - 如何声明方法中定义的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42503936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com