user2901128
user2901128

Reputation: 75

Constructor in class cannot be applied to given types

I ve got the following code using arrays to find some prim numbers. However, when trying to compile my user class PalindromeArrayUser it says - "Constructor in class cannot be applied to given types"

required: int. found: no arguments. reason: actual and formal arguments lists differ in length.

However, I have passed to the constructer an int value (the same way it was designed in my blueprint). I don't quite get where the problem comes from. Thanks.

Here are my two classes

 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]);

    }
}

   }

And this is my User class where the problem comes from. The class above compiles fine.

 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();


}

 }

Upvotes: 6

Views: 33786

Answers (3)

Thirumalai Parthasarathi
Thirumalai Parthasarathi

Reputation: 4671

when you create a constructor for a class, there won't be any default constructor created for that class. so if you extend that class and if the subclass tries to call the no-arg constructor of its super class then there will be an compile-time error.

to demonstrate:

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;
  }
}

EDIT:

to answer your question do this, don't assign the value arrLength to arr[] and check[] as arrLength would be 0 at that time.

so just declare them like this

int arr[];
boolean check[];

and in the constructor after you assign the input to arrLength put these statements.

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

Upvotes: 9

lazyprogrammer
lazyprogrammer

Reputation: 629

Error is because you are extending PalindromeArray, which has an explicit constructor. You must provide the constructor with argument.

Because there is no default constructor available in B, as the compiler error message indicates. Once you define a constructor in a class, the default constructor is not included. If you define any constructor, then you must define all constructors.

Read more here

Disclaimer: The above is taken from the article

Upvotes: 2

Areo
Areo

Reputation: 938

Error is because you extend PalindromeArray .This is not necessary. Subclass (your PalindromeArrayUser) must provide constructor with one int.

If yous super class don't have default constructor then in you subclass constructors must invoke one of non-default constructor from super class. (super(params))

Upvotes: 3

Related Questions