当前位置: 首页 > 知识库问答 >
问题:

为什么我的主类无法识别我的方法?

孔飞翔
2023-03-14

问题指出:

创建一个具有长度和宽度双属性的矩形类。默认构造函数应该将这些属性设置为1。提供计算矩形周长和面积的方法,以及两个数据字段的访问器和赋值器。length和width的mutator方法应该验证传入的数字是否大于0.0且小于20.0——如果不符合这些标准,就不应该更改字段的值。

在同一文件中编写一个驱动程序类来测试您的矩形类。它应该提示用户输入矩形的长度和宽度,然后打印出矩形的面积和周长。(使用赋值器来设置矩形的长度和宽度,而不是构造函数。

这是样本运行:样本运行

这是我目前掌握的代码:

import java.util.Scanner;

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

    System.out.print("Enter length of rectangle:");
    double height = input.nextDouble();
    System.out.print("Enter width of rectangle:");
    double width = input.nextDouble();

    System.out.printf("Area: %f, Perimeter: %f", getArea(), getPerimeter());

}

public static class Rectangle {
private double height;
private double width;

public Rectangle(double wid, double high) {
    height = high;
    width = wid;
} 

public void setHeight(double high) {
    width = wid > 0.0 && wid < 20.0 ? wid : 0;
}

public void setWidth(double wid){
    width = wid > 0.0 && wid < 20.0 ? wid : 0;
}

public double getArea() {
    return height*width;
}

public double getPerimeter() {
    return 2*(height + width);
}
}
}

我感谢任何帮助!错误

共有2个答案

孙朗
2023-03-14

要调用类的方法,您应该有该类的实例。在这种情况下,您正在尝试访问ClassDriver中的Rectangle类的方法,这是不可能的。因此,您必须创建一个实例,即Rectangle类的实例

Rectangle rect = new Rectangle();

然后您可以访问此实例的方法:

rect.getArea(); 
...

我建议阅读Java基础知识,例如在Java教程网站。

我注释了所有相关的部分,这样你就能明白为什么你的代码不工作了:

public class Driver {

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

    System.out.print("Enter length of rectangle:");
    double height = input.nextDouble();
    System.out.print("Enter width of rectangle:");
    double width = input.nextDouble();

    Rectangle rect = new Rectangle(); // Create instance of Rectangle
    rect.setHeight(height); // use mutators to set the values
    rect.setWidth(width);

    DecimalFormat df = new DecimalFormat("##.0#");
    System.out.printf("Area: %s, Perimeter: %s", df.format(rect.getArea()), df.format(rect.getPerimeter()));

}

static class Rectangle {
    private double height;
    private double width;

    // default constructor(=constrcutor without parameter) should set dimensions to 1
    public Rectangle() {
        height = 1.0;
        width = 1.0;
    }

    // Define mutators
    public void setHeight(double height) {
        if (height > 0.0 && height < 20.0) {
            this.height = height;
        }
    }

    public void setWidth(double width) {
        if (width > 0.0 && width < 20.0) {
            this.width = width;
        }
    }


    // Define accessors
    double getHeight() {
        return height;
    }

    double getWidth() {
        return width;
    }

    public double getArea() {
        return height * width;
    }

    public double getPerimeter() {
        return 2 * (height + width);
    }
}

}

屠锐
2023-03-14

那是因为那些方法不属于驱动类。它们属于矩形。首先实例化您的矩形,然后使用其方法:

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

    System.out.print("Enter length of rectangle:");
    double height = input.nextDouble();
    System.out.print("Enter width of rectangle:");
    double width = input.nextDouble();

    Rectangle r = new Rectangle(width, height);

    System.out.printf("Area: %f, Perimeter: %f", r.getArea(), r.getPerimeter());

}

此外,您的设置者完全混淆了。

    public Rectangle(double wid, double high) {
        // Your constructor didn't use validation
        setWidth(wid);
        setHeight(high);
    }

    public void setHeight(double high) {
       // If you really want to have validation in your setter, that's the syntax, yours doesn't compile
        height = high > 0.0 && high < 20.0 ? high : 0;
    }

    public void setWidth(double wid){
        width = wid > 0.0 && wid < 20.0 ? wid : 0;
    }
 类似资料:
  • 问题内容: 我正在尝试在hadoop 2.2.0上运行我的PDFWordCount映射减少程序,但出现此错误: 它说我的地图类未知。我在3个VM上有一个带有namenod和2个datanodes的集群。 我的主要功能是: 如果我使用以下命令运行jar: 正如我在上面看到的那样,它作为输出路径并给我错误,而我的主要功能却在运行。 我已经运行了一个简单的WordCount项目,该项目的主要功能与该主要

  • Android Studio(版本4.1.1)在我的xml布局文件中为使用onClick的视图显示警告(警告id: UsingOnClickInXml,平台的旧版本不正确支持解析Android:onClick)。当我运行代码检查器时,这些也会显示在lint警告中。Android Studio似乎没有使用我在build.gradle (app)文件中设置的minSdkVerion (16)。 以下是

  • 总的来说,我对tomcat和JSP很陌生,我还搜索了无数其他问题,这些问题似乎有完全相同的问题,但没有一个能解决我的问题。 服务器结构包含(以及其他内容,如css文件和其他html资源)一个jsp文件和一个java类: jsp文件包含: Java 类的源文件如下所示: 现在,我(重新)启动tomcat服务器,用浏览器访问jsp文件,并得到以下错误消息: 无法编译 JSP 的类:在生成的 java

  • 我有一个thymeleaf表单和Spring引导后端。我有一个model类,它的getters和setters名称有点不同。因此,当我要取那个模型并将它的字段作为表单输入字段时,Tymeleaf不能将它们识别为字段。 窗体适用于区域字段。但对Amt字段不起作用。如果我将isAmt()get方法更改为getIsAmt(),也许我可以修复这个问题。但是我不能更改模态类的任何方法名,因为这个类已经编译好

  • 问题内容: 我通过清单中的“导出向导”导出了我的eclipse插件,似乎一切进行得很好(没有错误)。它在zip文件的插件目录中创建了一个.jar文件。 我以为将jar放入我的Eclipse插件目录中将进行安装(在重新启动eclipse之后),但这没有用。Eclipse看不到插件(透视图未显示) 我尝试使用“帮助”->“安装新软件”->“本地存档”,但始终显示“找不到软件” 您能帮我准备好将插件安装

  • 我有以下JSON: 我正试图用杰克逊把它转换成pojo。这就是我所拥有的: 我的另一个类有字段,这些字段被命名为JSON中的元素,并具有getter和setter。 上面的代码可以工作,但是当我只是创建一个没有配置的基本ObjectMapper对象时,它不起作用。这是为什么?这是堆栈跟踪错误: 这是我的pojo类,包含getter和setter: