# 【小白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>();
HashMap<String, Integer> distance = new HashMap<String, Integer>();

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

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;
}

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 里去了……

• 写回答

#### 8条回答默认 最新

• havedream_one 2015-11-06 00:26
关注
`````` import java.util.*;

public class CityDistance {

private List<String> city = new ArrayList<String>();
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("###"))
{
}

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)){
}
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));
}
}

``````
本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

#### 悬赏问题

• ¥15 xy坐标转化为经纬度坐标
• ¥15 一般三角模糊数的上界值和下届值取中值的多少比较合理？
• ¥15 关于#python#的问题，请各位专家解答！
• ¥20 Hbase启动失败，无法启动HMaster
• ¥15 sqpingboot在父模块已经引入了mybatisplus 在子组件不写版本号还是报错
• ¥20 Lumerical FDTD solutions 中模型的相对阻抗，有效介电常数和有效磁导率的实部和虚部的数据如何获得？
• ¥100 sql reporting service 远程smtp服务器配置支持
• ¥15 ppyoloe_r带角度目标检测，loss_cls没法收敛
• ¥15 淘宝交易指数如何解读，其关联的数据指标是什么
• ¥15 Linux下安装搜狗拼音不能显示中文