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

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

衡子琪
2023-03-14

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

要求: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]);

    }
}

   }

而这就是我的用户类问题的来源。上面的类编译良好。

 import java.io.*;

 public class PalindromeArrayUser extends PalindromeArray
 {
public static void main(String argv[]) throws IOException 
{
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

    System.out.println("Please enter the upper bound.");

    String line = input.readLine();

    int InputUser = Integer.parseInt(line);
                                     // this is where I pass the same int type as I  
                                                  // constructed it
    PalindromeArray palindrome = new PalindromeArray(InputUser);
    palindrome.InitializeArray();
    palindrome.primeCheck();
    palindrome.PrintArray();


}

 }

共有3个答案

唐珂
2023-03-14

错误是因为您扩展了< code>PalindromeArray,它有一个显式的构造函数。您必须为构造函数提供参数。

因为B中没有可用的默认构造函数,如编译器错误消息所示。一旦您在类中定义了构造函数,默认构造函数就不包括在内。如果您定义了任何构造函数,那么您必须定义所有构造函数。

在此处阅读更多内容

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

法子昂
2023-03-14

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

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

笪俊迈
2023-03-14

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

为了证明:

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[] 并检查 [],因为此时 arrLength 将为 0

所以就像这样声明它们

int arr[];
boolean check[];

并在将输入分配给 arrLength 后的构造函数中放置这些语句。

arr = new int[arrLength];
check = new boolean [arrLength];
 类似资料:
  • 我有2个子类:职员、学生,他们属于超类人。 以下是我的老师给出的代码(任务): 我不知道我可以输入什么来创建一个没有参数的对象。它总是出现这样的错误:Person类中的构造函数Person不能应用于给定的类型;必选:java.lang.String,int 我在网上查过,有两种方法可以解决这个问题: > < li> 在超类中添加默认值:< code > Person()//不带参数。 在子类学生中

  • 问题内容: 我有以下Java代码: 而且我不断收到错误消息:“无法将构造函数应用于给定类型” …这是否意味着超类的子类在构造函数中必须具有与超类相同数量的参数?我已经把头撞在墙上一个小时了。 问题答案: 子类不必有“相同数量的构造为超参数”任何构造函数,但它 确实 需要调用一些它的父类的构造函数从自己的构造。 如果超类具有no- arg构造函数,则默认情况下会被调用,如果省略了对超类构造函数的显式

  • 在问我的问题之前,我想把一些事情说清楚。首先,我是Java和编程的新手。第二,这是我的第一个帖子,所以如果我做错了什么,请宽容对待我。最后,我不想要任何具体的解决办法,我的任务在任何回应这篇文章。这些问题要我来解决。我想要的是一个解释,为什么我的测试代码不能编译/运行。为了更好地理解这个问题,我将粘贴赋值信息,然后是给定的驱动程序类,然后是驱动程序类访问的我的类代码。我的编译器错误显示在标题中,但

  • 我正在制作一个配方应用程序,我遇到了这个错误:HomeItem类中的构造函数HomeItem不能应用于给定的类型;配方添加(新HomeItem(“viay”,R.drawable.vietnamese)); 这是我的代码: 公共类HomeFragment扩展了片段{View v;private RecyclerView myrecyclerview;private List recipe;publ

  • 我正在做作业,所以我只想修复我的编译错误,这样我就可以继续工作了。我需要创建一个PointList类,在ArrayList中保存一个Point对象列表。PointList类应该接受任何作为Point类实例或Point子类的对象。 我不断收到一个编译器错误,上面写着 我真的不明白我错过了什么,我已经通读了这本书,似乎不明白为什么我会得到这个错误。我已经制作了 Point 类并完成了测试,但似乎无法编