如何修复“java:找不到符号”

问题描述 投票:-2回答:3

我正在使用JB IntelliJ IDEA并尝试创建一个对Rectangles进行排序的程序。但我无法解决

"Error:(28, 22) java: cannot find symbol
  symbol:   method Rectangle(java.lang.Double,java.lang.Double)
  location: class io.github.vadimsam.rectsort.Rectangle".

我该怎么办?

NB:项目的重建并没有帮助我。

主要:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;

class SComparator implements Comparator<Rectangle> {

    public int compare(Rectangle r1, Rectangle r2) {
        return r1.area().compareTo(r2.area());

    }
}

public class Main {

    public static void main(String[] args) {

       ArrayList<Rectangle> rectsArea = new ArrayList<>();
       Scanner input = new Scanner(System.in);
       SComparator comparator = new SComparator();

       while(true){
            System.out.print("A = ");
            Double a = input.nextDouble();
            System.out.print("B = ");
            Double b = input.nextDouble();
            Rectangle.Rectangle(a,b);
            rectsArea.sort(comparator);
            if (a  == 0) {
                System.out.println("Sorted ArrayList:");
                System.out.println(rectsArea);
                break;
            }
        }
    }
}

长方形:

public class Rectangle {
    public Double c, d;

    public Rectangle(Double c, Double d) {
        this.c = c;
        this.d = d;
    }

    Double area() {
        return c * d;
    }
}

它应该返回已排序的ArrayList

java comparator
3个回答
1
投票

而不是写:

Rectangle.Rectangle(a,b);

调用名为Rectangle的静态方法(可能是Rectangle类的一部分),尝试使用在Rectangle类中声明的构造函数创建一个对象,以实例化新的矩形对象:

Rectangle rectangle = new Rectangle(a, b);

您还没有在Rectangle类中声明任何名为Rectangle的静态方法,这就是出现此错误的原因。


1
投票

这一行:

  Rectangle.Rectangle(a,b);

表示对类Rectangle定义的名为Rectangle的静态方法的调用。没有这样的方法!这就是“找不到符号错误”的原因。

有一个构造函数Rectangle(int, int)但你没有在Java中调用构造函数。你new它。例如:

  Rectangle someRectangle = new Rectangle(a,b);

但是,根据上下文判断,我怀疑您应该将新的Rectangle对象分配给您之前创建的数组的元素。

但你的代码是(我怎么说这个)“困惑”。我认为你需要仔细阅读并向你的rubber duck解释每个陈述的作用。


0
投票

我认为你的问题就在于此

Rectangle.Rectangle(a,b);

这是用于实例化对象的不正确语法,因为在矩形类中没有方法Rectangle,只有构造函数。使用构造函数的正确方法如下:

Rectangle rect = new Rectangle(a, b);

推荐问答