有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

未从构造函数传递java Radius变量

我应该使用一个构造函数来接受一个圆的半径作为参数,然后使用各种访问器和变异器方法来显示面积、周长和直径。当我输入半径的值时,比如说4,它表示半径和所有其他值(面积、周长、直径)都是0.0。我是java新手,想知道我错过了什么

// import scanner to read keyboard input
import java.util.Scanner;

class CircleCalculator
{
    private double radius;

    public CircleCalculator(double r)
    {
        radius = r;
    }

    public static void main(String[] args) 
    {
        // declare the variable keyboard that can reference an object of the scanner class 
        // create a new Scanner object in the memory that reads from the input System.in
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nWelcome to Cam's Magic Circle Calculator!");
        System.out.println("\nEnter the radius of your circle");
        
        double r, a, d, c;

        CircleData circledata = new CircleData();

        System.out.println("\nThe measurements of a circle with the radius " + circledata.getRadius() + " are:\n" +
                    "\tArea: " + circledata.getArea() +" units squared\n" +
                    "\tDiameter: " + circledata.getDiameter() +" units\n" +
                    "\tCircumference: " + circledata.getCircumference() +" units\n");
    }

    public static class CircleData //create class for mutator and accessor methods
    {

    Scanner keyboard = new Scanner(System.in);
    double r = keyboard.nextDouble();
    CircleCalculator setRadius = new CircleCalculator(r);

        final double pi = 3.1415;

        private double radius, area, diameter, circumference;

        private double getRadius()
        {
        return radius;
        }

        private double getArea()
        {
        area = pi * radius * radius;
        return area;
        }

        private double getDiameter()
        {
        diameter = 2 * radius;
        return diameter;
        }

        private double getCircumference()
        {
        circumference = 2 * pi * radius;
        return circumference;
        }
    }
}

给出:

Welcome to Cam's Magic Circle Calculator!

Enter the radius of your circle
4

The measurements of a circle with the radius 0.0 are:
        Area: 0.0 units squared
        Diameter: 0.0 units
        Circumference: 0.0 units

共 (3) 个答案

  1. # 1 楼答案

    未从构造函数传递半径变量,因为您已在CircleCalculator类中定义了构造函数,但使用半径变量值计算面积、周长等的方法在不同的类中

    CircleCalculator setRadius = new CircleCalculator(r); 在这里,虽然setRadius有用户输入的值,但它没有被使用

    CircleData circledata = new CircleData(); 这里,circledata没有引用任何内容。该方法调用 circledata.getRadius() , circledata.getArea() , circledata.getDiameter() , circledata.getCircumference() 实际上返回了double的默认值,即0.0,因为radius变量的默认值是0.0

    此外,类文件中应该只有一个公共类,其名称应该与类文件名匹配,并且该公共类应该具有public static void main(String[] args)方法

  2. # 2 楼答案

    由于类的嵌套,您当前的代码很混乱。我建议遵循良好的代码实践,将它们分离到它们自己的类文件中。让CircleData处理实际的圆数据和计算,并使CircleCalculator成为您的整个程序序列逻辑

    循环计算器

    import java.util.Scanner;
    
    public class CircleCalculator
    {
      public static void main(String[] args) 
      {
          System.out.println("\nWelcome to Cam's Magic Circle Calculator!");
          System.out.println("\nEnter the radius of your circle");
          
          Scanner keyboard = new Scanner(System.in);
          CircleData circledata = new CircleData(keyboard.nextDouble());
          keyboard.close();
    
          System.out.println("\nThe measurements of a circle with the radius " + circledata.getRadius() + " are:\n" +
                      "\tArea: " + circledata.getArea() +" units squared\n" +
                      "\tDiameter: " + circledata.getDiameter() +" units\n" +
                      "\tCircumference: " + circledata.getCircumference() +" units\n");
      }
    }
    

    CircleData(在单独的文件中,因此方法现在是公共的)

    public class CircleData
    {
      final double pi = 3.1415;
    
      private double radius, area, diameter, circumference;
      
      public CircleData(double radius) {
        this.radius = radius;
      }
    
      public double getRadius()
      {
      return radius;
      }
    
      public double getArea()
      {
      area = pi * radius * radius;
      return area;
      }
    
      public double getDiameter()
      {
      diameter = 2 * radius;
      return diameter;
      }
    
      public double getCircumference()
      {
      circumference = 2 * pi * radius;
      return circumference;
      }
    }
    
  3. # 3 楼答案

    1. 因为来自CircleCalculatorCircleData类的半径字段是两个不同的字段。因此,您不能使用来自CircleDataCircleCalculator半径,因为CircleData已经包含这样的字段
    2. CircleData实际上不应该有Scanner字段,它破坏了SRPhttps://en.wikipedia.org/wiki/Single-responsibility_principle

    我建议这样写:

    class CircleCalculator {
    
        public static void main(String[] args) {
            // declare the variable keyboard that can reference an object of the scanner class
            // create a new Scanner object in the memory that reads from the input System.in
            Scanner keyboard = new Scanner(System.in);
            System.out.println("\nWelcome to Cam's Magic Circle Calculator!");
            System.out.println("\nEnter the radius of your circle");
            CircleData circledata = new CircleData(keyboard.nextDouble());
            System.out.println("\nThe measurements of a circle with the radius " + circledata.getRadius() + " are:\n" +
                    "\tArea: " + circledata.getArea() + " units squared\n" +
                    "\tDiameter: " + circledata.getDiameter() + " units\n" +
                    "\tCircumference: " + circledata.getCircumference() + " units\n");
        }
    
        public static class CircleData //create class for mutator and accessor methods
        {
    
            final double pi = 3.1415;
    
            private final double radius;
    
            public CircleData(double radius) {
                this.radius = radius;
            }
    
            private double getRadius() {
                return radius;
            }
    
            private double getArea() {
                return pi * radius * radius;
            }
    
            private double getDiameter() {
                return 2 * radius;
            }
    
            private double getCircumference() {
                return 2 * pi * radius;
            }
        }
    }