从java中的另一个方法更改静态变量

时间:2017-06-07 19:07:58

标签: java static-methods

我想创建一个方法moveQ(),我可以在方法find()中调用,以便更改find()的变量,但是在方法{ {1}}我在此示例中遇到错误moveQ() cannot find symbol variable xx,而y是我需要更改的变量。

编辑:

我也有一些限制,因为这是来自Java课程的练习: 1.方法必须是静态的。 2.不允许全局变量。 3.时间复杂度应小于O(n),我无法添加内存复杂度(意思是不能使用另一个数组或对象)。 4.方法find()不能接受参数。

在实际程序中,我需要编写一个静态布尔方法,如果在分为象限的数组中找到数字z,则返回true。为此,它会搜索每个象限的最高编号。如果x大于象限最高数字,那么我需要移动到下一个象限。

xxy是数组象限的最大数量,中间数字和最小数量,通过更改它们,我可以移动象限。

我已经编写了z方法,但我想使用辅助方法来改善代码。

我正在尝试做什么,如果是这样,我该怎么做呢?

find()

4 个答案:

答案 0 :(得分:0)

您在方法中声明了变量,因此您无权访问它们,如果您想要更改它们,您可以将它们设为全局(在方法之外定义它们):

 public class Test
{
int x;
int y;
int z;
void yourMethod(){

  }
}

或者更改方法find将x,y和z值作为参数。

答案 1 :(得分:0)

您可以编写一个类,将xyz封装为字段,并将您的方法转换为其实例方法(也就是说,它们不再是静态的)。< / p>

public class Calculation {
    private int x = 10, y = 20, z = 30;

    public boolean find()
    {
        x = 10;
        y = 20;
        z = 30;
        change(x,y,z); // call helper method to change this method's variables.
        System.out.println(x); // should be 20
        System.out.println(y); // should be 22
        System.out.println(z); // should be 15
    }

    private void change(int changeX ,int changeY,int changeZ)

等等。

然后创建一个实例并在其上调用您的方法:

Calculation calculation = new Calculation();
calculation.find();
...

答案 2 :(得分:0)

问题来自你的第二种方法。您传递changeX,changeY和changeZ但尝试设置x,y和z的值。变量x,y和z不在此方法的范围内,因此程序将抛出错误。

此外,无论这些名称如何,这种方法都不起作用。当您将基元传递给新方法时,Java不允许您更改基元的值。最好的解决方案可能是将它们放在一个数组中并更改第二个方法以接受一个数组。你的第一种方法的主体现在可能看起来像

int [] intarray = new int[3];
intarray[0] = 10;
intarray[1] = 20;
intarray[2] = 30;
change(intarray);
System.out.println(intarray[0]);
System.out.println(intarray[1]);
System.out.println(intarray[2]);

,第二种方法将成为

private static void change(int [] changeArray) {
    changeArray[0] *= 2;
    changeArray[1] += 2;
    changeArray[2] /= 2;
}

(* =,+ =和/ =运算符是您上面所做的简写。

答案 3 :(得分:0)

您可以更有条理地实现这一目标:

创建Calculation类,然后将所有变量和方法放在上面

文件 Calculation.java

public class Calculation {

    private int x = 10;
    private int y = 20;
    private int z = 30;

    public void setX(int value){
        x = value;
    }
    public void setY(int value){
        y = value;
    }
    public void setZ(int value){
        z = value;
    }

    public int getX(){
        return x;
    }
    public int getY(){
        return y;
    }
    public int getZ(){
        return z;
    }

    private void change(int changeX, int changeY, int changeZ){
        setX(changeX * 2);
        setY(changeY + 2);
        setZ(changeZ / 2);
    }

    public void find(){
        change(x,y,z);
        System.out.println(getX()); 
        System.out.println(getY()); 
        System.out.println(getZ());
    }
}

之后只需在主程序中创建类Calculation的新对象,并在此对象变量上调用find()方法

档案 Main.java

public class Main {

    public static void main(String[] args) {
        Calculation c = new Calculation();
        c.find();
    }   
}

<强>输出

20
22
15