对象java外部无法识别变量-过时

对象java外部无法识别变量-过时,java,class,object,void,Java,Class,Object,Void,这是我的第一个问题,所以我不能完全确定这一切是如何运作的 所以,我一直在为FTC(第一次技术挑战)的out robot编写代码。我最近开始使用一个新类来存储大部分代码并定义所有内容,这样我就可以在我们运行的程序中调用它。但我遇到了一个问题。我确实找到了解决办法。但我想知道我所做的有什么不对。以下是我以前的经历: private Gamepad gamepad1; void variables() { int m; if(gamepad1.left_stick_x

这是我的第一个问题,所以我不能完全确定这一切是如何运作的

所以,我一直在为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));
    }
private Gamepad gamepad1;
void变量(){
int m;
如果(gamepad1.left_stick_x<0){
m=-1;
}
否则{
m=1;
}
int n;
如果(gamepad1.left_stick_y<0){
n=1;
}
否则{
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);
浮动r=gamepad1.right\u stick\u x;
}
无效驾驶(满){
变量();
左前电机。设定功率(-y-x+r);
右前电机。设定功率(y-x+r);
右后电机。设定功率(y+x+r);
左后电机。设定功率(-y+x+r);
}
无效驾驶区(){
变量();
左前电机设定功率(0.25*(-y-x+r));
右前电机。设定功率(0.25*(y-x+r));
右后电机。设定功率(0.25*(y+x+r));
设置功率(0.25*(-y+x+r));
}
无效驾驶(){
变量();
设置功率(0.1*(-y-x+r));
右前电机设定功率(0.1*(y-x+r));
右后电机设定功率(0.1*(y+x+r));
设置功率(0.1*(-y+x+r));
}
我遇到的问题是,在variables()对象之外无法识别r变量

我现在想出的解决办法是把
float r=gamepad1.right\u stick\u x


第一个有什么问题?

这里的问题与变量范围有关。我要详细说明一下:

变量有几个作用域,具体取决于它们的定义方式。给你一个很棒的礼物。简短的版本是我们可以考虑3个范围:

  • 类:它们是属性,可用于该类中定义的所有方法
  • 方法:这些是在函数中定义的变量。它们仅在该功能上可用
  • 循环:这是指在循环上创建的变量,这些变量只能在该循环上访问
  • 您的问题是方法
    variables()
    中的变量只能在其上访问。获得所需内容的正确方法是创建类属性


    此外,您应该考虑为类添加一个构造函数来初始化变量。这是您在

    variables()
    中所做的基本操作,但方式正确。创建对象时始终调用构造函数方法。假设您有一个名为
    gamepad
    的类。执行
    gamepad gp=new gamepad()
    时,将调用构造函数并初始化变量

    您所指的对象,
    variables()
    ,实际上是一种方法。方法内部声明的变量仅在该方法中可用

    如果希望在类/对象中的任何位置访问变量,则需要在方法体之外(在类的顶部)声明该变量

    在程序的上下文中,您可以执行以下操作:

    public class Foo {
      private Gamepad gamepad1;
      private float r;
    
    (其中Foo是您的类的名称)

    现在您已经声明了变量,您将需要更改

    float r=gamepad1.right\u stick\u x

    致:

    r=gamepad1.right\u stick\u x


    对r所做的任何更改都将反映在整个对象中。

    它是在该函数中定义的,因此它仅在该函数中可见。在任何方法之外声明
    r
    x
    y
    ,就像对
    gamepad1
    所做的那样。它在
    变量()内
    方法,因此它只在该方法中可见,而不在该方法之外。谢谢您的回答。我还弄明白了为什么x和y在工作,我使用的是AndroidStudio,它自动导入静态的android.R.attr.x;导入静态android.R.attr.y;简短的版本是…?@SteveSmith的答案现在已经完成,所以我可以做一些类似的事情:variables var=new variables()?是的,您可以创建一个名为
    variables
    的类。之后,您可以实例化该类以创建具有
    new