In Java, waarom krijg ik deze foutmelding:
Error: The constructor WeightIn() is undefined
Java Code:
public class WeightIn{
private double weight;
private double height;
public WeightIn (double weightIn, double heightIn){
weight = weightIn;
height = heightIn;
}
public void setWeight(double weightIn){
weight = weightIn;
}
public void setHeight(double heightIn){
height = heightIn;
}
}
public class WeightInApp{
public static void main (String [] args){
WeightIn weight1 = new WeightIn(); //Error happens here.
weight1.setWeight(3.65);
weight2.setHeight(1.7);
}
}
Ik heb een constructeur gedefinieerd.
1, Autoriteit 100%
Voeg dit toe aan uw klas:
public WeightIn(){
}
- Begrijp alsjeblieft dat de standaard no-argument-constructeur alleen wordt verstrekt als er geen andere constructeur is geschreven
- Als u een constructeur schrijft, heeft Compiler geen standaard No-Arg-constructeur geleverd. Je moet er een specificeren.
2, Autoriteit 25%
Hierin kunt u niet doen WeightIn weight1 = new WeightIn();
sinds de standaardconstructeur niet is gedefinieerd.
U kunt
toevoegen
public WeightIn(){
}
of u kunt dit doen
WeightIn weight1 = new WeightIn(3.65,1.7) // constructor accept two double values
3, Autoriteit 10%
De compiler stuit op een aanroep van een “WeightIn()
” constructor zonder argument, op deze regel:
WeightIn weight1 = new WeightIn(); //Error happens here.
De compiler is op zoek naar een overeenkomende constructor in de klassendefinitie, en kan deze niet vinden. Dat is de fout. (Je hebt wel een constructor gedefinieerd: “WeightIn(double,double)
” maar daar zijn twee argumenten voor nodig en komt niet overeen.)
Verschillende manieren om dit op te lossen.
Het gemakkelijkste is om de code in uw hoofdmethode te wijzigen om twee argumenten door te geven.
WeightIn weight1 = new WeightIn( 3.65, 1.7);
//weight1.setWeight(3.65);
//weight2.setHeight(1.7);
De aanroepen van de methoden setWeight
en setHeight
zijn overbodig, aangezien aan de leden al waarden zijn toegewezen door de constructormethode.
Antwoord 4, autoriteit 5%
Je hebt de constructor WeightIn() niet. Maak deze aan of geef parameters in de hoofdmethode aan de constructor.
Antwoord 5, autoriteit 5%
WeightIn weight1 = new WeightIn();
De standaardconstructor is niet gedefinieerd. Definieer het als volgt:-
public weightIn()
{
}
6
Allereerst moet u weten dat één .java-bestand slechts één openbare klasse kan hebben.
U krijgt een foutmelding omdat u gepariteerd constructeur hebt geschreven en toegang hebt tot een standaardconstructeur. Om deze fout op te lossen Write:
WeightIn weight1 = new WeightIn(5.2, 52.2);
in plaats van
WeightIn weight1 = new WeightIn();
7
Het kostte me een tijdje, maar ik denk dat ik eindelijk een manier heb ontdekt voor dit programma om te werken.
Ik scheidde de klassen in verschillende bestanden en hernoemde de gewichtsklasse om te registreren, zodat het duidelijker is in plaats van dat alles wat een variatie van het gewicht wordt genoemd. Ik heb ook een uitgangsklasse toegevoegd om de code in het hoofd te houden als schoon en minimaal mogelijk.
Ik hoop dat dit vergelijkbaar is met wat je hoopte te doen.
Originele code: “Constructor”
public class WeightIn{
private double weight;
private double height;
public WeightIn (double weightIn, double heightIn){
weight = weightIn; //needs to be : this.weight = weight
height = heightIn; //needs to be : this.height = height
}
project: weightinApp
pakket: weightinApp
Klasse: record.java
package weightInApp;
class Record
{
private double weight; //declare variables
private double height;
Record (double weight, double height) { //Parameterized Constructor method
this.weight = weight; //this is the correct way
this.height = height;
//if you want to use weightIn and/or heightIn you have to be consistent acrosss
//the whole class. I decided to drop "In" off the variables for brevity.
}
//Getters and setters
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}
project: weightinApp
pakket: weightinApp
Klasse: output.java
Deze klasse geeft de ingestelde waarden uit op een tabel op de console. Dit kan handmatig worden gewijzigd om meer gegevens toe te voegen. U kunt ook overwegen om de datum van het record te volgen en toe te voegen aan deze uitvoer. U moet de vereiste variabelen, Getters en Setters in de recordklasse voor die functionaliteit toevoegen.
package weightInApp;
public class Output {
static void output (Record weightIn1, Record weightIn2)
{
int count = 0;
final Object[][] table = new Object[3][3];
table[0] = new Object[] { "Record", "Weight", "Height"};
table[1] = new Object[] { count +=1, weightIn1.getWeight(), weightIn1.getHeight() };
table[2] = new Object[] { count+=1, weightIn2.getWeight(), weightIn2.getHeight() };
for (final Object[] row : table) {
System.out.format("%15s%15s%15s\n", row);
}
}
}
Project: weightInApp
Pakket: weightInApp
Klasse: Main.Java
package weightInApp;
import weightInApp.Record; //imports methods and variables from the other classes
import weightInApp.Output;
public class Main {
public static void main (String [] args){
Record weightIn1 = new Record(0,0);
//previous line of code creates a new Record object named weightIn1
//previous line of code also sets both the values of weight and height to 0.
weightIn1.setWeight(3.65); //sets weight for weightIn1
weightIn1.setHeight(1.70);//sets Height for WeightIn1
Record weightIn2 = new Record(0, 0);
weightIn2.setWeight(3.00);
weightIn2.setHeight(1.75);
//previous 3 lines are the same as above for weightIn1
//except this is for a second object named weightIn2
Output.output(weightIn1, weightIn2); //calls runs passes values to output method
}
}
Voorbeelduitvoer