2011-06-15 48 views
-1

可能重复:
Java Recursive Distance Math ProblemJava距离的递归问题?

下面的代码让我错误的解决问题的办法。我知道问题在于双倍距离设置为0.我不知道如何解决这个问题。我会喜欢任何解决方案,因为我已经呆了好几个小时了。我试过设置 公共静态双距离; 并移动公式一下。

我想把5个地方的坐标加在一起。

import java.util.Scanner; 

class distance { 



    public static void main(String[] args) { 

     System.out.println("Welcome to Travel Bliss Distance Calculator!"); 
     Scanner input = new Scanner(System.in); 
     int[] x = new int[5]; 
     int[] y = new int[5]; 
     String[] city = new String[5]; 


     int i=0; 
     for (i=0; i < 5;){ 
      System.out.println("Enter City>>"); 
      city[i] = input.next(); 
      System.out.println("Enter X Coordinates>>"); 
      x[i] = input.nextInt(); 
      System.out.println("Enter Y Coordinates>>"); 
      y[i] = input.nextInt(); 
      System.out.println("You Entered: " + city[i] + " with Coordinates: (" + x[i] + "," + y[i] + ") "); 
      i++; 

     } 
     System.out.println("============================================================"); 
     System.out.println("Total Distance Between:" + city[0] +", " + city[1] + ", " + city[2] + ", " + city[3] + ", " + city[4]+" is>>"); 
     System.out.println(totalDistance(x, y, i)); 

    } 


    public static double totalDistance(int[] x, int[] y, int i){ 
    double distance = 0; 
     if (i == 1){ 
      double cordX = x[i] - x[i-1]; 
      double cordY = y[i] - y[i-1]; 
      distance = Math.pow(cordX , 2) + Math.pow(cordY, 2); 
      return distance; 
     } 
     else { 
      return Math.round(Math.sqrt(distance) + totalDistance(x,y,i-1)); 
     } 
    } 

    } 
+1

这功课吗?请标记为这样。如果是这样,请解释您尝试过的以及您卡在哪里。你有没有在调试器中完成程序? – 2011-06-15 03:16:16

+0

你的for循环是草率的:删除'int i = 0;'(for循环之前的行 - 这什么都不做)并且将'i ++'移动到'for(for i = 0; i <5; i ++)' – Bohemian 2011-06-15 03:25:14

+0

您需要计算每个城市之间的距离还是两个终点城市之间的最终距离? – 2011-06-15 03:37:24

回答

1

你的问题在这里。我会给你一个提示,距离的计算有多久?

public static double totalDistance(int[] x, int[] y, int i){ 
double distance = 0; 
    if (i == 1){ 
     double cordX = x[i] - x[i-1]; 
     double cordY = y[i] - y[i-1]; 
     distance = Math.pow(cordX , 2) + Math.pow(cordY, 2); 
     return distance; 
    } 
    else { 
     return Math.round(Math.sqrt(distance) + totalDistance(x,y,i-1)); 
    } 
} 

好像你有一些问题,理解递归;这应该会给你提供更好的理解,让你更好地理解你在做什么。

public int testFunction(int[] arr, int i) 
{ 
    int total = 0; 
    if(i == 0) { 
    return 0; 
    } 
    total *= arr[i]; 
    return total + testFunction(arr, i -1); 
} 
+0

我知道它在那里。距离计算5次。 :(为什么我不能解决这个问题:( – allencoded 2011-06-15 03:23:13

+0

不正确,你只计算距离1次,只有当我是1时,你才会执行距离的计算当弹出堆栈时,你最终会得到sqrt (0)+(i = 1时的值) – Suroot 2011-06-15 03:25:47

+0

*是什么意思? – allencoded 2011-06-15 03:38:50

1
public static double totalDistance(int[] x, int[] y, int i){ 
    double distance = 0; 
    if (i == 1){ 
     double cordX = x[i] - x[i-1]; 
     double cordY = y[i] - y[i-1]; 
     distance = Math.pow(cordX , 2) + Math.pow(cordY, 2); 
     return distance; 
    } 
    else { 
     return Math.round(Math.sqrt(distance) + totalDistance(x,y,i-1)); 
    } 
} 

没有任何意义。你只计算'city0'和'city1'之间的距离。对于所有其他城市,您只需返回sqrt(0) + totalDistance(x,y,i-1)。你需要重新思考你的totalDistance(...)方法,因为,因为它的立场,它只会返回

sqrt(0) + sqrt(0) + sqrt(0) + sqrt(0) + totalDistance(x,y,1) 

你需要做更多的工作,当(i != 1)

public static double totalDistance(int[] x, int[] y, int i){ 
double distance = 0; 
    double cordX = x[i] - x[i-1]; 
    double cordY = y[i] - y[i-1]; 
    distance = Math.pow(cordX , 2) + Math.pow(cordY, 2); 

    if (i == 1){ 
     return distance; 
    } 
    else 
    { 
     return Math.round(Math.sqrt(distance) + totalDistance(x,y,i-1)); 
    } 
} 

是一个很好的起点,但是你仍然需要考虑什么时候/在哪里做sqrt()。

+0

是的,这是我的问题。但我似乎无法想象它。 – allencoded 2011-06-15 03:26:06

+0

在if()之外进行距离计算是一个好的开始。你想要在每种情况下计算距离,而不是在城市0和城市1之间; – Mike 2011-06-15 03:29:36

+0

我试过迈克没有工作 – allencoded 2011-06-15 03:48:18

0
public static double totalDistance(int[] x, int[] y, int i){ 

if (i > 0){ 
    double cordX = x[i] - x[i-1]; 
    double cordY = y[i] - y[i-1]; 
    double distance = Math.sqrt(Math.pow(cordX , 2) + Math.pow(cordY, 2)); 
    return Math.round(distance + totalDistance(x,y,i-1)) 
} 
else 
{ 
    return 0;  
} 
} 
0

而是计算我的== 1你要计算距离所有的时间(即从4-3,3-2,2-1,1-0),除了i = 0时当你返回0.

Btw你在主要totaldistance函数调用应该有i-1作为参数,而不是我没有得到一个ArrayOutofBoundsException。

public static double totalDistance(int[] x, int[] y, int i) 
     { 
        double distance = 0; 
      if(i==0) 
      { 
       return 0; 
      } 
      else 
      { 
       double cordX = x[i] - x[i-1]; 

        double cordY = y[i] - y[i-1]; 

        distance = Math.pow(cordX , 2) + Math.pow(cordY, 2); 
         distance=Math.round(Math.sqrt(distance)); 
       System.out.println(cordX+" "+cordY+" "+distance); 
       return (distance + totalDistance(x,y,i-1)); 
      } 
    }