2014-02-26 51 views
3

我的作業有問題,我無法使最後一部分工作。我在這裏做錯了什麼?它不會打印「圓2重疊圓1」。或「圓2不與圓1重疊」。前兩種情況是打印的。下面是問題:Java - 兩個圈重疊或內部

編寫一個程序(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.");} 
    } 
} 

任何指導理解

+1

這是你的代碼第一個還是第二個? – Kakarot

+2

你是什麼意思 - 「此代碼打印前兩個輸出兩個。」前兩個是什麼?你提供什麼樣的輸入以及它打印什麼? –

+0

輸出來了兩次,因爲你使用的條件如果沒有其他如果...所以,控制匹配兩個條件:一個用於半徑,另一個用於距離。如果阻塞正確,請使用if .. else。你會得到正確的輸出。 – Sambhav

回答

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) 

將始終爲真,因此代碼將永遠不會達到第三或第四個條件灰。實現你正在嘗試做的正確方法是將我在上面提供的代碼中完成的所有條件合併在一起。 希望這有助於!

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「做其他事情。

如果你仔細想一想,就不可能出現第一或第二種情況。所以最後兩條語句在邏輯上不可達。