Archief - java dringend vraagje &&

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

badboyss

Legacy Member
hallo

hoe los ik onderstaand op de hij enkel de code uitprint wanner alle waarden waar zijn.
Dus als ik nu een uurwerk maak met een datum dan print hij het 2 keer uit want beide if statements zijn waar.
Dus als ik bv analoogpols maak met enkel een datum en geen zonnestand moet hij de 2e if nemen.
Nu print hij ze alletwee :scream:
Code:
if (soort == "analoogPols" && datum == "datum" && zonnestand == "zonnestand"){
    IWekker standaardHorloge1 = new Zonnestand(new Datum(new AnaloogPolshorloge()));
	System.out.println(standaardHorloge1.getOmschrijving() + " er zijn volgende opties gekozen --> datum en zonnestand");
			 }
			
 if (soort == "analoogPols" && datum == "datum"){
    IWekker standaardHorloge = new Datum(new AnaloogPolshorloge());
       System.out.println(standaardHorloge.getOmschrijving() + " er zijn volgende opties gekozen --> datum");
					
					 
				}

grts b,

Prior

Legacy Member
Zo?

Code:
 if (soort == "analoogPols" && datum == "datum")
{
    if (zonnestand == "zonnestand")
    {
        IWekker standaardHorloge = new Zonnestand(new Datum(new AnaloogPolshorloge()));
	System.out.println(standaardHorloge.getOmschrijving() + " er zijn volgende opties gekozen --> datum en zonnestand");
    }
    else
    {
       IWekker standaardHorloge = new Datum(new AnaloogPolshorloge());
       System.out.println(standaardHorloge.getOmschrijving() + " er zijn volgende opties gekozen --> datum");
    }
}

badboyss

Legacy Member
neen al geprobeerd maar ik zal eens wat meer code geven mijn fout sorry :cry:
dus met een keuze menu in mijn "winkel" word gekozen welke opties je uurwerk moet hebben.
Deze opties worden in string variabelen gestoken en meegegeven.
Standaard zijn ze leeg
private String datum,zonnestand,timer,soort;

als ik nu een uurwerk wil met een datum en zonnestand worden alle vier de variabelen meegegeven met de methode en aan de hand van wat true is moet dan de if keuze gemaakt worden.
Maar als nu een standaard polshorloge wil met al opties print hij ze allevier uit.
Dus ze moeten allemaal juist zijn of niet.

