我正在编写一个程序,在一种特定情况下,该程序会进入每个 if 语句。但这不应该。我通过一个 boolean 值来控制它是否应该这样做,我发送该 boolean 值并引用该方法。但仍然无法正常工作。
以下是包含的两个方法的代码片段:
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);
}
}
}
}
下面是出现问题的方法。它同时进入外部 if 和 else-if。这是为什么?
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;
}
}
最佳答案
如果你想比较值/对象
对于文字(简单类型,如 int、boolean):
更改分配
overgang=false
比较
overgang==false
对于对象(即字符串)
更改比较/分配
someVar!="String"
到 .equals()
调用
someVar.equals("String")
关于java - 程序执行方法中每个 if 语句内的操作。不应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061324/