Java 类中的构造函数不能应用于给定类型

Java 类中的构造函数不能应用于给定类型,java,Java,我得到了下面的代码,使用数组查找一些原始数。然而,当试图编译我的用户类回文ArrayUser时,它会说:“类中的构造函数不能应用于给定的类型” 必填项:int。 找到:没有参数。 原因:实际参数和形式参数列表的长度不同 但是,我已经向构造函数传递了一个int值(与我在蓝图中设计的方式相同)。我不太明白问题出在哪里。谢谢 这是我的两门课 public class PalindromeArray { int arrLength; public PalindromeArray(int Inp

我得到了下面的代码,使用数组查找一些原始数。然而,当试图编译我的用户类回文ArrayUser时,它会说:“类中的构造函数不能应用于给定的类型”

必填项:int。 找到:没有参数。 原因:实际参数和形式参数列表的长度不同

但是,我已经向构造函数传递了一个int值(与我在蓝图中设计的方式相同)。我不太明白问题出在哪里。谢谢

这是我的两门课

 public class PalindromeArray 
 {

int arrLength;

public PalindromeArray(int InputValue) 
{
    arrLength = InputValue;
}


int arr[] = new int[arrLength];
boolean check[] = new boolean [arrLength];


public void InitializeArray()  
{

    for (int k = 2; k < arr.length; k++)
    {
        arr[k] = k;
        check[k] = true;

    }   
}

public void primeCheck()  
{

    for (int i = 2; i < Math.sqrt(arr.length - 1); i++ )
    {
        if (check[i] == true)
        {
        for (int j = 2; j < arr.length; j++)
          {
            if (j % i == 0)
                {
                     check[j] = false;
                     check[i] = true;
                }
          }
        }   

    }   
}

public void PrintArray() 
{
    for (int k = 2; k < arr.length; k++)
    {
        if ((!check[k]) == false)
            System.out.println(arr[k]);

    }
}

   }

错误是因为您扩展了
回文数组
。这不是必需的。 子类(您的
回文ArrayUser
)必须为构造函数提供一个int


若你们的超类并没有默认构造函数,那个么在你们的子类中,构造函数必须从超类中调用一个非默认构造函数。(
super(params)

错误是因为您正在扩展具有显式构造函数的
回文数组。必须为构造函数提供参数

因为B中没有默认构造函数,正如编译器错误消息所示。在类中定义构造函数后,将不包括默认构造函数。如果定义任何构造函数,则必须定义所有构造函数

阅读更多


免责声明:以上内容摘自文章

为类创建构造函数时,不会为该类创建任何默认构造函数。因此,如果扩展该类,并且子类尝试调用其超类的无参数构造函数,那么将出现编译时错误

证明:

class Parent {
  int i;
  public Parent(int i) {
    this.i=i;
  }
}

class Child extends Parent {
  int j;
  public Child(int i, int j) {
    super(i);
    this.j=j;
  }
  public Child(int j) {
    // here a call to super() is made, but since there is no no-arg constructor
    // for class Parent there will be a compile time error
    this.j=j;
  }
}
编辑:

要回答您的问题,请执行此操作,不要将值
arrLength
分配给
arr[]
check[]
,因为此时arrLength将是
0

就这样宣布吧

int arr[];
boolean check[];
将输入赋值给
arrLength
后,在构造函数中放入这些语句

arr = new int[arrLength];
check = new boolean [arrLength];

好啊我删除了行扩展回文数组,然后我的子类编译得很好。但是,当我运行它时,它会显示提示并完成。换句话说,它不会在提示后继续,也不会执行方法。这是为什么?@user2901128:这是因为arr[]和check[]在创建对象时的长度为0。请检查我的答案以获得解决方案。但正如我所说的。我删除了有问题的行扩展,并对类进行了良好编译。但是,它不会在提示后执行其余代码。为什么呢?
arr = new int[arrLength];
check = new boolean [arrLength];