0

I have a program which I am writing which in one particular case enters every if-statement. But it isn't supposed to. I govern whether or not it should do just that by a boolean value which i send with the reference to the method. But it still won't work properly.

Here is the code snippet of the two methods included:

    void tilStasjon(String startStasjon){

        boolean sjekkStasjon=true;
        while(sjekkStasjon){
            System.out.println("Vennligst tast inn til-stasjonen: ");
            String sluttStasjon=input.next().toLowerCase();
            if(stasjonerMap.containsKey(sluttStasjon)){
                if(sluttStasjon!="ringen"){
                    sjekkStasjon=false;
                    beregnRuter(startStasjon, sluttStasjon);
                }
            }else{  
                System.out.println("Stasjon ikke funnet.");
                sjekkStasjon=true;
            }
        }
    }

    void beregnRuter(String startStasjon, String sluttStasjon){

        Stasjon til=stasjonerMap.get(startStasjon);
        Stasjon fra=stasjonerMap.get(sluttStasjon);
        ArrayList<Linje> fraLinjeListe=new ArrayList<Linje>(fra.linjeList);
        ArrayList<Linje> tilLinjeListe=new ArrayList<Linje>(til.linjeList);
        int tilStasjonsNummer, fraStasjonsNummer;
        int retning;
        double tid= 0.0;
        String endeStasjonsNavn;
        boolean overgang=false;

        tilStasjonsNummer=0;
        fraStasjonsNummer=0;

        for (int i = 0; i < fraLinjeListe.size(); i++) {
            for (int j = 0; j < tilLinjeListe.size(); j++) {
                if(fra.linjeList.get(i).equals(til.linjeList.get(j))){
                    System.out.println(fra.linjeList.get(i).linjeNummer);
                    Linje aktuellLinje=linjerMap.get(fra.linjeList.get(i).linjeNummer);
                    tilStasjonsNummer=aktuellLinje.stasjonsNummer(til);
                    fraStasjonsNummer=aktuellLinje.stasjonsNummer(fra);
                    retning=tilStasjonsNummer-fraStasjonsNummer;
                    tid=beregnTid(retning, overgang, aktuellLinje);

                    endeStasjonsNavn=aktuellLinje.endestasjon(retning);
                    System.out.println("Ta T-bane linje " + aktuellLinje.linjeNummer + " fra " + startStasjon + " til " + sluttStasjon + " i retning " + endeStasjonsNavn + ". Estimert reisetid: " + tid);             
                }   
            }
        }
    }

Below here is the method where the problem occurs. It enters both the outer if and else-if. Why is that?

    double beregnTid(int retning, boolean overgang, Linje aktuellLinje){
        double tidMellomStasjoner;
        double tid=0.0;
        int absRetning=Math.abs(retning);
        double tidOvergang;

        if(overgang=false){
            if(aktuellLinje.type==0){
                System.out.println(absRetning);
                tidMellomStasjoner=1.8;
                tid=tidMellomStasjoner*absRetning;
            }else if(aktuellLinje.type==1){
                tidMellomStasjoner=1.4;
                tid=tidMellomStasjoner*absRetning;
            }
        }else if(overgang=true){
            if(aktuellLinje.type==0){
                System.out.println("Test");
                tidOvergang=7.5;
                tidMellomStasjoner=1.8;
                tid=(tidMellomStasjoner*absRetning)+tidOvergang;
            }else if(aktuellLinje.type==1){
                tidOvergang=5.0;
                tidMellomStasjoner=1.4;
                tid=(tidMellomStasjoner*absRetning)+tidOvergang;
            }
        }
        return tid; 
    }
}
Maciej Dobrowolski
  • 11,561
  • 5
  • 45
  • 67
Makri
  • 331
  • 2
  • 4
  • 15

2 Answers2

2

If you want to compare values/objects

For literals (simple types such as int, boolean):

Change assigments

overgang=false

To comparisions

overgang==false

For objects (i.e. String)

Change comparisions/assigments

someVar!="String"

To .equals() invocations

someVar.equals("String")
Maciej Dobrowolski
  • 11,561
  • 5
  • 45
  • 67
0

You are assigning the overgang value to true. That is what happens when you use =. When you assigned a value using the = it returns true to indicate that the value was in fact stored to the variable.

If you want to compare overgang's value you would want to use two equal signs ==.

if (overgang == true) {
    ... 
}
Robert N
  • 11
  • 2