无法对对象进行循环

时间:2014-12-06 18:27:48

标签: java

我正在尝试创建这个http://www.ibm.com/developerworks/library/j-coordconvert/ - 军事网格参考系统的可视网格。我有UTM的纬度/经度,也有MGRS ...其中ar

17 T 330649 4689666

17TLG3064989666

但是当从MGRS到纬度时,我会得到以下结果: [D@18e3f02a

public class CoordinateConversion {
    public static void main(String args[]) {

        CoordinateConversion test = new CoordinateConversion();
        CoordinateConversion test2 = new CoordinateConversion();
        test.latLon2UTM(35.58, 82.56);
        System.out.println(test.latLon2UTM(42.340837, -83.055821));
        System.out.println();
        test2.latLon2UTM(35.58, 82.56);
        System.out.println(test2.latLon2MGRUTM(42.340837, -83.055821));

        CoordinateConversion test3 = new CoordinateConversion();
        test3.latLon2UTM(35.58, 82.56);
        //System.out.print(test3.mgrutm2LatLong(42.340837, -83.055821));
        //System.out.println(test3.mgrutm2LatLong("02CNR0634657742"));


        MGRUTM2LatLon mg = new MGRUTM2LatLon();
        //mg.convertMGRUTMToLatLong("02CNR0634657742");
        String MGRUTM = "17TLG3064989666";
        System.out.println(mg.convertMGRUTMToLatLong(MGRUTM));
        //for loop to be developed

    }

    public double[] utm2LatLon(String UTM) {
        UTM2LatLon c = new UTM2LatLon();
        return c.convertUTMToLatLong(UTM);
    }

    public double[] mgrutm2LatLon(String MGRUTM) {
        MGRUTM2LatLon c = new MGRUTM2LatLon();
        return c.convertMGRUTMToLatLong(MGRUTM);
    }
}

从这个班级开始:

public double[] convertMGRUTMToLatLong(String mgrutm) {
    double[] latlon = {0.0, 0.0};
    // 02CNR0634657742
    int zone = Integer.parseInt(mgrutm.substring(0, 2));
    String latZone = mgrutm.substring(2, 3);

    String digraph1 = mgrutm.substring(3, 4);
    String digraph2 = mgrutm.substring(4, 5);
    easting = Double.parseDouble(mgrutm.substring(5, 10));
    northing = Double.parseDouble(mgrutm.substring(10, 15));

    LatZones lz = new LatZones();
    double latZoneDegree = lz.getLatZoneDegree(latZone);

    double a1 = latZoneDegree * 40000000 / 360.0;
    double a2 = 2000000 * Math.floor(a1 / 2000000.0);

    Digraphs digraphs = new Digraphs();

    double digraph2Index = digraphs.getDigraph2Index(digraph2);

    double startindexEquator = 1;
    if ((1 + zone % 2) == 1) {
        startindexEquator = 6;
    }

    double a3 = a2 + (digraph2Index - startindexEquator) * 100000;
    if (a3 <= 0) {
        a3 = 10000000 + a3;
    }
    northing = a3 + northing;

    zoneCM = -183 + 6 * zone;
    double digraph1Index = digraphs.getDigraph1Index(digraph1);
    int a5 = 1 + zone % 3;
    double[] a6 = {16, 0, 8};
    double a7 = 100000 * (digraph1Index - a6[a5 - 1]);
    easting = easting + a7;

    setVariables();

    double latitude = 0;
    latitude = 180 * (phi1 - fact1 * (fact2 + fact3 + fact4)) / Math.PI;

    if (latZoneDegree < 0) {
        latitude = 90 - latitude;
    }

    double d = _a2 * 180 / Math.PI;
    double longitude = zoneCM - d;

    if (getHemisphere(latZone).equals("S")) {
        latitude = -latitude;
    }

    latlon[0] = latitude;
    latlon[1] = longitude;
    return latlon;
}

我试图不进入一个大型图书馆,在那里我将不得不学习可能耗费时间的东西。

所以我试图循环,所以我往东(东)和北(北),并且不能越过我有一点的点 - 纬度/经度。

希望我在没有说太多的情况下清楚地问我的问题。

任何帮助将不胜感激。

谢谢, -Terry

2 个答案:

答案 0 :(得分:1)

convertMGRUTMToLatLong()的结果是double的数组,默认情况下,数组在Java中以相当不可读的格式转换为String。这就是[D@18e3f02a来自的地方。尝试System.out.println(Arrays.toString(mg.convertMGRUTMToLatLong(MGRUTM)));,您将获得更易读的输出。

答案 1 :(得分:0)

在convertMGRUTMToLatLong(String s)方法中,您将返回一个数组 latlon (即一个对象)。 它返回它可能你不想要的哈希码。 您想要打印数组值。所以在你的主要方法中你替换下面的行;

System.out.println(mg.convertMGRUTMToLatLong(MGRUTM));

    double[] a = mg.convertMGRUTMToLatLong(MGRUTM) ;
System.out.println(a[0]+" " + a[1] );

希望有所帮助!