De if-instructie in JAVA

Ik heb twee "als" -instructies in mijn code, wat kan ik doen om te voorkomen dat een "als" -verklaring waar is, dan wordt de andere automatisch genegeerd/uitgeschakeld?

6
lees "else", het deel van een "als" -instructie dat wordt uitgevoerd als de voorwaarde onwaar is.
toegevoegd de auteur Tony Ennis, de bron
Ik weet niet zeker of dit gesloten had moeten zijn. De man komt er 'aan'.
toegevoegd de auteur Tony Ennis, de bron
Post alstublieft uw code.
toegevoegd de auteur Lee, de bron
@Matthew Mogelijk moet u return gebruiken voordat u naar de volgende als gaat.
toegevoegd de auteur Ravinder Reddy, de bron
anders als misschien?
toegevoegd de auteur DrColossos, de bron
Weet niet waarom de vraag is afgesloten: p
toegevoegd de auteur GETah, de bron
Ik weet dat het probleem is, dat er bepaalde voorwaarden zijn waarbij beide 'als'-uitspraken waar kunnen worden ... daarom heb ik er twee als de omstandigheden daar tegelijkertijd werken ... Wat denk je?
toegevoegd de auteur Matthew, de bron
bijgewerkte vraag bedankt
toegevoegd de auteur Matthew, de bron
@DrColossos Yepp dat is het: anders als. bedankt
toegevoegd de auteur Matthew, de bron

3 antwoord

    if(maxValY < 3)
    {
        p.setColor(Color.black);
        //display the value of graph width and graph height
        aw = String.valueOf(x1);
        p.drawString("Graph Width = ", 740,490);
        p.drawString(aw,840,490);
        p.drawString("Graph Height = ", 740,510);
        String ah = String.valueOf(y1);
        p.drawString(ah,846,510);
    } 
    else
    {   if (minValx == -1 || minValx == - 2 || minValx == - 3){
        p.setColor(Color.black);
        //display the value of graph width and graph height
        aw = String.valueOf(x1);
        p.drawString("Graph Width = ", 740,90);
        p.drawString(aw,840,90);
        p.drawString("Graph Height = ", 740,110);
        String ah = String.valueOf(y1);
        p.drawString(ah,846,110);
        }
        else{
        p.setColor(Color.black);
        //display the value of graph width and graph height
        aw = String.valueOf(x1);
        p.drawString("Graph Width = ", 50,90);
        p.drawString(aw,150,90);
        p.drawString("Graph Height = ", 50,110);
        String ah = String.valueOf(y1);
        p.drawString(ah,156,110);
        }
   }
3
toegevoegd

Er zijn tenminste twee antwoorden. Een daarvan is om een ​​return-statement onder aan de eerste if -instructie te zetten. Ik vind dat niet leuk omdat het misschien geen goede algemene oplossing is.

Een ander antwoord is om je code een beetje te herstructureren ...

First, since the case is where maxValX is >= 3 doesn't seem to be where the problem lies, I'd get that out of the way by reversing the first if conditional:

    if (maxValY >= 3) {
        p.setColor(Color.black);
        //display the value of graph width and graph height
        aw = String.valueOf(x1);
        p.drawString("Graph Width = ", 50, 90);
        p.drawString(aw, 150, 90);
        p.drawString("Graph Height = ", 50, 110);
        String ah = String.valueOf(y1);
        p.drawString(ah, 156, 110);
    } else if (maxValY < 3) {
        p.setColor(Color.black);
        //display the value of graph width and graph height
        aw = String.valueOf(x1);
        p.drawString("Graph Width = ", 740, 490);
        p.drawString(aw, 840, 490);
        p.drawString("Graph Height = ", 740, 510);
        String ah = String.valueOf(y1);
        p.drawString(ah, 846, 510);
    }
    if (minValx == -1 || minValx == -2 || minValx == -3) {
        p.setColor(Color.black);
        //display the value of graph width and graph height
        aw = String.valueOf(x1);
        p.drawString("Graph Width = ", 740, 90);
        p.drawString(aw, 840, 90);
        p.drawString("Graph Height = ", 740, 110);
        String ah = String.valueOf(y1);
        p.drawString(ah, 846, 110);
    }

