环形废墟 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条)

报告相同问题?

悬赏问题

  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 spring后端vue前端
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题