【问题标题】:FTC Android Studio User code threw an uncaught exception: NullPointerExceptionFTC Android Studio 用户代码抛出未捕获的异常:NullPointerException
【发布时间】:2015-12-10 04:50:32
【问题描述】:

我是学校 5108 队 High School FIRST Robotics 团队的一员。我一直在研究一个自主程序,该程序可以适应大多数机器人并且非常易于更改。基本上,用户只需输入机器人的起点,基于覆盖在比赛场地上的坐标平面。

但是,当我尝试运行它时,我仍然遇到此错误。我已经多次查看代码并且没有错误或警告,我还使用了 android studio 提供的代码检查并更改了它推荐的所有内容,但没有运气。如果对程序有任何问题,请直接问,我是新手,所以有些可能不如它应该的那么好。

package com.qualcomm.ftcrobotcontroller.opmodes;

import com.qualcomm.robotcore.eventloop.opmode.OpMode;
import com.qualcomm.hardware.HiTechnicNxtCompassSensor;
import com.qualcomm.robotcore.hardware.DcMotor;
import com.qualcomm.robotcore.hardware.DcMotorController;

import java.util.ArrayList;


/**
 * Created by Tyler Eads on 12/7/15.
 */

@SuppressWarnings("deprecation")
public class SmartAutonomous  extends OpMode {

    private double distance;
    private double angle;
    private double currentx;
    private double currenty;
    private double targetx;
    private double targety;





    private HiTechnicNxtCompassSensor compassSensor;

    private final double compassvalue = compassSensor.getDirection();


    private final int countsperrotation = 1440;


    // INSERT ROBOT INFORMATION HERE...

    private final double wheeldiameter = 3.0;      //Insert Wheel Diameter Here
    private final double circumference = wheeldiameter * Math.PI;
    private final double gearratio = 1;         //write as fraction

    //END ROBOT INFORMATION


    private void distance(double currentx, double currenty, double targetx, double targety) {

        distance = Math.sqrt(((currentx - targetx) * (currentx - targetx)) + ((currenty - targety) * (currenty - targety)));

    }

    private void angle(double currentx, double currenty, double targetx, double targety) {

        angle = Math.toDegrees(Math.atan((targety-currenty)/(targetx-currentx)));

    }

    private final double wheelrotations = distance / circumference;
    private final double motorrotations = wheelrotations * gearratio;
    private final double encodercounts = motorrotations * countsperrotation;




    public enum Facing {North, NorthEast, East, SouthEast, South, SouthWest, West, NorthWest}
    private Facing facing;

    public enum RelativePosition {North, NorthEast, East, SouthEast, South, SouthWest, West, NorthWest}
    private RelativePosition relativeposition;





    private void facing() {
        if (260 <= compassvalue && compassvalue <= 264) {
            facing = Facing.North;
        } else if (264 < compassvalue && compassvalue < 348) {
            facing = Facing.NorthEast;
        } else if (348 <= compassvalue && compassvalue <= 352) {
            facing = Facing.East;
        } else if (352 < compassvalue && compassvalue < 88) {
            facing = Facing.SouthEast;
        } else if (88 <= compassvalue && compassvalue <= 92) {
            facing = Facing.South;
        } else if (92 < compassvalue && compassvalue < 178) {
            facing = Facing.SouthWest;
        } else if (178 <= compassvalue && compassvalue <= 182) {
            facing = Facing.West;
        } else if (182 < compassvalue && compassvalue < 260) {
            facing = Facing.NorthWest;
        }

    }

