变量已在范围内定义?

Posted

技术标签:

【中文标题】变量已在范围内定义?【英文标题】:Variable already define in scope? 【发布时间】:2015-04-08 02:53:13 【问题描述】:

您好,我在实现使用 Haversine 公式在 Java 中计算距离的方法时遇到问题。

我试图在其中实现它的部分是:

            if(gps.canGetLocation())

                double latitude1 = gps.getLatitude();
                double longitude1 = gps.getLongitude();

                double atrium_longitude = -122.6078622;
                double atrium_latitude = 49.170241;

                //double latitude = 49.1702665;
                //double longitude = -122.6078454;
                String atriumString = "Atrium";
                double distanceMeters = (latitude1, longitude1, atrium_latitude, atrium_longitude, atriumString);

                TextView distanceToText;
                distanceToText = (TextView) findViewById(R.id.distanceTo);

                distanceToText.setText("" + distanceMeters);
                // \n is for new line
                Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude1 + "\nLong: " + longitude1 + "\n", Toast.LENGTH_LONG).show();
            else
                // can't get location
                // GPS or Network is not enabled
                // Ask user to enable GPS/network in settings
                gps.showSettingsAlert();
            

Haversine 方法是:

public static double calculateDistance(double latitude1, double longitude1, double latitude2, double longitude2, String buildingName) 
    double toRad = (Math.PI/180);
//double latitude = gps.getLatitude();
//double longitude = gps.getLongitude();

//double latitude = 49.1702665;
//double longitude = -122.6078454;

double radius = 6371000;
double lat1 = latitude1 * toRad;
double lon1 = longitude1 * toRad;

double lat2 = latitude2 * toRad;
double lon2 = longitude2 * toRad;

double deltaLat = (latitude2 - latitude1) * toRad;
double deltaLon = (longitude2 - longitude1) * toRad;

double aHaversine = Math.sin(deltaLat/2) * Math.sin(deltaLat/2) +
        Math.cos(lat1) * Math.cos(lat2) *
                Math.sin(deltaLon/2) * Math.sin(deltaLon/2);

double cHaversine = 2 * Math.atan2(Math.sqrt(aHaversine), Math.sqrt(1-aHaversine));

double distanceHaversine = radius * cHaversine;

return distanceHaversine;

我相信我的方法是正确的,但我可能错了,因为我在大学的第一年只是一个业余编程。另外,如果有更有效的方法来实现这个公式,请务必告诉我。

【问题讨论】:

【参考方案1】:

看起来您实际上并没有调用您编写的 calculateDistance() 方法。

我认为这行:

double distanceMeters = (latitude1, longitude1, atrium_latitude, atrium_longitude, atriumString);

应该是:

double distanceMeters = calculateDistance(latitude1, longitude1, atrium_latitude, atrium_longitude, atriumString);

这可能只是复制和粘贴错误。如果是这样,请使用您遇到的任何编译/运行时错误更新您的问题。

【讨论】:

以上是关于变量已在范围内定义?的主要内容,如果未能解决你的问题,请参考以下文章

CMake:从函数内定义范围中的访问变量

Javascript命名空间 - 如何根据命名导出函数范围内定义的函数和变量?

为了让 groovy 闭包修改在委托范围内定义的变量,是不是需要显式指定 delegate.theVariableName?

成员变量与局部变量

成员变量和局部变量

在函数中创建类并访问在包含函数范围内定义的函数