如何使main方法的变量在begin方法上工作?

时间:2015-01-22 10:39:10

标签: java variables methods integer

我试图让main方法的用户输入在begin方法上工作,以在画布中创建一个框的大小,这样当使用不同的输入时它会创建不同的大小 这就是我到目前为止所做的:

import objectdraw.*;
import java.awt.*;
import java.util.Scanner;
public class Ricochet extends WindowController
{
    private static final int CANVAS_WIDTH=400;
    private static final int CANVAS_HEIGHT=600;

    public static void main(String [] args)
    {
        Scanner scnr = new Scanner(System.in);
        System.out.println("Enter size of box in pixels: ");
        int boxSize = scnr.nextInt();
        System.out.println("Enter number of crossings: ");
        int Crossings = scnr.nextInt();
        System.out.println("Enter pixel Speed: ");
        int pixelSpeed = scnr.nextInt();
        new Ricochet().startController(CANVAS_WIDTH, CANVAS_HEIGHT);


    }
    private FilledRect sq1;
    public void begin()
    {
        sq1 = new FilledRect(1,1, boxSize, boxSize, canvas);
    }
}       

3 个答案:

答案 0 :(得分:1)

您可以将main方法中的必需变量作为参数传递给begin方法。

如果您的main方法没有直接调用begin,您可以将这些变量传递给Ricochet的构造函数并将它们存储为实例变量。

答案 1 :(得分:1)

以这种方式用变量声明方法:

public static void begin(int boxSize, Canvas canvas)
{
   sq1 = new FilledRect(1,1, boxSize, boxSize, canvas);
}

并在main中调用它:

begin(boxSize, canvas);

答案 2 :(得分:1)

在构造函数中定义它们,以便它们可供实例使用。 变量在本地方法范围内可用。

为了简单起见,我忽视了内部阶级等。

局部变量(在静态方法或实例方法中)仅在声明它们的方法中可用。

静态变量可用于类,任何静态方法和任何实例方法。

实例变量仅适用于其他实例变量的实例方法和初始值设定项。

要使实例方法begin()可以访问您的变量,您可以执行以下三项操作:

1:创建静态变量来保存这些值。这使它们全球可用

private static int boxSize;

public static void main(String[] args) {    
    ...
    boxSize = scnr.nextInt(); // static variable

2:创建一个实例变量来保存这个值并使用属性扩展构造函数以将它们传递给实例

private int boxSize;
public Ricochet(int inBoxSize) {
    this.boxSize = inBoxSize;
}
public static void main(String[] args) {
    ...
    int boxSize = scnr.nextInt(); // local variable
    ...
    new Ricochet(boxSize).startController(CANVAS_WIDTH, CANVAS_HEIGHT);
}     

3:展开方法签名以包含其他参数。在您的情况下,您不要调用begin(),因此这不是一个选项。但如果它是你控制的方法,那么

    public static void main(String[] args) {
    ...
    int boxSize = scnr.nextInt(); // local variable
    ...
    new Ricochet().doSomeMethod(boxSize);
}     

public void doSomeMethod(int boxSize) { // add parameter
    ...
}