» »

[Java] System.out.print = null

[Java] System.out.print = null

shadeX ::

pozdrav.

Imam sledeč problem. No bom kar prilepil kodo tukaj prvo.

Razred z imenom RegularWatch:

public class RegularWatch {
	
	private double time = 24;
	private boolean isWaterProof = false;
	public String waterP;
	
	
	
	
	public RegularWatch(double t, boolean wP) {
		
		this.time = t;
		this.isWaterProof = wP;
		
		
	}
	
	
	
	public double getTime() {
		
		return time;
		
	}
	
	public boolean wpBool() {
		
		return isWaterProof;
		
	}
	
	public String getWaterProofInfo() {
		
		if(isWaterProof == false) {
			
			waterP = " is not waterproof";
		
		} else {
			
			waterP = " is waterproof";
		}
		
		return waterP;
	}
	
	public void writeOut() {
		
		System.out.println("This watch shows time "+ time + " and "+ waterP);
		
	}
	

}


To je pa main razred:

public class Main {

	
	
	public static void main(String[] args) {
	
		RegularWatch w1 = new RegularWatch(24, false);
		w1.writeOut();
		
		
	}
	

}


Output vedno dobim:

This watch shows time 24.0 and null


Zakaj je tam null? kako bi dobil rezultat da recimo ura prikazuje 24urni čas ter Ni/je vodoodporta.

To je pač nek primer k sm si ga sam izmislil vendar mi dela probleme.

Wrop ::

waterP je null zato ker ga nikjer ne spreminjaš oz ne kaže na noben String objekt. Takoj po konstruktorju naredi npr. w1.waterP = "poljuben string".

usoban ::

To kar je Wrop rekel.

V getWaterProofInfo() sicer nastavljas waterP, vendar te metode nikjer ne klices. Ali jo poklici rocno na objektu preden izpisujes, ali pa v konstruktorju.

Zgodovina sprememb…

  • spremenil: usoban ()

shadeX ::

ola ola :D sem poklical takoj po ustvarjenm objektu in sedaj dela. kako bi pa lahko še na drug način naredil? recimo kot si rekel usoban:

ali pa v konstruktorju.

Zgodovina sprememb…

  • spremenil: shadeX ()

usoban ::

public RegularWatch(double t, boolean wP) {
         
        this.time = t;
        this.isWaterProof = wP;
        this.getWaterProofInfo();
    }


bi delalo.

Sicer metoda vraca String, ampak znotraj nje nastavljas lastnost objekta tako da zadeva prav tako dela.

Zgodovina sprememb…

  • spremenil: usoban ()

shadeX ::

Hvala ti. dela =)

Spura ::

Bedarija je to v konstruktorju klicat.
Spremeni writeOut.
Iz:

    public void writeOut() {
         
        System.out.println("This watch shows time "+ time + " and "+ waterP);
         
    }

v

    public void writeOut() {
         
        System.out.println("This watch shows time "+ time + " and "+ getWaterProofInfo());
         
    }


Ideja, da naredis lazy inicializacijo v getterju, potem pa uporabljas spremenljivko namesto getterja v izrazih, in si potem prisiljen getter klicat v konstruktorju, je zelo slaba praksa.
V osnovi bi jst ukinil spremenljivko waterP, ker nima nobene vsebine in je v celoti dolocena s spremenljivko isWaterProof.
Torej zbrises spremenljivko waterP in spremenis getWaterProofInfo v
        if(isWaterProof) { // primerjava z booleanom ne nepotrebna, ker if uporablja boolean izraze
            return " is waterproof";
        } else {
            return " is not waterproof";
        }


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

problemi z javo

Oddelek: Programiranje
61117 (722) MrStein
»

[Java] Objekt poslan k metodi v kakšnem stanju?

Oddelek: Programiranje
211546 (993) shadeX
»

[Java] Castanje

Oddelek: Programiranje
91531 (1386) fiction
»

[JAVA] zaustavitev niti (threadov)

Oddelek: Programiranje
223171 (3171) morbo
»

[Naloga][Java] Ulomki

Oddelek: Programiranje
62660 (2508) SkIDiver

Več podobnih tem