gpt4 book ai didi

java - 不能影响始终为空的简单 Double[] 表的值 - 2 个代码之间的比较

转载 作者:行者123 更新时间:2023-12-02 06:24:54 26 4
gpt4 key购买 nike

我问过类似的问题:Can't affect values to a simple Double[] table which is always null

我有一个包含 NMEA 帧的 TXT 文件。我检索 $GPGGA 和 $GPRMC 帧的纬度和经度。然后我将纬度和经度转换为十进制。我的代码的第一个版本运行良好。然后我制作了第二个,结构更加结构化,但不起作用。

这是我的代码的第二个版本,它不起作用:

/**
* Updating position on Google Maps
* @param values
*/
public void showMyPosition(String values)
{
String[]selectedposition=values.split(",");
Double[]decimalcoordinates=new Double[2];
if(selectedposition.length>1 || selectedposition[0].equals("$GPGGA"))
{
int[]coordinatesposition=new int[]{2,4};
decimalcoordinates = convertNmeaToDecimal(selectedposition, coordinatesposition);
}
else if(selectedposition.length>1 || selectedposition[0].equals("$GPRMC"))
{
int[]coordinatesposition=new int[]{3,5};
decimalcoordinates = convertNmeaToDecimal(selectedposition, coordinatesposition);
}

LatLng position=new LatLng(decimalcoordinates[0],decimalcoordinates[1]);
googlemap=((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
marker=googlemap.addMarker(new MarkerOptions().title("You are here !").position(position));
googlemap.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 19));
}

/**
* Convert NMEA coordinates into Decimal degrees coordinates.
* @param nmeaframes
* Contains all the NMEA frame
* @param coordinatesposition
* Contains the position of the latitude and longitude into nmeaframes[]
* @return decimalcoordinates*
*/
public Double[] convertNmeaToDecimal(String[]nmeaframes, int[]coordinatesposition)
{
Double nmeacoordinates=null;
Double[]decimalcoordinates=new Double[2];

for(int i=0; i<2; i++)
{
nmeacoordinates=Double.parseDouble(nmeaframes[coordinatesposition[i]]);
decimalcoordinates[i]=Math.floor(nmeacoordinates/100)+(nmeacoordinates-Math.floor(nmeacoordinates/100)*100)/60;
}
return decimalcoordinates;
}

这是我的 LogCat:

12-17 14:47:03.476: E/AndroidRuntime(6769): FATAL EXCEPTION: main
12-17 14:47:03.476: E/AndroidRuntime(6769): java.lang.NumberFormatException: Invalid double: "A"
12-17 14:47:03.476: E/AndroidRuntime(6769): at java.lang.StringToReal.invalidReal(StringToReal.java:63)

我认为我已经完全沉浸在自己的代码中了,以至于我再也看不到自己的错误了。这似乎和我之前的问题是一样的。但我无法解决。

你能帮我吗?

编辑 - 这是一个非常粗心的错误...感谢 Alex Walker 帮助我指出了我的错误

To give the original functionality, you need to change both of those || operators to &&. That way it will check both cases as required. That is, use:

if(selectedposition.length>1 && selectedposition[0].equals("$GPGGA"))

else if(selectedposition.length>1 && selectedposition[0].equals("$GPRMC"))

最佳答案

这些代码示例非常长且非常相似,因此很难确定实际问题是什么。

然而,版本 2 中的以下几行确实存在一个明显的错误:

if(selectedposition.length>1 || selectedposition[0].equals("$GPGGA"))

else if(selectedposition.length>1 || selectedposition[0].equals("$GPRMC"))

根据您的版本 1 代码,算法应检查 selectedposition.length>1,如果是,则尝试执行操作。如果不是,请不要执行任何操作。

但是在上面列出的版本 2 代码中, block

else if(selectedposition.length>1 || selectedposition[0].equals("$GPRMC"))

除非输入恰好是一个字符长,否则永远不会被调用。

要提供原始功能,您需要将这两个 || 运算符更改为 &&。这样它将根据需要检查这两种情况。也就是说,使用:

if(selectedposition.length>1 && selectedposition[0].equals("$GPGGA"))

else if(selectedposition.length>1 && selectedposition[0].equals("$GPRMC"))

关于java - 不能影响始终为空的简单 Double[] 表的值 - 2 个代码之间的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20636363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com