Konstruktory - błąd krytyczny

0

Witam,

zaczynam etap nauki o konstruktorach. Testuję przeciążenie konstruktora lecz program wysypuje mi się w pewnym momencie a ja nie wiem dlaczego. Możecie coś poradzić? Oto kod:

Klasa Auto.java:

public class Auto
{
	private String model;
	private short rokProdukcji;
	private int przebieg;
	private String kolor;
	private double cena;
	
	public Auto()
	{
		model = "Mercedes";
		rokProdukcji = 2010;
		przebieg = 100000;
		kolor = "Srebrny";
		cena = 20000.0;
	}
	
	/*public Auto(byte rokProd)
	{
		
	}*/
	
	public Auto(String kolOr, double ceNa)
	{
		cena = ceNa;
		
		if (kolOr.equals(kolor.toLowerCase() == "czarny")) //jesli podany parametr jest rowny "czarny" (gdzie czarny moze byc pisany kazda wielkoscia liter)
		{
			kolor = "WYBRANY KOLOR NIEDOSTĘPNY!";
		}
		else kolor = kolOr;
	}
	
	//akcesory
	public String getModel()		{	return model;		}
	public short getRokProdukcji()	{	return rokProdukcji;}
	public int getPrzebieg()		{	return przebieg;	}
	public String getKolor()		{	return kolor; 		}
	public double getCena()			{	return cena; 		}
	
	//mutatory
	public void setModel(String Model)		{	model = Model;		}
	public void setRokProdukcji(short Rok)	{	rokProdukcji = Rok;	}
	public void setPrzebieg(byte Przebieg)	{	przebieg = Przebieg;}
	public void setKolor(String Kolor)		{	kolor = Kolor;		}
	public void setCena(byte Rok)			{	rokProdukcji = Rok;	}
}

A tutaj kod Main.java:

import java.util.*;

public class Main
{
	public static void main(String[] args)
	{
		Auto autko = new Auto("kjgjkjg", 2500.00); //tworze obiekt autko
		System.out.println("Model: " + autko.getModel());
		System.out.println("Cena: " + autko.getCena());
		System.out.println("Kolor: " + autko.getKolor());
		System.out.println("Rok produkcji: " + autko.getRokProdukcji());
		System.out.println("Przebieg: " + autko.getPrzebieg());
		
	}
}

Po uruchomieniu programu otrzymuję taki oto błąd:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toLowerCase()' on a null object reference
at Auto.<init>(Auto.java:27)
at Main.main(Main.java:15)
at java.lang.reflect.Method.invoke(Native Method)
at com.aide.ui.build.java.RunJavaActivity$1.run(SourceFile:108)
at java.lang.Thread.run(Thread.java:784)

0

Już się domyśliłem błędu - próbowałem sprawdzić pole z zawartością NULL. Ale gdy najpierw ustawię że pole kolor = kolOr to mój warunek w konstruktorze z dwoma parametrami nie działa - przy wyświetlaniu zawartości pól pokazuje mi że kolor ma zawartość NULL.

0
  1. konstruktor z 'if' to nie jest przeciążanie konstruktora. W ogóle to jest w kiepskim stylu. Z konstruktora powinny powstać poprawne dane (lub wcale), a nie ... ocena 'kolor jest niedostępny'. Z jakiegoś konkretnego kursu masz takie dziwne porady?
  2. w setterach masz jakąś sieczkę z Ctrc-CtrlV. Jakies byte
0

@AnyKtokolwiek: przeciążanie konstruktora to wywołanie konstruktora z taką samą nazwą tylko z innymi parametrami. A kurs z którego korzystałem jest tutaj: https://m.youtube.com/watch?v=WGc7Nikzxok

Co do "Kolor niedostępny" to wiem że to nie jest dobry pomysł aby robić to w ten sposób. Tu bardziej chodziło mi o wykonanie kodu po mojej myśli.

PS. Co masz na myśli mówiąc settery?

0

Jesli moge cos poradzic nie zwiazanego z tematem co przyda Ci sie w przyszlosci - nigdy nie pisz kodu po polsku. Tylko angielski.

1 użytkowników online, w tym zalogowanych: 0, gości: 1