Java-fout: de constructeur is undefined

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 setWeighten setHeightzijn 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

uitvoervoorbeeld van console

Other episodes