这个程序编译正确,但是在我尝试输入宽度和高度的值时没有运行,而是给我错误消息"线程中的异常" 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();
答案 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();