Dus het enige dat gebeurde was dat ik de 'non duplicate if statement issue' bovenaan plaatste.

Nu hebben we twee voorwaarden, een die zich bezighoudt met minValX , en een die zich bezighoudt met maxValY . Maar we merken nu dat de inhoud van elk bijna identiek is. We lossen dit op door de code een beetje te refactoren (en sluipen in een andere ...):

    if (maxValY >= 3) {
        p.setColor(Color.black);
        //display the value of graph width and graph height
        aw = String.valueOf(x1);
        p.drawString("Graph Width = ", 50, 90);
        p.drawString(aw, 150, 90);
        p.drawString("Graph Height = ", 50, 110);
        String ah = String.valueOf(y1);
        p.drawString(ah, 156, 110);
    } else if (maxValY < 3) {
        q(491, 510);
    } else if (minValx == -1 || minValx == -2 || minValx == -3) {
        q(90, 110);
    } else {
        throw new RuntimeException("This cannot possibly happen ;-)");
    }
}

private void q(int loc1, int loc2) {
    p.setColor(Color.black);
    //display the value of graph width and graph height
    aw = String.valueOf(x1);
    p.drawString("Graph Width = ", 740, loc1);
    p.drawString(aw, 840, loc1);
    p.drawString("Graph Height = ", 740, loc2);
    String ah = String.valueOf(y1);
    p.drawString(ah, 846, loc2);
}

En dan merken we dat de codeblokken nog steeds bijna identiek zijn. Refactor ...

private void someName() {
   //...
    if (maxValY >= 3) {
        q(50, 90, 510);
    } else if (maxValY < 3) {
        q(740, 490, 510);
    } else if (minValx == -1 || minValx == -2 || minValx == -3) {
        q(740, 90, 110);
    } else {
        throw new RuntimeException("This cannot possibly happen ;-)");
    }
   //...
}

private void q(int base, int graphWidth, int graphHeight) {
    p.setColor(Color.black);
    //display the value of graph width and graph height
    aw = String.valueOf(x1);
    p.drawString("Graph Width = ", base, graphWidth);
    p.drawString(aw, base+100, graphWidth);
    p.drawString("Graph Height = ", base, graphHeight);
    String ah = String.valueOf(y1);
    p.drawString(ah, base+100+6, graphHeight);
}

Dus we zien dat alle drie secties van de code in principe hetzelfde waren, met uitzondering van enkele constanten. Door ze opnieuw in te stellen, verminderen we de hoeveelheid code die moet worden gedebugd. Bovendien zien we de structuur van de if -instructie duidelijk en hebben we de logica gescheiden van het daadwerkelijke werk, dat vaak extra dividenden oplevert.

0
toegevoegd
@GETah Yep. En met deze oplossing, krijgt het OP wat hij wilde, met behulp van de voorkeursconstructie, en hopelijk leert het wat meer dan dat. Beginners stellen vaak de verkeerde vraag, en dit was hier het geval.
toegevoegd de auteur Tony Ennis, de bron
De vraag van het OP is hoe je de tweede if-statement negeert, niet als het gaat om het her factureren van zijn code
toegevoegd de auteur GETah, de bron

Dus je hebt het volgende:

if(condition1){
   block1;
}
if(condition2){
   block2;
}else{
   block3;
}

Als u de tweede als wilt uitschakelen/negeren, kunt u een else if -instructie gebruiken:

if(condition1){
   block1;
} else if(condition2){
   block2;
}else{
   block3;
}

Or a return statement after block1

if(condition1){
   block1;
   return;
}
if(condition2){
   block2;
}else{
   block3;
}
0
toegevoegd
Deze oplossing pakt het symptoom aan.
toegevoegd de auteur Tony Ennis, de bron
De terugkeer betekent in feite: IK BEN GEDAAN, GA NIET NOG ÉÉN VERDER :)
toegevoegd de auteur GETah, de bron
@TonyEnnis Ik ben het daar niet mee eens. De vraag van het OP is hoe de tweede if -instructie negeert, niet over het opnieuw factureren van zijn code
toegevoegd de auteur GETah, de bron
wat is het doel van de 'terugkeer'; in het algemeen? Ik kan het niet begrijpen: S
toegevoegd de auteur Matthew, de bron