2016-04-06 13 views
-1
 public static void main(String[] args) { 
    final String TITLE = "Lab 11 by "; 
    double [][] points = {{1,2,3},{0,0,2},{1,3,5},{0,1,1}}; 
    double minDistance = distanceBetween(points[0],points[1]); 
    int pointNum1 = 0; int pointNum2 = 1; 
    for(int p = 0; p < points.length-1; p++){ 
     for(int r = p +1; r< points.length;r++){ 
     if(distanceBetween(points[p],points[r])<minDistance){ 
     minDistance =distanceBetween(points[p],points[r]); 
     pointNum1 = 1; 
     pointNum2 = r; 
     } 
} 
} 
    String output = " Find closest two points!" + "\n" + "Points to consider: \n"; 
    output += showPoints(points); 
    output += "\n" + "Minimum distance is " + minDistance + "." + "\n"; 
    output += " The closest two points are " + pointNum1 + " and " + pointNum2 + "."; 


    JOptionPane.showMessageDialog(null,output,TITLE,JOptionPane.INFORMATION_MESSAGE); 
    } // end main 

Ich glaube, mein Problem meine beiden nächsten Punkte in hier sind wohl 2 sein und 4, aber mir ausdruckt 1 und 3Finden Sie die nächsten zwei Punkte in JAVA

+0

Sie wissen, der hilfreichste Teil Ihres Codes, den Sie weggelassen haben. Wo ist die 'distanceBetween' Methode definiert und können wir den Code sehen? –

+1

Ohne Ihren Code zu überprüfen: 2 & 4 vs 1 & 3 klingt wie Sie nicht erkannt haben, dass Arrays bei 0 beginnen. Sie haben keinen Punkt 4. – zyexal

Antwort

0

Sie zuweisen immer Wert „1 "zu pointNum1, so wird dieser Wert immer angezeigt:

pointNum1 = 1; 

In pointNum2 Sie den Array-Index zuweisen. Arrays beginnen in 0, nicht in 1, so müssen Sie zuweisen:

pointNum2 = r + 1; 

Auch wenn Ihr Programm das richtige Ergebnis bekommt, wird der Ausgang 1 und (richtiger Punkt - 1).

+0

Okay ich habe meine PointNum1 zu p zugewiesen und es ist immer noch 1. –

+0

Es ist das gleiche Problem wie bei PointNum2. Muss zugewiesen werden: pointNum1 = p + 1 ;, wenn Sie die Position ab 1 und nicht bei 0 vergeben möchten. – Wakachopo

+0

Okay Danke! Ich schätze es. –

0

Sie haben immer einen Ihrer Werte auf 1 gesetzt und ignorieren die nullbasierte Indexnatur von Arrays. Hier ist eine korrigierte Version Ihres Tests. Ich habe ein paar kleinere Korrekturen vorgenommen und meinen Code für die Berechnung der Entfernung zwischen den Punkten eingefügt.

public class Test { 
    public static void main(String[] args) { 
     final String TITLE = "Lab 11 by "; 
     double [][] points = { { 1, 2, 3 }, { 0, 0, 2 }, { 1, 3, 5 }, { 0, 1, 1 } }; 
     double minDistance = 1000000000; 
     int pointNum1 = -1; 
     int pointNum2 = -1; 
     for (int p = 0; p < points.length - 1; p++) { 
      for (int r = p +1; r < points.length; r++) { 
       double distance = distanceBetween(points[p], points[r]); 
       if (distance < minDistance) { 
        minDistance = distance; 
        pointNum1 = p; 
        pointNum2 = r; 
       } 
      } 
     } 

     // These lines simply move from the zero based indices to more meaningful numbers. 
     pointNum1++; 
     pointNum2++; 

     System.out.println("The shortest distance is between point " + 
      pointNum1 + " and point " + pointNum2 + "."); 
    } 

    private static double distanceBetween(double[] p1, double[] p2) { 
     double total = 0; 
     for (int i = 0; i < p1.length; i++) { 
      total += Math.pow(p1[i] - p2[i], 2); 
     } 

     return Math.sqrt(total); 
    } 
} 
Verwandte Themen