Home > Mobile >  Simple problem with method getting default valuse from class
Simple problem with method getting default valuse from class

Time:01-27

I started to learn java and i cant get past my problem with method getting default vaules from class. The code is about cars and garage. Everything works just as I intended with the execption of returning default values for Samochod s1 instead of the values that were set in the main function.

Main:

    public static void main(String[] args) {
        Samochod s1 = new Samochod("Fiat", "126p", 2, 650, 6.0);
        Samochod s2 = new Samochod("Syrena", "105", 2, 800, 7.6);
        Garaz g1 = new Garaz();
        g1.setAdres( "ul. Garażowa 1" );
        g1.setPojemnosc( 1 );
        Garaz g2 = new Garaz("ul. Garażowa 2", 2);
        g1.wprowadzSamochod(s1);
        g1.wypiszInfo();
        g1.wprowadzSamochod(s2);
        g2.wprowadzSamochod(s2);
        g2.wprowadzSamochod(s1);
        g2.wypiszInfo();
        g2.wyprowadzSamochod();
        g2.wypiszInfo();
        g2.wyprowadzSamochod();
        g2.wyprowadzSamochod();
     }
package Lab2_02;

public class Samochod {
    private String marka;
    private String model;
    private int iloscDrzwi;
    private int pojemnoscSilnika;
    private double srednieSpalanie;
    private static int iloscSamochodow = 0;

    public String getMarka() {
        return marka;
    }

    public String getModel() {
        return model;
    }

    public int getIloscDrzwi() {
        return iloscDrzwi;
    }

    public int getPojemnoscSilnika() {
        return pojemnoscSilnika;
    }

    public double getSrednieSpalanie() {
        return srednieSpalanie;
    }

    public void setMarka(String marka) {
        this.marka = marka;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public void setIloscDrzwi(int iloscDrzwi) {
        this.iloscDrzwi = iloscDrzwi;
    }

    public void setPojemnoscSilnika(int pojemnoscSilnika) {
        this.pojemnoscSilnika = pojemnoscSilnika;
    }

    public void setSrednieSpalanie(double stednieSpalanie) {
        this.srednieSpalanie = stednieSpalanie;
    }
    
    
    public Samochod() {
        marka = "nieznany";
        model = "nieznany";
        iloscDrzwi =  0;
        pojemnoscSilnika = 0;
        srednieSpalanie = 0.0;
        iloscSamochodow  ;
    }
    
    public Samochod(String marka_, String model_, int iloscDrzwi_, int pojemnoscSilnika_, double srednieSpalanie_) {
        marka = marka_;
        model = model_;
        iloscDrzwi = iloscDrzwi_;
        pojemnoscSilnika = pojemnoscSilnika_;
        srednieSpalanie = srednieSpalanie_;
        iloscSamochodow  ;
    }
    public double obliczSpalanie(double dlugoscTrasy) {
        double spalanie = (srednieSpalanie * dlugoscTrasy)/100;
        return spalanie;    
    }
    public double obliczKosztPrzejazdu(double dlugoscTrasy, double cenaPaliwa) {
        double kosztPrzejazdu = obliczSpalanie(dlugoscTrasy) *  cenaPaliwa;
        return kosztPrzejazdu;
    }
    public void wypiszInfo() { 
        System.out.println("Marka: "   marka);
        System.out.println("Model: "   model);
        System.out.println("Ilosc drzwi: "   iloscDrzwi);
        System.out.println("Pojemnosc silnika: "   pojemnoscSilnika);
        System.out.println("Srednie spalanie: "   srednieSpalanie);   
    }
    public static void wypiszIloscSamochodow() {
        System.out.println("Ilosc samochodow: "   iloscSamochodow);
    }
    
}

package Lab2_02;


public class Garaz {
    private String adres;
    private int pojemnosc;
    private int liczbaSamochodow = 0;
    private Samochod [] samochody;

    public String getAdres() {
        return adres;
    }

    public int getPojemnosc() {
        return pojemnosc;
    }

    public void setAdres(String adres) {
        this.adres = adres;
    }

    public void setPojemnosc(int pojemnosc) {
        this.pojemnosc = pojemnosc;
        samochody = new Samochod[pojemnosc];
    }
    
    public Garaz() {
        adres = "nieznany";
        pojemnosc = 0;
        samochody = null;
    }
    public Garaz(String adres_, int pojemnosc_) {
        adres = adres_;
        pojemnosc = pojemnosc_;
        samochody = new Samochod[pojemnosc];
    }
    public void wprowadzSamochod(Samochod s) {
        if(liczbaSamochodow >= pojemnosc) {
            System.out.println("W garazu jest maksymalna ilość pojazdow.");
        }
        else {
            samochody [liczbaSamochodow] = new Samochod();
            liczbaSamochodow  ;                     
            System.out.println("Samochod zostal wprowadzony.");
        }        
    }
    public void wyprowadzSamochod() {
        if(liczbaSamochodow == 0) {
            System.out.println("W garazu nie ma zadnego auta.");
        }
        else {
            samochody [liczbaSamochodow-1] = null;
            liczbaSamochodow--;
            System.out.println("Samochod zostal wyprowadzony.");           
        }
    }
    public void wypiszInfo(){
        for(int i = 0; i <= liczbaSamochodow-1; i  ){
            
            samochody[i].wypiszInfo();        
        }
    }
        
}

So my problem is that instead of returning in console info about my car "Fiat", it say "nieznany" from default class. I know it is simple problem but i can't get past it for a few days. My problem is with this line:

 public void wypiszInfo(){
        for(int i = 0; i <= liczbaSamochodow-1; i  ){

            samochody[i].wypiszInfo();

Instead of showing this:

 Samochod zostal wprowadzony.
Marka: nieznany
Model: nieznany
Ilosc drzwi: 0
Pojemnosc silnika: 0
Srednie spalanie: 0.0

I can't make it show this:

Marka: Fiat
Model: 126p
Ilosc drzwi: 2
Pojemnosc silnika: 650
Srednie spalanie: 6.0

CodePudding user response:

In wprowadzSamochod(Samochod s) method you're creating a new Samochod instance, instead of using the one passed as parameter. Since you have a default constructor, you are always using it, setting information to default values:

public void wprowadzSamochod(Samochod s) {
    if(liczbaSamochodow >= pojemnosc) {
        System.out.println("W garazu jest maksymalna ilość pojazdow.");
    }
    else {
        samochody [liczbaSamochodow] = new Samochod(); // <-- there
        liczbaSamochodow  ;                     
        System.out.println("Samochod zostal wprowadzony.");
    }        
}

How it should be:

public void wprowadzSamochod(Samochod s) {
    if(liczbaSamochodow >= pojemnosc) {
        System.out.println("W garazu jest maksymalna ilość pojazdow.");
    }
    else {
        samochody [liczbaSamochodow] = s; // <-- there
        liczbaSamochodow  ;                     
        System.out.println("Samochod zostal wprowadzony.");
    }        
}

Just a micro-suggestion: inside the exit condition of a for loop you can just use i < max, instead of i <= max-1 (e.g. in wypiszInfo()).

  • Related