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

为矩形构建测试类,但找不到main

谯乐池
2023-03-14

试图创建一个测试类,但我似乎无法将两者连接起来。有什么想法吗?我一直在犯错误

错误:在类矩形中找不到Main方法,请将Main方法定义为:public static void Main(String[]args)或JavaFX应用程序类必须扩展JavaFX。应用应用

import java.util.Scanner;

class Rectangle {

    private double length;
    private double width;
    
    //constructors
    //set width and length to one as defaults
    public void Rectangle() {
        length = 1;
        width = 1;
    }
    
    public void Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    //Set for length and width
    public void setLength(double length) {
        if(length > 0.0 || length < 20.0) {
            this.length = length;
        }else{
            throw new IllegalArgumentException("Please choose between 0.0 and 20.0");
        }
    }
    
    public void setWidth(double width){
        if(width > 0.0 || width < 20.0) {
            this.width = width;
        }else{
            throw new IllegalArgumentException("Please choose between 0.0 and 20.0");
        }
    }
    
    //Get for length and width
    public double getLength(){
        return length;
    }
    public double getWidth(){
        return width;
    }
    
    //Methods to calculate
    public double getPerimeter() {
        return (length * 2) + (width * 2);
    }
    
    public double getArea() {
        return length * width;
    }
    
    public void showRec() {
        System.out.println("Length: " + getLength() + "\nWidth: " + getWidth() + "\nArea: " + getArea() + "\nPerimeter: " + getPerimeter());
    }
}
    
class TestRectangle{

    public static void main(String[] args) {
        System.out.println("Skylar Jackson - Assignment 7\n");
        Scanner input = new Scanner(System.in);
        double length;
        double width;
        
        System.out.print("1. Set Length\n2. Set Width\n3. Exit\nChoice: ");
        int number = input.nextInt();
        
        try {
            Rectangle rec = new Rectangle();
            
            switch(number) {
            case 1:
                System.out.println("Length:");
                input.nextDouble();
                rec.setLength(length);
            break;
            case 2:
                System.out.println("Width:");
                input.nextDouble();
                rec.setWidth(width);
            break;
            case 3:
                System.exit(0);
            break;
            default: 
                System.out.println("Unknown Option");
            break;
            }
            rec.showRec();
        }catch(IllegalArgumentException e) {
            System.out.println("The Length or Width needs to be between 0.0 and 20.0");
        }
        
        
        }//end main
    } //end test

共有2个答案

章晋鹏
2023-03-14

您的Rectgle类中没有main方法。请仔细检查您没有错误地调用它。

贺宏逸
2023-03-14

我自己也是初学者,但是我发现了你的程序的一些问题。

我假设您创建了两个名为Rectangle的独立文件。java和TestRectangle。Java语言如果没有,请先这样做。

分别编译它们,您会遇到以下3个错误:

错误:在类矩形中找不到Main方法,请将Main方法定义为:public static void Main(String[]args)或JavaFX应用程序类必须扩展JavaFX。应用应用

TestRectangle.java:20:错误:变量长度可能没有被初始化rec.set长度(长度);

测试ectangle.java:25:错误:变量宽度可能没有初始化rec.set宽度(宽度);

如您所见,您还没有初始化局部变量“长度”、“宽度”。您还将这两个未初始化的变量传递给方法:您的另一个类-R的setLlong(双精度)和setWidth(双精度)ectangle.java

我认为您的意思是接受用户的某些“长度”和“宽度”作为输入。

如果在TestRectangle类的开关情况下执行此操作:

