【问题标题】:what happens when we change the value which is in loop? [closed]当我们改变循环中的值时会发生什么? [关闭]
【发布时间】:2018-06-15 06:38:11
【问题描述】:

我的问题是当我们将j=i+1 更改为j = 0j = 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


【解决方案1】:

如果您设置j = i,那么最小距离将为零,因为您将计算一个点与其自身之间的距离!

如果您设置j = 0,上述内容仍然适用,尽管有不必要的重复压缩,因为您将包括j == i

【讨论】:

    【解决方案2】:

    当我们将j=i+1 更改为j = 0j = i

    我们第一次在你的代码中找到for statement,将创建一个变量j并将其初始化为i+1

    将其更改为任何其他值,我们将得到不同的初始化值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多