【问题标题】:Building a test Class for rectangle, but wont find main为矩形建立一个测试类,但找不到主要的
【发布时间】:2021-10-01 18:25:00
【问题描述】:

试图创建一个测试类,但我似乎无法连接它们。有任何想法吗?我一直gettign的错误

错误:在类 Rectangle 中找不到主方法,请将主方法定义为: 公共静态无效主要(字符串 [] 参数) 或者 JavaFX 应用程序类必须扩展 javafx.application.Application

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

【问题讨论】:

  • 听起来你运行的是java Rectangle而不是java TestRectangle。

标签: java


【解决方案1】:

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

我假设您创建了两个单独的文件,名为 Rectangle.java 和 TestRectangle.java。如果不这样做,请先这样做。

单独编译,你会遇到这3个错误:

错误:在类 Rectangle 中找不到主方法,请将主方法定义为: 公共静态无效主要(字符串 [] 参数) 或者 JavaFX 应用程序类必须扩展 javafx.application.Application

TestRectangle.java:20:错误:可变长度可能尚未初始化 rec.setLength(长度);

TestRectangle.java:25:错误:变量宽度可能尚未初始化 rec.setWidth(宽度);

如您所见,您尚未初始化局部变量“length”、“width”。 而且您还将这两个未初始化的变量传递给方法:其他类的 setLength(double) 和 setWidth(double) - Rectangle.java

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

如果你在 TestRectangle 类的 switch case 中这样做:

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

你看,由于你的 switch case 逻辑,你的代码要么只接受长度,要么只接受宽度。

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

提示:使用单个案例同时接受两个输入。像这样:

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

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

由于我不确切知道您的任务需要什么,因此我无法给出适当的解决方案。到目前为止,我已经暴露了您的编程逻辑中的一些缺陷,并为您提供了一些如何修复代码的提示。祝你的任务一切顺利。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      相关资源
      最近更新 更多