在对象外部无法识别类变量
这是我的第一个问题,所以我不能完全确定这一切是如何运作的
所以,我一直在为FTC(第一次技术挑战)的out robot编写代码。我最近开始使用一个新类来存储大部分代码并定义所有内容,这样我就可以在我们运行的程序中调用它。但我遇到了一个问题。我确实找到了解决办法。但我想知道我所做的有什么不对。以下是我以前的经历:
private Gamepad gamepad1;
void variables() {
int m;
if(gamepad1.left_stick_x < 0) {
m = -1;
}
else {
m =1;
}
int n;
if(gamepad1.left_stick_y < 0) {
n=1;
}
else {
n=-1;
}
float x = m * ((float) Math.sqrt(1 - Math.pow((double) gamepad1.left_stick_x, 2)) - 1);
float y = n * ((float) Math.sqrt(1 - Math.pow((double) gamepad1.left_stick_y, 2)) - 1);
float r = gamepad1.right_stick_x;
}
void driving_Full() {
variables();
frontLeftMotor.setPower(-y - x + r);
frontRightMotor.setPower(y - x + r);
backRightMotor.setPower(y + x + r);
backLeftMotor.setPower(-y + x + r);
}
void driving_Quarter() {
variables();
frontLeftMotor.setPower(0.25 * (-y - x + r));
frontRightMotor.setPower(0.25 * (y - x + r));
backRightMotor.setPower(0.25 * (y + x + r));
backLeftMotor.setPower(0.25 * (-y + x + r));
}
void driving_Tenth() {
variables();
frontLeftMotor.setPower(0.1 * (-y - x + r));
frontRightMotor.setPower(0.1 * (y - x + r));
backRightMotor.setPower(0.1 * (y + x + r));
backLeftMotor.setPower(0.1 * (-y + x + r));
}
我遇到的问题是,在variables()对象之外无法识别r变量
我现在想出的解决方案是将float r = gamepad1.right_stick_x;
放在每个驱动对象中
第一个怎么了
# 1 楼答案
您所指的对象
variables()
实际上是一个方法。方法内部声明的变量仅在该方法中可用如果希望在类/对象中的任何位置访问变量,则需要在方法体之外(在类的顶部)声明该变量
在程序的上下文中,您可以执行以下操作:
(其中Foo是您的类的名称)
现在您已经声明了变量,您将需要更改
float r = gamepad1.right_stick_x;
致:
r = gamepad1.right_stick_x;
对r所做的任何更改都将反映在整个对象中
# 2 楼答案
这里的问题与变量范围有关。我要详细说明一下:
变量有几个作用域,具体取决于它们的定义方式。这里有一个很棒的explanation。简短的版本是我们可以考虑3个范围:
您的问题是方法
variables()
中的变量只能在其上访问。获得所需内容的正确方法是创建类属性此外,您应该考虑为类添加一个构造函数来初始化变量。这是你在
variables()
中所做的最基本的事情,但要以正确的方式。创建对象时始终调用构造函数方法。假设您有一个名为gamepad
的类。当您执行gamepad gp = new gamepad()
时,将调用构造函数并初始化变量