Code:
public static void maakHorloges(String soort, String datum,String timer, String zonnestand) {
	if (soort == "analoogPols"){
	IWekker standaardHorloge = new AnaloogPolshorloge();
	System.out.println(standaardHorloge.getOmschrijving() + " en er zijn geen opties gekozen");
		    }
			 
        if (soort == "analoogPols" && datum == "datum"){
         IWekker standaardHorloge1 = new Datum(new AnaloogPolshorloge());
	System.out.println(standaardHorloge1.getOmschrijving() + " er zijn volgende opties gekozen --> datum");
		    }

	if  (soort == "analoogPols" && datum == "datum" && zonnestand == "zonnestand"){
	IWekker standaardHorloge2 = new Zonnestand(new Datum(new AnaloogPolshorloge()));
	System.out.println(standaardHorloge2.getOmschrijving() + " er zijn volgende opties gekozen --> datum en zonnestand");
			 }

	if (soort == "analoogPols" && datum == "datum" && zonnestand == "zonnestand" && timer == "timer"){
	IWekker standaardHorloge3 = new Timers(new Zonnestand(new Datum(new AnaloogPolshorloge())));
	System.out.println(standaardHorloge3.getOmschrijving() + " er zijn volgende opties gekozen --> datum en zonnestand en timer");
			 }


alsik dus een uurwerk kies met all de opties krijg ik dit als uitvoer
Code:
maak u keuze
1 configureer een uurwerk
10 om te serializeren
11 om te deserializeren
1
kies u uurwerk 
1 voor een analoog polsuurwerk
2 voor een digitaal polsuurwerk
3 voor een analoge wandklok
4 voor een digitale wandklok
1
wenst u nog opties ja/nee
ja
1 voor een datum
2 voor een zonnestand
3 voor timer 
4 voor om te stoppen
1
wenst u nog opties ja/nee
ja
1 voor een datum
2 voor een zonnestand
3 voor timer 
4 voor om te stoppen
2
wenst u nog opties ja/nee
ja
1 voor een datum
2 voor een zonnestand
3 voor timer 
4 voor om te stoppen
3
wenst u nog opties ja/nee
nee
u uurwerk wordt gemaakt
een analoog polshorloge
Dit is een analoog Polshorloge , de tijd is 14:52:52 en er zijn geen opties gekozen
een analoog polshorloge
optie datum
Dit is een analoog Polshorloge , de tijd is 14:52:52 de datum is 15-01-2014 er zijn volgende opties gekozen --> datum
een analoog polshorloge
optie datum
optie zonnestand
Dit is een analoog Polshorloge , de tijd is 14:52:52 de datum is 15-01-2014 ,de zonnestand is zeer hoog  er zijn volgende opties gekozen --> datum en zonnestand
een analoog polshorloge
optie datum
optie zonnestand
optie timer
Dit is een analoog Polshorloge , de tijd is 14:52:52 de datum is 15-01-2014 ,de zonnestand is zeer hoog  ,de timer is gezet  er zijn volgende opties gekozen --> datum en zonnestand en timer

YaMo

Legacy Member
Code:
IWekker wekker = null;
if(soort == "analoogPols") wekker = new AnaloogPolshorloge();
else if(soort == "...") ...
....
if(datum == "datum") wekker = new Datum(wekker);
if(zonnestand == "zonnestand") wekker = new Zonnestand(wekker);
....
System.out.println(wekker.getOmschrijving() + " er zijn volgende opties gekozen --> " + wekker.alleOpties());

En strings kan je beter vergelijken met de equals-methode. De enige reden waarom 'soort == "analoogPols"' misschien werkt, is omdat er achter de schermen in de JVM allerlei optimizatiemagic gebeurt waardoor soort en "analoogPols" hetzelfde object zullen zijn.

Waarom zijn bijvoorbeeld datum en zonnestand strings en geen booleans? Welke andere waarde dan "datum" kan datum hebben?

En een beetje raar om een horloge aan te maken in zo'n static factorymethode en het aangemaakte horloge dan niet te returnen, maar gewoon weg te gooien.

badboyss

Legacy Member
En strings kan je beter vergelijken met de equals-methode. De enige reden waarom 'soort == "analoogPols"' misschien werkt, is omdat er achter de schermen in de JVM allerlei optimizatiemagic gebeurt waardoor soort en "analoogPols" hetzelfde object zullen zijn.
thx dat is juist ikzal dit aanpassen.

Waarom zijn bijvoorbeeld datum en zonnestand strings en geen booleans? Welke andere waarde dan "datum" kan datum hebben?
Ze hebben een string omdat ze met een decorator werken en een interface public String getOmschrijving() hebben

dit is mijn klasse datum
Code:
public class Datum extends ADecorator {
	private String datum;
	public Datum() {
		// TODO Auto-generated constructor stub
	}

	public Datum(IWekker tempWekker) {
		super(tempWekker);
		System.out.println("optie datum");
		this.setDatum(String.format("%1$te-%1$tm-%1$tY" ,AHorloges.getCal()));
		
		// TODO Auto-generated constructor stub
	}
	@Override
	public String getOmschrijving() {
		return tempWekker.getOmschrijving()+ " de datum is " + getDatum();
	}

	public String getDatum() {
		return datum;
	}

	public void setDatum(String datum) {
		this.datum = datum;
	}
}

En een beetje raar om een horloge aan te maken in zo'n static factorymethode en het aangemaakte horloge dan niet te returnen, maar gewoon weg te gooien.

dit komt nog ik zal al de gemaakt horloges in een arraylist steken om er dan een serialisatie van te maken.
Maar eerst wil ik zorgen dat mijn menu aanmaak werkt.
Ik heb ondertussen al de optiesin een if gestoken die mogelijk zijn,mogelijks is er een andere oplossing maar ik ben nog maar beginner :-p

Code:
public static void maakHorloges(String soort, String datum, String timer,String zonnestand) {
        //analoogpols horloge
		if (soort == "analoogPols") {
			IWekker standaardHorloge = new AnaloogPolshorloge();
			System.out.println(standaardHorloge.getOmschrijving()
					+ " en er zijn geen opties gekozen");
		}
		//analoogpols met datum
		if (soort == "analoogPols" && datum == "datum") {
			IWekker standaardHorloge1 = new Datum(new AnaloogPolshorloge());
			System.out.println(standaardHorloge1.getOmschrijving()
					+ " er zijn volgende opties gekozen --> datum");
		}
		//analoogpols met zonnestand
		if (soort == "analoogPols" && zonnestand == "zonnestand") {
			IWekker standaardHorloge1 = new Zonnestand(new AnaloogPolshorloge());
			System.out.println(standaardHorloge1.getOmschrijving()
					+ " er zijn volgende opties gekozen --> zonnestand");
		}
		//analoogpols met timer
		if (soort == "analoogPols" && timer == "timer") {
			IWekker standaardHorloge1 = new Timers(new AnaloogPolshorloge());
			System.out.println(standaardHorloge1.getOmschrijving()
					+ " er zijn volgende opties gekozen --> timer");
		}
		//analoogpols met datum en zonnestand
		if (soort == "analoogPols" && datum == "datum" && zonnestand == "zonnestand") {
			IWekker standaardHorloge2 = new Zonnestand(new Datum(
					new AnaloogPolshorloge()));
			System.out.println(standaardHorloge2.getOmschrijving()
							+ " er zijn volgende opties gekozen --> datum en zonnestand");
		}
        //analoogpols met datum en timer
		if (soort == "analoogPols" && datum == "datum" && timer== "timer") {
			IWekker standaardHorloge2 = new Timers(new Datum(
					new AnaloogPolshorloge()));
			System.out.println(standaardHorloge2.getOmschrijving()
							+ " er zijn volgende opties gekozen --> datum en timer");
			
		//analoogpols met datum en timer en zonnestand
		if (soort == "analoogPols" && datum == "datum" && zonnestand == "zonnestand" && timer == "timer") {
				IWekker standaardHorloge3 = new Timers(new Zonnestand(new Datum(
						new AnaloogPolshorloge())));
				System.out
						.println(standaardHorloge3.getOmschrijving()
								+ " er zijn volgende opties gekozen --> datum en zonnestand en timer");
			}
		}
		//analoogpols met zonnestand en timer
		if (soort == "analoogPols" && zonnestand == "zonnestand" && timer== "timer") {
			IWekker standaardHorloge2 = new Zonnestand(new Datum(
					new AnaloogPolshorloge()));
			System.out.println(standaardHorloge2.getOmschrijving()
							+ " er zijn volgende opties gekozen --> zonnestand en timer");
		}

badboyss

Legacy Member
ok voorlopig opgelost.

Code:
private String soort,datum,zonnestand,timer = null;

Code:
public static void maakHorloges(String soort, String datum, String timer,String zonnestand) {
        //analoogpols horloge
		if (soort == "analoogPols" &&  datum == null && zonnestand == null && timer == null){
			IWekker standaardHorloge = new AnaloogPolshorloge();
			System.out.println(standaardHorloge.getOmschrijving()	+ " en er zijn geen opties gekozen");
		}
		
		//analoogpols met datum
		//if (soort == "analoogPols" && datum == "datum") {
		if (soort == "analoogPols" &&  datum == "datum" && zonnestand == null && timer == null){
			IWekker standaardHorloge1 = new Datum(new AnaloogPolshorloge());
			System.out.println(standaardHorloge1.getOmschrijving()+ " er zijn volgende opties gekozen --> datum");
		}
		
		//analoogpols met zonnestand
		//if (soort == "analoogPols" && zonnestand == "zonnestand") {
		if (soort == "analoogPols" &&  datum == null && zonnestand == "zonnestand" && timer == null){
			IWekker standaardHorloge1 = new Zonnestand(new AnaloogPolshorloge());
			System.out.println(standaardHorloge1.getOmschrijving()+ " er zijn volgende opties gekozen --> zonnestand");
		}

nu gaan fine tunen met bovenstaande suggesties

Nepherte

Legacy Member
Strings vergelijk je altijd met equals, niet met '=='.

Code:
String s1 = "a";
String s2 = "a";
assert s1.equals(s2) // slaagt
assert s1 == s2 // faalt (assertion error)

en ik zie net dat dat al gezegd is :)

Jerre Muesli

Legacy Member
Door de string pool zal uw aangehaalde code slagen.
Enkel new String ("a") == new String ("a") zal falen omdat deze geen gebruik maakt van de pool.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan