2015-10-19 2 views
0

Просто написать простую программу, которая просит пользователя ввести круг, прямоугольник или треугольник. Затем он запрашивает у них соответствующие измерения формы, а затем использует правильный метод для вычисления площади этой формы.
Однако правильный ответ генерируется только для метода прямоугольника.
Метод круга всегда генерирует 0.0 независимо от того, какой вход и метод треугольника не умножается на 0,5, а возвращает только базовую высоту.Методы, возвращающие неверные значения?

Сделал некоторые из предложенных изменений и у меня все еще есть те же проблемы. Вот полный код.

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

Помните, что при сравнении Strings на Java вам необходимо использовать метод 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); 

Также проверьте, если у вас есть правильный вход. Пожалуйста, подтвердите правильность ввода.

Смежные вопросы