Java - 两个圆圈重叠或内部

时间:2014-02-26 05:11:26

标签: java

我的作业有问题,而且我无法完成最后一部分的工作。我在这做错了什么?它不会打印“圆圈2重叠圆圈1”。或“圆圈2不与圆圈1重叠”。前两个案例打印。这是一个问题:

编写一个程序(TwoCircles.java),提示用户输入两个圆的中心坐标和半径,并确定两者之间的几何关系,并相应地打印以下消息之一: 1.圆圈1位于圆圈2内。 2.圆圈2位于圆圈1内。 3.圆圈2与圆圈1重叠。 4.圆圈2与圆圈1不重叠。

以下是我目前的代码:

import java.util.Scanner;
public class TwoCircles {
public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    System.out.print("Enter Circle 1 center x-, y-coordinates, and radius: ");
    double X1 = input.nextDouble();
    double Y1 = input.nextDouble();
    double radius1 = input.nextDouble();
    System.out.print("Enter Circle 2 center x-, y-coordinates, and radius: ");
    double X2 = input.nextDouble();
    double Y2 = input.nextDouble();
    double radius2 = input.nextDouble();    

    double distance = Math.pow((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2), 0.5);

    if (radius2 >= radius1){
        if (distance <= (radius2 - radius1))
            System.out.println("Circle 1 is inside Circle 2.");}
    else if (radius1 >= radius2){
        if (distance <= (radius1 - radius2))
            System.out.println("Circle 2 is inside Circle 1.");}
    else if (distance > (radius1 + radius2)){
        System.out.println("Circle 2 does not overlap Circle 1.");}
    else {
        System.out.println("Circle 2 overlaps Circle 1.");}
    }
}

任何指导意见

2 个答案:

答案 0 :(得分:3)

使用以下代码:

import java.util.Scanner;
public class TwoCircles {
  public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    System.out.print("Enter Circle 1 center x-, y-coordinates, and radius: ");
    double X1 = input.nextDouble();
    double Y1 = input.nextDouble();
    double radius1 = input.nextDouble();
    System.out.print("Enter Circle 2 center x-, y-coordinates, and radius: ");
    double X2 = input.nextDouble();
    double Y2 = input.nextDouble();
    double radius2 = input.nextDouble();    
    double distance = Math.pow((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2), 0.5);
    if (radius2 >= radius1 && distance <= (radius2 - radius1)){
        System.out.println("Circle 1 is inside Circle 2.");
    }
    else if (radius1 >= radius2 && distance <= (radius1 - radius2) ) {
        System.out.println("Circle 2 is inside Circle 1.");
    }
    else if (distance > (radius1 + radius2)){
        System.out.println("Circle 2 does not overlap Circle 1.");
    }
    else {
        System.out.println("Circle 2 overlaps Circle 1.");}
    }
}

您使用的代码的问题是前两个条件之一:

if(radius1>=radius2) 

else if(radius1<=radius2)

将始终为true,因此代码永远不会达到第三或第四个条件。实现您要做的事情的正确方法是将我在上面的代码中完成的所有条件合并在一起。 希望这有帮助!

答案 1 :(得分:1)

你可能会在if-else语句中“迷失”自己。

首先,我建议用所有大括号来编写它以正确理解,那里到底发生了什么:

    if (radius2 >= radius1) {
        if (distance <= (radius2 - radius1)) {
            System.out.println("Circle 1 is inside Circle 2.");
        }
    } else if (radius1 >= radius2) {
        if (distance <= (radius1 - radius2)) {
            System.out.println("Circle 2 is inside Circle 1.");
        }
    } else if (distance > (radius1 + radius2)) {
        System.out.println("Circle 2 does not overlap Circle 1.");
    } else {
        System.out.println("Circle 2 overlaps Circle 1.");
    }

如您所见,您说“如果radius2等于或大于radius1”,则执行某些操作,如果没有,并且“radius1大于或等于radius2”则执行其他操作。

如果您考虑一下,就不可能既不是第一个也不是第二个条件。所以最后两个语句在逻辑上是不可达的。