2011-06-15 88 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)); 
      } 
    }