从 java 中的另一个方法更改静态变量
changing static variables from another method in java
我想创建一个方法 moveQ()
,我可以在方法 find()
中调用它来更改 find()
的变量,但是在方法 moveQ()
我收到错误 cannot find symbol variable x
在此示例中 x
、y
和 z
是我需要更改的变量。
已编辑:
我也有一些限制,因为这是来自 Java 课程的练习:
1. 方法必须是静态的。
2.不允许使用全局变量。
3.时间复杂度应该小于O(n),我不能增加内存复杂度(意思是不能使用另一个数组或对象)。
4. find() 方法不能接受参数。
在实际程序中,我需要编写一个静态布尔方法,如果在一个分成象限的数组中找到数字x
,则return为真。为此,它会搜索每个象限的最高数字。如果x
大于象限最高数,那么我需要移动到下一个象限。
x
、y
、z
是数组象限的最大数、中间数和最小数,通过改变它们,我可以移动象限。
我已经写了 find()
方法,但我想使用辅助方法来使代码更好。
我正在尝试做的事情是否可行,如果可以,我该如何完成?
public class Test
{
public static boolean find()
{
int x = 10;
int y = 20;
int 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
}
//helper method to be called from find() method
private static void change(int changeX ,int changeY,int changeZ)
{
//change find() variables.
x = changeX * 2;
y = changeY + 2;
z = changeZ /2;
}
}
您在方法内部声明了变量,因此您无权访问它们,如果您想更改它们,您要么将它们设为全局变量(在方法外部定义它们):
public class Test
{
int x;
int y;
int z;
void yourMethod(){
}
}
或者更改方法 find 以将 x、y 和 z 值作为参数。
您可以编写一个 class 封装您的 x
、y
、z
作为字段并将您的方法转换为其实例方法(也就是说,它们不应该不再是静态的)。
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();
...
问题出在你的第二种方法上。您传递了 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;
}
(*=、+= 和 /= 运算符是 shorthand 您在上面所做的。
您可以更有条理地实现这一点:
创建 Calculation
class 然后将所有变量和方法放在上面
文件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());
}
}
之后,只需在您的主程序中创建 class Calculation
的新对象,然后对该对象变量
调用 find()
方法
文件Main.java:
public class Main {
public static void main(String[] args) {
Calculation c = new Calculation();
c.find();
}
}
输出:
20
22
15
我想创建一个方法 moveQ()
,我可以在方法 find()
中调用它来更改 find()
的变量,但是在方法 moveQ()
我收到错误 cannot find symbol variable x
在此示例中 x
、y
和 z
是我需要更改的变量。
已编辑:
我也有一些限制,因为这是来自 Java 课程的练习: 1. 方法必须是静态的。 2.不允许使用全局变量。 3.时间复杂度应该小于O(n),我不能增加内存复杂度(意思是不能使用另一个数组或对象)。 4. find() 方法不能接受参数。
在实际程序中,我需要编写一个静态布尔方法,如果在一个分成象限的数组中找到数字x
,则return为真。为此,它会搜索每个象限的最高数字。如果x
大于象限最高数,那么我需要移动到下一个象限。
x
、y
、z
是数组象限的最大数、中间数和最小数,通过改变它们,我可以移动象限。
我已经写了 find()
方法,但我想使用辅助方法来使代码更好。
我正在尝试做的事情是否可行,如果可以,我该如何完成?
public class Test
{
public static boolean find()
{
int x = 10;
int y = 20;
int 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
}
//helper method to be called from find() method
private static void change(int changeX ,int changeY,int changeZ)
{
//change find() variables.
x = changeX * 2;
y = changeY + 2;
z = changeZ /2;
}
}
您在方法内部声明了变量,因此您无权访问它们,如果您想更改它们,您要么将它们设为全局变量(在方法外部定义它们):
public class Test
{
int x;
int y;
int z;
void yourMethod(){
}
}
或者更改方法 find 以将 x、y 和 z 值作为参数。
您可以编写一个 class 封装您的 x
、y
、z
作为字段并将您的方法转换为其实例方法(也就是说,它们不应该不再是静态的)。
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();
...
问题出在你的第二种方法上。您传递了 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;
}
(*=、+= 和 /= 运算符是 shorthand 您在上面所做的。
您可以更有条理地实现这一点:
创建 Calculation
class 然后将所有变量和方法放在上面
文件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());
}
}
之后,只需在您的主程序中创建 class Calculation
的新对象,然后对该对象变量
find()
方法
文件Main.java:
public class Main {
public static void main(String[] args) {
Calculation c = new Calculation();
c.find();
}
}
输出:
20
22
15