Il costruttore in class non può essere applicato a determinati tipi

Ho il seguente codice usando gli array per trovare alcuni numeri prim. Tuttavia, quando provo a compilare la mia class utente PalindromeArrayUser, dice: “Il costruttore in class non può essere applicato a determinati tipi”

richiesto: int. trovato: nessun argomento. motivo: gli elenchi di argomenti effettivi e formali differiscono in lunghezza.

Tuttavia, ho passato al costrutto un valore int (nello stesso modo in cui è stato progettato nel mio progetto). Non capisco da dove viene il problema. Grazie.

Ecco le mie due classi

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

E questa è la mia class utente da cui proviene il problema. La class sopra compila bene.

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

quando crei un costruttore per una class, non ci sarà alcun costruttore predefinito creato per quella class. quindi se estendi quella class e se la sottoclass prova a chiamare il costruttore no-arg della sua super class, allora ci sarà un errore in fase di compilazione.

dimostrare:

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

MODIFICARE:

per rispondere alla tua domanda fai questo, non assegnare il valore arrLength a arr[] e check[] come arrLength sarebbe 0 in quel momento.

quindi basta dichiararli così

 int arr[]; boolean check[]; 

e nel costruttore dopo aver assegnato l’input a arrLength metti queste istruzioni.

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

L’errore è dovuto PalindromeArray . Non è necessario. La sottoclass (il tuo utente PalindromeArrayUser ) deve fornire al costruttore un int.

Se la super class non ha un costruttore predefinito, allora i costruttori delle sottoclassi devono richiamare uno dei costruttori non predefiniti dalla super class. ( super(params) )

L’errore è perché si sta estendendo PalindromeArray , che ha un costruttore esplicito. È necessario fornire al costruttore argomenti.

Perché non esiste un costruttore predefinito disponibile in B, come indica il messaggio di errore del compilatore. Una volta definito un costruttore in una class, il costruttore predefinito non è incluso. Se si definisce un costruttore, è necessario definire tutti i costruttori.

Leggi di più qui

Disclaimer: Quanto sopra è tratto dall’articolo