2015-10-19 55 views
0

只需編寫一個簡單的程序,要求用戶輸入圓形,矩形或三角形。然後它會要求他們對形狀進行適當的測量,然後使用正確的方法計算此形狀的面積。
但是,只有矩形方法纔會生成正確的答案。
無論輸入什麼,三角形方法都不會乘以0.5,而是隻返回base * height,圓形方法總是會生成0.0。返回錯誤值的方法?

提出了一些建議的更改,但仍然存在相同的問題。這是完整的代碼。

import java.util.Scanner; 

public class Area{ 
public static void main(String[] args){ 
    Scanner myScanner = new Scanner(System.in); 

    String shape = ""; 
    boolean notAcceptable = true; 

    do { 
     System.out.print("What kind of shape? "); 
     shape = myScanner.next(); 
     if(shape.equals("circle") || shape.equals("triangle") || shape.equals("rectangle")){ 
      notAcceptable= false; 
     }else{ 
      System.out.println("ERROR: Please input 'circle','rectangle' or 'triangle'."); 
     } 
    }while(notAcceptable); 

    double radius = 0.0; 
    double base = 0.0; 
    double height = 0.0; 
    boolean acceptable = false; 
    boolean acceptable1 = false; 
    boolean acceptable2 = false; 

    if(shape.equals("circle")){ 
     System.out.print("Enter the radius of the circle: "); 

     while(!acceptable){ 
     //check if the input is a double. 
     if (myScanner.hasNextDouble()){ 
     radius = myScanner.nextDouble(); 
     acceptable = true; 
     break; 
     } 
     else{ 
     System.out.println("ERROR: Input must be a double"); 
     System.out.print("Enter the radius of the circle "); 
     myScanner.next(); 
     } 
     } 

    }else{ 
     System.out.print("Enter the height: "); 
     while(!acceptable1){ 
     //check if the input is a double. 
     if (myScanner.hasNextDouble()){ 
     height = myScanner.nextDouble(); 
     acceptable = true; 
     break; 
     } 
     else{ 
     System.out.println("ERROR: Input must be a double"); 
     System.out.print("Enter the height: "); 
     myScanner.next(); 
     } 
     } 

     System.out.print("Enter the length of the base: "); 
     while(!acceptable2){ 
     //check if the input is a double. 
     if (myScanner.hasNextDouble()){ 
     base = myScanner.nextDouble(); 
     acceptable = true; 
     break; 
     } 
     else{ 
     System.out.println("ERROR: Input must be a double"); 
     System.out.print("Enter the length of the base: "); 
     myScanner.next(); 
     } 
     } 
    } 

    if(shape=="circle"){ 
     circleArea(radius); 
    }else if (shape=="triangle"){ 
     triangleArea(base,height); 
    }else{ 
     rectangleArea(base,height); 
    } 


}//bracket that closes main method 

    public static void circleArea(double r){ 
     double areaC= 3.14*r*r; 
     System.out.println("The area of your circle is "+areaC); 
    } 

    public static void rectangleArea(double b1, double h1){ 
     double areaR= b1*h1; 
     System.out.println("The area of your rectangle is "+areaR); 
    } 

    public static void triangleArea(double b2, double h2){ 
     double areaT = 0.5*b2*h2; 
     System.out.println("The area of your triangle is "+areaT); 
    } 


}//bracket that closes class 
+6

那麼......你的三角形沒有'0.5'將基數和高度乘以 – sam

+2

而半徑設置在哪裏? – Ryan

+0

作爲一個方面說明,你沒有從該功能返回任何東西,你只是在打印它。 – peter

回答

2

請記住,在Java中比較Strings時,您需要使用equals方法。通過使用==,您正在執行reference comparison

試試這個:

if(shape.equals("circle")) { 
    circleArea(radius); 
}else if (shape.equals("triangle")) { 
    triangleArea(base,height); 
} else { 
    rectangleArea(base,height); 
} 

或者,謹防空值,使其不區分大小寫,大多數開發商將與此去:由於您使用==

if("circle".equalsIgnoreCase(shape) { 
    circleArea(radius); 
} else if ("triangle".equalsIgnoreCase(shape)) { 
    triangleArea(base,height); 
} else { 
    rectangleArea(base,height); 
} 

,你總是落空else的情況,這是計算矩形。

和其他人一樣,您的計算中可能也有錯誤。

+0

哇,這是它所需要的一切來修復它,非常感謝 – Clarisa

1

首先,你居然不通過0.5乘以三角形的區域,代碼應該是:

double area = b2*h2*0.5; 
System.out.println("The area of your triangle is "+area); 

還要檢查,如果你有正確的輸入。請張貼證明輸入的正確性。