我需要编写操作来计算有两个儿子彼此相等的节点。我试过它,但我得到错误,并非所有代码路径都返回一个值。 请帮我测试一下 谢谢。
private class DistanceMatrixRunner extends AsyncTask<double[][], Void, double[][]> {
private String getDistance(final double lat1, final double lon1, final double lat2, final double lon2){
String parsedDistance = null;
try {
URL url = new URL("http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric&mode=driving");
final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
InputStream in = new BufferedInputStream(conn.getInputStream());
String response = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
JSONObject jsonObject = new JSONObject(response);
JSONArray array = jsonObject.getJSONArray("routes");
JSONObject routes = array.getJSONObject(0);
JSONArray legs = routes.getJSONArray("legs");
JSONObject steps = legs.getJSONObject(0);
JSONObject distance = steps.getJSONObject("distance");
parsedDistance =distance.getString("text");
} catch (IOException | JSONException e) {
e.printStackTrace();
}
return parsedDistance;
}
@Override protected double[][] doInBackground(double[][]... params) {
if (params.length == 0) return new double[0][];
String k;
double lat1,lat2,lng1,lng2;
final double[][] latLngData = params[0];
final int length = latLngData.length;
double[][] out = new double[length][length];
for(int i = 0; i < length; i++) {
lat1 = latLngData[i][0];
lng1 = latLngData[i][1];
for (int j = 0; j < length; j++) {
lat2 = latLngData[j][0];
lng2 = latLngData[j][1];
k = getDistance(lat1,lng1,lat2,lng2);
out[i][j] = Double.parseDouble(k.substring(0,k.length()-2));
try {
// Avoid the API rate limit
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return out;
}
@Override
protected void onPostExecute(double[][] doubles) {
super.onPostExecute(doubles);
distanceMatrix = doubles;
// Do any other post-complete updates here
}
}
答案 0 :(得分:2)
你需要在If语句之外添加一个返回,如果这个函数返回某个东西,编译器就无法解决。如果你只能在返回0的函数末尾添加一个return语句,它应该可以工作。不是最喜欢的修复,你应该真的重写函数,所以返回实际上不仅仅是一种令人满意的编译器,但它应该工作。
丹尼
答案 1 :(得分:0)
正如您的错误所述,您的当前函数在某些情况下可能没有return语句。
int
错误&#34;并非所有路径都返回值&#34;是正确的。如果执行流程转到第三个if语句并且为false,则不返回任何值。您的函数被定义为始终返回public static int CountWhoHasTwoSameSons(BinNode<int> Head)
{
if (Head != null)
{
if (IsLeaf(Head))
return 1;
if (Head.HasLeft() && Head.HasRight())
{
if (Head.GetRight().GetValue() == Head.GetLeft().GetValue()))
return 1 + CountWhoHasTwoSameSons(Head.GetLeft()) + CountWhoHasTwoSameSons(Head.GetRight());
}
}
return 0;
}
,并且不会考虑该情况。
所以,尝试这样的方法来解决它:
{{1}}