switch(number) {
        case 1:
            System.out.println("Length:");
            **length=input.nextDouble();**
            rec.setLength(length);
        break;
        case 2:
            System.out.println("Width:");
            **width=input.nextDouble();**
            rec.setWidth(width);
        break;

您的程序将运行,但程序中存在逻辑错误。让我们看看TestRectangle类是如何运行的:

代码执行1:

Skylar Jackson-作业7

  1. 设置长度
  2. 设置宽度
  3. 退出

选项:2

宽度:

89.4

长度:0.0

宽度:89.4

面积:0.0

周长:178.8

代码执行2:

Skylar Jackson-作业7

  1. 设置长度
  2. 设置宽度
  3. 退出

选择: 1

长度:

24.95

长度:24.95

宽度:0.0

面积:0.0

周长: 49.9

您可以看到,由于您的开关大小写逻辑,您的代码可以只接受长度或宽度。

此外,当您接受输入时,您的程序无法捕获“您的长度和宽度应在0.0和20.0之间”的异常(正如您从上面看到的,我接受的长度和宽度远远高于20.0)。

提示:使用单个case同时接受两个输入。类似这样:

switch(number) {
        case 1:
            System.out.println("Length:");
            length=input.nextDouble();
            rec.setLength(length);
            System.out.println("Width:");
            width=input.nextDouble();
            rec.setWidth(width);
        break;
        case 2:
            System.exit(0);
        break;
        default:
            System.out.println("Unknown Option");
        break;
        }

如果这样做,代码将如下运行:-

代码执行3:

Skylar Jackson-作业7

  1. 设置长度和宽度
  2. 退出

选择: 1

长度:

23.5

宽度:

35.6

长度:23.5

宽度: 35.6

面积: 836.6

周长:118.2

但我仍然可以轻松地输入超过20.0的长度和宽度值,而您的程序无法检测到这一点。所以您需要使用do-while循环。使用该选项将允许继续要求用户输入,直到和除非用户在给定的(0-20)范围内输入

 switch(number) {
        case 1:
        do {
            System.out.println(" Enter Length value (0-20):");
            length=input.nextDouble();
            System.out.println("Enter Width value (0-20):");
            width=input.nextDouble();
        } while ((length > 20.0 && width > 20.0) || (length < 0.0 && width <0.0));
            
        rec.setLength(length);
        rec.setWidth(width);
        break;
        case 2:
            System.exit(0);
        break;
        default:
            System.out.println("Unknown Option");
        break;
        }

现在,如果超出范围(0-20),程序将继续请求输入。请再次运行:

代码执行4:

Skylar Jackson-作业7

  1. 设置长度和宽度
  2. 退出

选择: 1

输入长度值(0-20):

-96

输入宽度值(0-20):

-24

输入长度值(0-20):

85个

输入宽度值(0-20):

31个

输入长度值(0-20):

12个

输入宽度值(0-20):

7.

长度:12.0

宽度:7.0

面积:84.0

周长:38.0

现在,您的程序正在提供所需的输出

由于我不知道你的作业到底需要什么,所以我无法给出合适的解决方案。到目前为止,我已经暴露了你编程逻辑中的一些缺陷,并给了你一些如何修复代码的提示。祝你的作业一切顺利。

 类似资料:
  • 我使用以下命令为调试生成启用了proguard: 当我这样做时,我遇到的问题是gradle构建也希望在proGuard dDebugTest任务期间推进测试。我似乎无法修改以访问此特定任务。有没有一种方法可以预先调试apk,而不是测试apk?

  • 我在测试一个android项目时遇到了麻烦。 我有一个没有源的调试apk。“开始activity”类是 我把它安装在 然后使用以下build.gradle和androidmanifest.xml创建一个新项目 null null 但当我运行测试时,它报告找不到“com.restfriedchicken.android.mainActivity”: 看来仪器没有成功?

  • 我是PHPUnit和单元测试的新手,所以我通过作曲家安装了PHPUnit和phar,一切都很好,直到我尝试开始我的简单测试。我使用PhpStorm,我可以看到所有的类都是自动加载的,但是当我试图开始我的测试时,我得到了一个错误: 我不明白他为什么要在高于PHPUnit的文件夹中查找它? 我试图在composer中配置自动加载部分。json和检查phpunit中的设置。xml,但什么都不起作用。 加

  • 有什么想法吗?(角2)

  • 当我通过命令提示符从本地设置运行构建时,我给出命令“mvn eviware:maven-soapui-plugin:test”,它执行位于/src/test/SoapUI文件夹中的SoapUI TestSuite。关于詹金斯..我不知道詹金斯必须在哪里输入这个命令才能执行它。

  • 我是刚到爪哇的。我正在做我的学校项目,我遇到了这个问题与错误消息。 下面是我的测试代码: 这是我的IntList.java