Avatar billede fiskesuppe Nybegynder
30. september 2002 - 15:32 Der er 15 kommentarer og
1 løsning

Java if/else

Jeg har denne kode:

import javax.swing.JOptionPane;

class byen {
  public static void main(String arguments[]) {
    String fornavn;
    String efternavn;
    String janej;

    fornavn = JOptionPane.showInputDialog(null, "Indtast dit fornavn");
    efternavn = JOptionPane.showInputDialog(null, "Indtast dit efternavn");
       
    JOptionPane.showMessageDialog(null, "Hej " + fornavn + " " + efternavn);
       
    janej = JOptionPane.showInputDialog(null, "Hvad så? Skal vi tage i byen?");

    if (janej == "Ja")
      JOptionPane.showMessageDialog(null, "Helt sikkert");

    else if (janej == "Nej")
      JOptionPane.showMessageDialog(null, "Helt sikkert");

    else
      JOptionPane.showMessageDialog(null, "Ja, det var jo ikke så flot!\n" +
      "Du skulle skrive Ja eller Nej");

    System.exit( 0 );
  }
}

Det skal være meningen at når man skriver Ja eller Nej så skal man få den besked der står. Men lige meget hvad springer programmet direkte til else-sætningen og springer nærmest if og if else sætningerne over. Hvorfor?
Avatar billede fiskesuppe Nybegynder
30. september 2002 - 15:33 #1
ej ups, else if sætningen skulle hedde:

else if (janej == "Nej")
  JOptionPane.showMessageDialog(null, "Skod");

Men problemet har alligevel ikke noget med dette at gøre..
Avatar billede bearhugx Nybegynder
30. september 2002 - 15:35 #2
din janej variable er en String variable...

Derfor skal du teste med .equals("...");

if( janej.equalsIgnoreCase("ja") ) {
...
} else if( janej.equalsIgnoreCase("nej") ) {
...
} else {
...
}

/Søren Munk Skrøder
Avatar billede jakoba Nybegynder
30. september 2002 - 15:35 #3
når du sammenligner String værdier skal du bruge
    janej.equals("Ja")
ig ikke ==.  == kan kun bruges til atomære variable.
Avatar billede bearhugx Nybegynder
30. september 2002 - 15:36 #4
equalsIgnoreCase() gør at du både kan skrive "JA", "ja", "jA" og "Ja" - de vil allesammen virke, da den ser bort fra store/små bogstaver...

/Søren
Avatar billede roger Nybegynder
30. september 2002 - 15:36 #5
if(janej.equals("Ja"))

men husk på at java er case sens.
Avatar billede roger Nybegynder
30. september 2002 - 15:37 #6
argh..sorry så ikke at der var nogen der havde svaret....Lyt til bearhugx
Avatar billede bearhugx Nybegynder
30. september 2002 - 15:37 #7
jacoba>> det er sgu' sjældent at jeg når at komme før dig :-) *LOL*
Avatar billede jakoba Nybegynder
30. september 2002 - 15:39 #8
bearhugx >> bare rolig, det vil ikke ske igen :-))
Avatar billede bearhugx Nybegynder
30. september 2002 - 15:39 #9
*LOL*
Avatar billede fiskesuppe Nybegynder
30. september 2002 - 15:50 #10
Mange tak for hjælpen ;)
Avatar billede roger Nybegynder
30. september 2002 - 15:51 #11
Jakoba...nu vi er ved det....hvorfor egentlig ? har altid undret mig over equals og == ved String
Avatar billede bearhugx Nybegynder
30. september 2002 - 15:52 #12
Takker for points :-)
Avatar billede jakoba Nybegynder
30. september 2002 - 16:01 #13
En string er et objekt der indeholder et antal bogstaver
så når du siger
    streng1 == streng2
er det to pegepinde du sammenligner, ikke 2 bogstavsekvenser
Avatar billede roger Nybegynder
30. september 2002 - 16:48 #14
ok tak jakoba
Avatar billede codemon Nybegynder
07. oktober 2002 - 20:28 #15
jakoba, du mener vel at man _burde_ bruge equals med Strings og ikke skal.

2 ens String bliver gjort til alias'er af compileren så med Strings virker == også (næsten altid)

public class StringEquals
{
    String instanceVar1 = "sammenlign", instanceVar2, instanceVar3;
    String instanceNewVar = new String("sammenlign");
   
    public StringEquals(String lokalStreng)
    {
        instanceVar2 = "sammenlign";
        instanceVar3 = lokalStreng;
       
        // nedenstående giver true fordi String objekterne er alias
        System.out.println ("instanceVar1 equals sammenlign: " +
            instanceVar1.equals("sammenlign"));
        System.out.println ("instanceVar1 == sammenlign: " +
            (instanceVar1 == "sammenlign"));
        System.out.println ("instanceVar1 == instanceVar2: " +
            (instanceVar1 == instanceVar2));
        System.out.println ("instanceVar1 == instanceVar3: " +
            (instanceVar1 == instanceVar3));
        System.out.println ("lokalStreng == instanceVar1: " +
            (lokalStreng==instanceVar1));
       
        // Hvis der bruges new String, giver kun equals true
        System.out.println ("\ninstanceVar1 equals NewVar: " +
            instanceVar1.equals(instanceNewVar));
        System.out.println ("instanceVar1 == NewVar: " +
            (instanceVar1 == instanceNewVar));
    }
   
    public static void main(String[] args)
    {
        new StringEquals("sammenlign");
    }
}

Giver som output

instanceVar1 equals sammenlign: true
instanceVar1 == sammenlign: true
instanceVar1 == instanceVar2: true
instanceVar1 == instanceVar3: true
lokalStreng == instanceVar1: true

instanceVar1 equals NewVar: true
instanceVar1 == NewVar: false
Avatar billede codemon Nybegynder
07. oktober 2002 - 20:31 #16
Derfor brug aldrig new String med en streng som parameter. Det bruger bare mere ram og performer langsommere.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester