【小白Java问题】为什么这个while循环达到条件了却终止不了?

package CityDistance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;


public class CityDistance {
    private ArrayList<String> city = new ArrayList<String>();
    private int answer = 0;
    HashMap<String, Integer> distance = new HashMap<String, Integer>();

    public void input()
    {
        Scanner in = new Scanner(System.in);
        String temp = null;
        while ((temp = in.next()) != "###")
        {
            city.add(temp);
        }

        int number = city.size();   
        for ( int i = 0; i < number; i++ )
        {
            for ( int j = 0; j < number; j++ )
            {
                String key = "" + city.get(i) + city.get(j);
                distance.put(key, in.nextInt());
            }
        }
        in.close();
    }   

    public int FindDistance(String A, String B)
    {
        String str = A + B;
        answer = distance.get(str);
        System.out.println(answer);
        return answer;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        CityDistance cd = new CityDistance();   
        cd.input();
        cd.FindDistance(in.next(), in.next());
        in.close();
    }
}

输入如下:
aaa bbb ccc ###
0 1 2
1 0 3
2 3 0
aaa bbb

input 函数里的第一个 while ,已经设定好了遇到 "###" 的输入就停止往 city 里加东西,但调试时发现 while 并没有停止,反而把后面的0、1、2都添到 city 里去了……
图片说明

跪求大神解答!

 import java.util.*;

public class CityDistance {

    private List<String> city = new ArrayList<String>();
    private int answer = 0;
    private Map<String, Integer> distance = new HashMap<String, Integer>();

    public void input()
    {
        Scanner in = new Scanner(System.in);
        String temp = null;
        System.out.println("请输入城市(“###”结束输入):");
        /*
        *   注意:字符串是一个对象,不是基本类型,不能使用==比较,要使用equals
        */
        while (!(temp = in.next()).equals("###"))
        {
            city.add(temp);
        }

        int number = city.size();   
        for ( int i = 0; i < number; i++ )
        {
            for ( int j = 0; j < number; j++ )
            {
                String key = "" + city.get(i) + city.get(j);
                System.out.print("请输入"+city.get(i) + "<-->"+city.get(j)+"的距离:");
                distance.put(key, in.nextInt());
            }
        }
        /*
        *   注意:不能关闭,否则的话之后即使在main函数里有一个scanner,也不能使用
        */
        //in.close();
    }   

    public int FindDistance(String A, String B)
    {
        String str = A + B;
        if(distance.containsKey(str)){
            answer = distance.get(str);
            return answer;
        }
        return 0;
    }

    public static void main(String[] args) {
        CityDistance cd = new CityDistance();   
        cd.input();
        Scanner in = new Scanner(System.in);
        System.out.println("查询城市间距离:");
        System.out.print("输入城市1:");
        /*
        *   注意:input()里不要调用in.close(),否则这里得不到输入,你可以测试一下,加深下印象
        */
        String A = in.next();
        System.out.print("输入城市2:");
        String B = in.next();
        System.out.println(A + "<-->"+B + "的距离:" + cd.FindDistance(A,B));
    }
}

asd asd adadadadasdadaasda

while (true)
{
temp = in.next()
if(temp.equals("###")){
city.add(temp);}
else{
break;}
}

比较字符串不要再等号,用equal

你去了解一下 == 与equals 就知道为什么 了

字符串判断问题,JAVA用equals,还有楼上说的关闭问题+1

==比较不仅含有值,还有地址

  1. 用equals不能用=
  2. 这个in.close();你想表达什么意思的?没有必要关闭输入!去掉