【发布时间】:2018-06-15 06:38:11
【问题描述】:
我的问题是当我们将j=i+1 更改为j = 0 或
j = i。我的意思是这两种情况有什么区别?
import java.util.Scanner;
public class FindNearestPoints {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the number of points: ");
int numberOfPoints = input.nextInt();
// Create an array to store points
double[][] points = new double[numberOfPoints][2];
System.out.print("Enter " + numberOfPoints + " points: ");
for (int i = 0; i < points.length; i++) {
points[i][0] = input.nextDouble();
points[i][1] = input.nextDouble();
}
// p1 and p2 are the indices in the points array
int p1 = 0, p2 = 1; // Initial two points
double shortestDistance = distance(points[p1][0], points[p1][1],
points[p2][0], points[p2][1]); // Initialize shortestDistance
// Compute distance for every two points
for (int i = 0; i < points.length; i++) {
for (int j = i + 1; j < points.length; j++) {
double distance = distance(points[i][0], points[i][1],
points[j][0], points[j][1]); // Find distance
if (shortestDistance > distance) {
p1 = i; // Update p1
p2 = j; // Update p2
shortestDistance = distance; // Update shortestDistance
}
}
}
// Display result
System.out.println("The closest two points are " +
"(" + points[p1][0] + ", " + points[p1][1] + ") and (" +
points[p2][0] + ", " + points[p2][1] + ")");
}
/** Compute the distance between two points (x1, y1) and (x2, y2)*/
public static double distance(
double x1, double y1, double x2, double y2) {
return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
}
【问题讨论】:
-
请在问题中添加minimal reproducible example - 以及您在亲自尝试时已经观察到的内容。
-
很明显,第二个循环然后从 0 或 1 开始运行,而不是从
i+1开始运行,在这两种情况下你都会遇到 j=i 的情况,所以你试图找到距离在points[i]和points[i]之间。所以,这将是零,所以你的 shortestDistance 将永远是零。
标签: java arrays loops for-loop