    private void pointrelative() {
        switch (facing) {
            case North:

                if (currenty < targety && currentx == targetx) {

                    relativeposition = RelativePosition.North;

                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.NorthEast;
                } else if (currenty == targety && currentx < targetx) {
                    relativeposition = RelativePosition.East;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.SouthEast;
                } else if (currenty > targety && currentx == targetx) {
                    relativeposition = RelativePosition.South;
                } else if (currenty > targety && currentx > targetx) {
                    relativeposition = RelativePosition.SouthWest;
                } else if (currenty == targety && currentx > targetx) {
                    relativeposition = RelativePosition.West;
                } else if (currenty < targety && currentx > targetx) {
                    relativeposition = RelativePosition.NorthWest;
                }

                break;

            case NorthEast:

                if (currenty < targety && currentx == targetx) {

                    relativeposition = RelativePosition.NorthWest;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.North;
                } else if (currenty == targety && currentx < targetx) {
                    relativeposition = RelativePosition.NorthEast;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.East;
                } else if (currenty > targety && currentx == targetx) {
                    relativeposition = RelativePosition.SouthEast;
                } else if (currenty > targety && currentx > targetx) {
                    relativeposition = RelativePosition.South;
                } else if (currenty == targety && currentx > targetx) {
                    relativeposition = RelativePosition.SouthWest;
                } else if (currenty < targety && currentx > targetx) {
                    relativeposition = RelativePosition.West;
                }

                break;

            case East:

                if (currenty < targety && currentx == targetx) {

                    relativeposition = RelativePosition.West;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.NorthWest;
                } else if (currenty == targety && currentx < targetx) {
                    relativeposition = RelativePosition.North;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.NorthEast;
                } else if (currenty > targety && currentx == targetx) {
                    relativeposition = RelativePosition.East;
                } else if (currenty > targety && currentx > targetx) {
                    relativeposition = RelativePosition.SouthEast;
                } else if (currenty == targety && currentx > targetx) {
                    relativeposition = RelativePosition.South;
                } else if (currenty < targety && currentx > targetx) {
                    relativeposition = RelativePosition.SouthWest;
                }

                break;

            case SouthEast:

                if (currenty < targety && currentx == targetx) {

                    relativeposition = RelativePosition.SouthWest;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.West;
                } else if (currenty == targety && currentx < targetx) {
                    relativeposition = RelativePosition.NorthWest;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.North;
                } else if (currenty > targety && currentx == targetx) {
                    relativeposition = RelativePosition.NorthEast;
                } else if (currenty > targety && currentx > targetx) {
                    relativeposition = RelativePosition.East;
                } else if (currenty == targety && currentx > targetx) {
                    relativeposition = RelativePosition.SouthEast;
                } else if (currenty < targety && currentx > targetx) {
                    relativeposition = RelativePosition.South;
                }

                break;

            case South:

                if (currenty < targety && currentx == targetx) {

                    relativeposition = RelativePosition.South;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.SouthWest;
                } else if (currenty == targety && currentx < targetx) {
                    relativeposition = RelativePosition.West;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.NorthWest;
                } else if (currenty > targety && currentx == targetx) {
                    relativeposition = RelativePosition.North;
                } else if (currenty > targety && currentx > targetx) {
                    relativeposition = RelativePosition.NorthEast;
                } else if (currenty == targety && currentx > targetx) {
                    relativeposition = RelativePosition.East;
                } else if (currenty < targety && currentx > targetx) {
                    relativeposition = RelativePosition.SouthEast;
                }

                break;

            case SouthWest:

                if (currenty < targety && currentx == targetx) {

                    relativeposition = RelativePosition.SouthEast;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.South;
                } else if (currenty == targety && currentx < targetx) {
                    relativeposition = RelativePosition.SouthWest;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.West;
                } else if (currenty > targety && currentx == targetx) {
                    relativeposition = RelativePosition.NorthWest;
                } else if (currenty > targety && currentx > targetx) {
                    relativeposition = RelativePosition.North;
                } else if (currenty == targety && currentx > targetx) {
                    relativeposition = RelativePosition.NorthEast;
                } else if (currenty < targety && currentx > targetx) {
                    relativeposition = RelativePosition.East;
                }

                break;

            case West:

                if (currenty < targety && currentx == targetx) {

                    relativeposition = RelativePosition.East;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.SouthEast;
                } else if (currenty == targety && currentx < targetx) {
                    relativeposition = RelativePosition.South;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.SouthWest;
                } else if (currenty > targety && currentx == targetx) {
                    relativeposition = RelativePosition.West;
                } else if (currenty > targety && currentx > targetx) {
                    relativeposition = RelativePosition.NorthWest;
                } else if (currenty == targety && currentx > targetx) {
                    relativeposition = RelativePosition.North;
                } else if (currenty < targety && currentx > targetx) {
                    relativeposition = RelativePosition.NorthEast
                    ;
                }

                break;

            case NorthWest:

                if (currenty < targety && currentx == targetx) {

                    relativeposition = RelativePosition.NorthEast;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.East;
                } else if (currenty == targety && currentx < targetx) {
                    relativeposition = RelativePosition.SouthEast;
                } else if (currenty < targety && currentx < targetx) {
                    relativeposition = RelativePosition.South;
                } else if (currenty > targety && currentx == targetx) {
                    relativeposition = RelativePosition.SouthWest;
                } else if (currenty > targety && currentx > targetx) {
                    relativeposition = RelativePosition.West;
                } else if (currenty == targety && currentx > targetx) {
                    relativeposition = RelativePosition.NorthWest;
                } else if (currenty < targety && currentx > targetx) {
                    relativeposition = RelativePosition.North;
                }

                break;
        }
    }

    private void action() {

        DcMotor rightdrive = hardwareMap.dcMotor.get("right_drive");
        DcMotor leftdrive = hardwareMap.dcMotor.get("left_drive");

        rightdrive.setDirection(DcMotor.Direction.REVERSE);

        leftdrive.setChannelMode(DcMotorController.RunMode.RESET_ENCODERS);
        rightdrive.setChannelMode(DcMotorController.RunMode.RESET_ENCODERS);

        compassSensor = (HiTechnicNxtCompassSensor) hardwareMap.compassSensor.get("compass");
        double fullpower = 1.0;

        switch(relativeposition) {


            case North:

                rightdrive.setTargetPosition((int) encodercounts);
                leftdrive.setTargetPosition((int) encodercounts);

                rightdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);
                leftdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);

                rightdrive.setPower(fullpower);
                leftdrive.setPower(fullpower);
                break;

