环形废墟 2015-11-05 15:44 采纳率: 100%
浏览 1604
已采纳

【小白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 里去了……
图片说明

跪求大神解答!

  • 写回答

8条回答 默认 最新

  • havedream_one 2015-11-06 00:26
    关注
     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));
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