当前位置: 首页 > 知识库问答 >
问题:

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

钱旻
2023-03-14

这个程序编译正确,但当我尝试输入宽度和高度的值时不运行,而是给我错误消息“Exception in thread”main“java.lang.IllegalArgumentException:width and height must be positive”。如何正确声明我在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();

共有1个答案

呼延弘方
2023-03-14

声明以下字段:

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();
 类似资料:
  • 问题内容: 我有一个快速的问题。在静态关键字声明之后立即开始的代码块,那是什么类型的方法?我从未见过。如果有人能启发我,将不胜感激。谢谢。 问题答案: 这不是方法,而是类的静态Initializer块。您可以在Java Language Specification中 阅读有关它的更多信息。 加载该类后,其中的代码将执行一次。

  • 我试图重新定义简单的非静态方法,但遇到了一个例外: 类别: 电话: 上面的类是scala类,但它们编译为标准的java类。 如何正确地重新定义方法?

  • 我正在处理一个非常简单的point类,但我得到了一个错误,我无法确定字符串/双值问题发生的位置或如何修复它。 编辑 我忘记添加我正在接收的错误:

  • 问题内容: 在现代Python中声明自定义异常类的正确方法是什么?我的主要目标是遵循其他异常类具有的任何标准,以便(例如)我捕获到异常的任何工具都可以打印出我包含在异常中的任何多余字符串。 “现代Python”是指可以在Python 2.5中运行但对于Python 2.6和Python 3. 是“正确”的方式。所谓“自定义”,是指一个Exception对象,该对象可以包含有关错误原因的其他数据:字

  • 问题内容: 假设以下内容: parsedUntil是否被视为静态变量?我注意到我无法在此静态函数中将其声明为静态。 后续问题:我读到一个静态变量只会被初始化一次。这是否意味着我第一次调用函数A()时,该值将设置为零,但是每隔一次我调用A()时,该行将被省略吗? 问题答案: 不,它不是静态变量。这是一个局部变量。方法中声明的任何变量都是局部变量。如果需要静态变量,则必须在方法外声明它: 没有办法声明

  • 问题内容: 我正在Ubuntu 16.04上使用最新版本的Elasticsearch,但在将数据放到上面时遇到了一个小问题。 这是我的json文档(相关部分) 这是当我尝试“ PUT http:// localhost:9200 / aws ” 时从ES返回的响应 在我看来,ES认为“ clockSpeed”是某种设置…?我希望使用动态映射来加快此过程,而不是先映射所有文档,然后将其导入ES。 有