            case NorthEast:

                if (compassvalue > compassvalue - (90-angle)) {
                    rightdrive.setPower(-fullpower);
                    leftdrive.setPower(fullpower);
                }
                else {
                    rightdrive.setTargetPosition((int) encodercounts);
                    leftdrive.setTargetPosition((int) encodercounts);

                    rightdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);
                    leftdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);

                    rightdrive.setPower(fullpower);
                    leftdrive.setPower(fullpower);
                }

                break;

            case East:

                if (compassvalue > compassvalue - 90) {
                    rightdrive.setPower(-fullpower);
                    leftdrive.setPower(fullpower);
                }
                else {
                    rightdrive.setTargetPosition((int) encodercounts);
                    leftdrive.setTargetPosition((int) encodercounts);

                    rightdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);
                    leftdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);

                    rightdrive.setPower(fullpower);
                    leftdrive.setPower(fullpower);
                }

                break;

            case SouthEast:

                if (compassvalue > compassvalue - (90+angle)) {
                    rightdrive.setPower(-fullpower);
                    leftdrive.setPower(fullpower);
                }
                else {
                    rightdrive.setTargetPosition((int) encodercounts);
                    leftdrive.setTargetPosition((int) encodercounts);

                    rightdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);
                    leftdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);

                    rightdrive.setPower(fullpower);
                    leftdrive.setPower(fullpower);
                }

                break;

            case South:

                if (compassvalue > compassvalue - 180) {
                    rightdrive.setPower(-fullpower);
                    leftdrive.setPower(fullpower);
                }
                else {
                    rightdrive.setTargetPosition((int) encodercounts);
                    leftdrive.setTargetPosition((int) encodercounts);

                    rightdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);
                    leftdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);

                    rightdrive.setPower(fullpower);
                    leftdrive.setPower(fullpower);
                }

                break;

            case SouthWest:

                if (compassvalue < compassvalue + (90+angle) ) {
                    rightdrive.setPower(fullpower);
                    leftdrive.setPower(-fullpower);
                }
                else {
                    rightdrive.setTargetPosition((int) encodercounts);
                    leftdrive.setTargetPosition((int) encodercounts);

                    rightdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);
                    leftdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);

                    rightdrive.setPower(fullpower);
                    leftdrive.setPower(fullpower);
                }

                break;

            case West:

                if (compassvalue < compassvalue + 90) {
                    rightdrive.setPower(fullpower);
                    leftdrive.setPower(-fullpower);
                }
                else {
                    rightdrive.setTargetPosition((int) encodercounts);
                    leftdrive.setTargetPosition((int) encodercounts);

                    rightdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);
                    leftdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);

                    rightdrive.setPower(fullpower);
                    leftdrive.setPower(fullpower);
                }

                break;

            case NorthWest:

                if (compassvalue < compassvalue + (90-angle)) {
                    rightdrive.setPower(fullpower);
                    leftdrive.setPower(-fullpower);
                }
                else {
                    rightdrive.setTargetPosition((int) encodercounts);
                    leftdrive.setTargetPosition((int) encodercounts);

                    rightdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);
                    leftdrive.setChannelMode(DcMotorController.RunMode.RUN_TO_POSITION);

                    rightdrive.setPower(fullpower);
                    leftdrive.setPower(fullpower);
                }

                break;

        }



    }



    private void smartmove() {
        distance(currentx, currenty, targetx, targety);
        angle(currentx, currenty, targetx, targety);
        facing();
        pointrelative();
        action();

        currentx = targetx;     //Sets target point to new current position
        currenty = targety;
    }

    private final ArrayList<Integer> Step = new ArrayList<>();

    @Override
    public void init() {


    }

    @Override
    public void loop() {



        int size = Step.size();
        for (int i=0; i<size; i++) {
            int element = Step.get(i);

            switch (element) {
                case 1:

                    currentx = 134;
                    currenty = 60;

                    targetx = 108;
                    targety = 60;

                    smartmove();
                    break;
                case 2:

                    targetx = 59.5;
                    targety = 107.5;

                    smartmove();

                    break;
            }
        }

    }



}

【问题讨论】:

    标签: java android android-studio nullpointerexception


    【解决方案1】:

    对不起,这不是一个太多的答案,但我无法发表评论

    你的代码很长,有很多冗余(你应该避免这个,但这不是重点)所以你真的需要包含一些关于你得到的错误的信息,除了它是空指针(stacktrace,如果你必须)。将字段分散到代码中也无济于事,因此更难找到。

    最好的猜测:看起来你从未实例化过你的枚举

    public enum Facing {North, NorthEast, East, SouthEast, South, SouthWest, West, NorthWest}
    private Facing facing;
    //naming this facing is also a pretty bad idea when you have a facing() function
    public enum RelativePosition {North, NorthEast, East, SouthEast, South, SouthWest, West, NorthWest}
    private RelativePosition relativeposition;
    

    但这只是猜测,这真的很难阅读

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 2020-06-21
      相关资源
      最近更新 更多