【问题标题】:Multiple Methods in determining Area of Rectangle确定矩形面积的多种方法
【发布时间】:2015-04-10 17:46:44
【问题描述】:

我真正纠结的问题是:

编写一个程序,要求用户输入矩形的宽度和长度,然后显示矩形的面积。该程序应调用以下方法:

• getLength – 此方法应要求用户输入矩形的长度,然后将该值作为双精度值返回。

• getWidth – 此方法应要求用户输入矩形的宽度,然后将该值作为双精度值返回。

• getArea – 此方法应接受矩形的长度和宽度作为参数,并返回矩形的面积。面积的计算方法是长乘宽。

• displayArea – 此方法应接受矩形的长度、宽度和面积作为参数,并将它们显示在屏幕上的适当消息中。

我不知道如何完成这段代码,因为我现在拥有的是这样的:

    import java.util.Scanner;
public class WidthLengthAreaMethods
{
  public static void main(String[]args)
  {

  Scanner keyboard = new Scanner(System.in);

  double length;
  double width;
  double area;

  length = getLength();
  width = getWidth();
  area = getArea(double length, double width);
  displayData(length, width, area);
  }
  public static double getLength()
  {
    System.out.println("Enter length. ");
    length = keyboard.nextDouble();
    System.out.println("The length is " + length);
  }
  public static double getWidth()
  {
    double width;
    System.out.println("Enter width. ");
    width = keyboard.nextDouble();
    System.out.println("The width is " + width);
  }
  public static double getArea()
  {
   double length;
   double width;
   double area = length * width;

   System.out.println("The area is: " + area);
  }
  public static void displayData(double length, double width, double area)
  {
    System.out.println(" The length is: \t" + length);
    System.out.println(" The width is: \t" + width);
    System.out.println(" The area is: \t" + area);
  }
}

我在搞砸什么,我将如何解决它?我是编程初学者,所以请多多包涵:D。

谢谢大家!!

【问题讨论】:

  • 你希望这段代码做什么,它做了什么?你的具体问题是什么?您的 getArea() 是否接受宽度和高度作为参数,如被问及?编译器说什么?你读过错误信息吗?因为它们是用来阅读的。
  • 我猜这不会编译?方法签名(暂时忘记静态)public static double getLength() 意味着该方法在被调用时将返回一个double 值,并根据您的代码将其分配给一个变量。您的方法不返回任何内容。将 return length 作为方法中的最后一个语句 - 与您的 getWidth() 方法做类似的事情 - 然后看看你的立场
  • 乍一看,我看到一个问题是您的方法(getLength()、getWidth() 等)无法访问键盘,因为您在 main() 的主体中声明它而不是在整个班级中(例如,在 main() 之上)。如果是其他问题,请在您的问题中更具体。

标签: java methods computer-science


【解决方案1】:

由于您的程序被分解为多个方法,因此每个方法中的数据都是本地的,除非您将其存储在类本身中。

例如,您的 getLength() 和 getWidth() 辅助函数将无法访问您的键盘 Scanner,除非您在 main 方法之外声明它,如下所示:

import java.util.Scanner;

public class WidthLengthAreaMethods {

    Scanner keyboard = new Scanner( System.in ); 
    // Initialized within the class, but outside of any methods

    public static void main( String[] args ) {
        double length = getLength();
        double width = getWidth();
        double area = getArea( length, width );
        displayData( length, width, area );
    }

}

另一种选择是将您的 Scanner 传递给函数调用中的每个辅助方法,例如

public static double getLength( Scanner keyboard ){}

虽然将 Scanner 分别传递给每个函数将使您的方法按预期工作,但第一个选项的可读性略高。

要考虑的另一件事是,当方法具有返回值时,例如 getLength()、getWidth() 和 getArea() 中的双精度值,调用该函数的代码需要一些变量要返回的那种类型。对于 void 函数,例如 main() 或 displayData(),该方法声明它不会返回任何特定类型的变量。

因此,当您将长度设置为等于 getLength() 时,您要做的是将本地长度变量的值设置为等于从辅助函数返回的值。如果永远不会发送该值,则程序很可能无法编译 - 当您尝试调用该函数时,将抛出一个错误,说明类似于“预期类型为 double”的内容。要修复编译器错误,需要在辅助函数中添加return语句,例如:

  Scanner keyboard = new Scanner( System.in );

  public static double getWidth() {

    System.out.println("Enter width.");
    double width = keyboard.nextDouble(); // Sets the value to return to your main function
    System.out.println("The width is " + width);
    return width; // Returns the value to your main function 
                  // Causes any code underneath the return statement to be ignored
  }

结合所有这些应该可以停止编译器错误,并使您的程序正常工作。

【讨论】:

    【解决方案2】:

    这是可行的解决方案

    import java.util.Scanner;
    
    public class WidthLengthAreaMethods {
    
          public static void main(String[]args)
          {
    
    
          double length;
          double width;
          double area;
    
          length = getLength();
          width = getWidth();
          area = getArea(length, width);
          displayData(length, width, area);
          }
    
          public static double getLength()
          {
            Scanner keyboard = new Scanner(System.in);
            System.out.println("Enter length. ");
            double length = keyboard.nextDouble();
            System.out.println("The length is " + length);
            return length;
          }
          public static double getWidth()
          {
            Scanner keyboard = new Scanner(System.in);
            double width;
            System.out.println("Enter width. ");
            width = keyboard.nextDouble();
            System.out.println("The width is " + width);
            return width;
          }
    
          public static double getArea(double length, double width)
          {
           double area = length * width;
           System.out.println("The area is: " + area);
           return area;
          }
    
          public static void displayData(double length, double width, double area)
          {
            System.out.println(" The length is: \t" + length);
            System.out.println(" The width is: \t" + width);
            System.out.println(" The area is: \t" + area);
          }
        }
    

    【讨论】:

    • 但没有解释为什么OP代码不正确,他犯了什么错误。你只是在证明你可以解决一个微不足道的编程任务。
    【解决方案3】:

    您必须创建类、getter 和 setter 方法来使用类确定矩形的面积。这是代码,

    // this is class which gets and sets the value as well as calculate area
    public class RectangleShape 
    {
        private double length;
        private double width;
    
        public void setLength(double len)
        {
            length = len;
        }
    
        public void setWidth(double wid)
        {
            width = wid;
        }
    
        public double getLength()
        {
            return length;
        }
    
        public double getWidth()
        {
            return width;
        }
    
        public double getArea()
        {
            return length * width;
        }
    }
    
    // main method
    import java.util.Scanner;
    
    public class FindArea 
    {
        public static void main(String[] args) 
        {
            RectangleShape rs = new RectangleShape();
            Scanner sc = new Scanner(System.in);
            System.out.println("Please enter the length : ");
            double a = sc.nextDouble();
            rs.setLength(a);
            System.out.println("Please enter the width : ");
            double b = sc.nextDouble();     
            rs.setWidth(b);
    
            System.out.println("Length of rectangle is : " + rs.getLength());
            System.out.println("Width of rectangle is : " + rs.getWidth());
            System.out.println("Area of rectangle is : " + rs.getArea());
            sc.close();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2015-01-25
      • 2012-07-21
      • 2021-03-12
      • 1970-01-01
      相关资源
      最近更新 更多