【问题标题】:Methods returning incorrect values?方法返回不正确的值?
【发布时间】:2015-10-19 22:03:09
【问题描述】:

只需编写一个简单的程序,要求用户输入圆形、矩形或三角形。然后它会要求他们对形状进行适当的测量,然后使用正确的方法来计算这个形状的面积。
但是,正确答案仅针对矩形方法生成。
无论输入什么,circle 方法总是生成 0.0,而 triangle 方法不会乘以 0.5,而是只返回 base*height。

进行了一些建议的更改,但仍然遇到同样的问题。这是完整的代码。

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

【问题讨论】:

  • 嗯...你的三角形没有 0.5 来乘以底和高
  • 半径设置在哪里?
  • 附带说明,您并没有从该函数返回任何内容,您只是在打印它。
  • 缺少 0.5 是一种错误类型,我的代码中确实有它,但它仍然不起作用

标签: java methods output


【解决方案1】:

记住在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 的情况,即计算矩形。

正如其他人所提到的,您的计算中可能也有错误。

【讨论】:

  • 哇,这就是修复它所需要的,非常感谢
【解决方案2】:

首先,你实际上并没有将三角形的面积乘以0.5,代码应该是:

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

还要检查您的输入是否正确。请张贴输入正确性的证明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多