Java 为什么下面的语句返回真值?

Java 为什么下面的语句返回真值?,java,graph,boolean,breadth-first-search,Java,Graph,Boolean,Breadth First Search,我试图用Java编写一个广度优先搜索的实现(尚未完成),但当我尝试迭代到起始顶点的所有相邻顶点时,遇到了一个问题 程序正在迭代所有相邻的顶点,但当它到达检查TargetVertex是否已被访问的if语句时,它总是返回true而不是false,因此从不在括号内运行代码 我不确定为什么会发生这种情况,因为在Vertex类中,我已将所有新顶点的visited值初始化为false。有没有人看到我犯的错误,或者知道为什么会发生这种情况?我已经看过了所有其他的方法/类,它们在任何时候都不会改变“visted

我试图用Java编写一个广度优先搜索的实现(尚未完成),但当我尝试迭代到起始顶点的所有相邻顶点时,遇到了一个问题

程序正在迭代所有相邻的顶点,但当它到达检查TargetVertex是否已被访问的if语句时,它总是返回true而不是false,因此从不在括号内运行代码

我不确定为什么会发生这种情况,因为在Vertex类中,我已将所有新顶点的visited值初始化为false。有没有人看到我犯的错误,或者知道为什么会发生这种情况?我已经看过了所有其他的方法/类,它们在任何时候都不会改变“visted”的值。任何帮助都将不胜感激

public void doBFS(String s){

    //Create a queue
    Queue<Vertex> q = new LinkedList<Vertex>();

    //Create an arraylist to keep track of visited vertices
    ArrayList<String> visited = new ArrayList<String>();

    // Retrieve the starting vertex u, using the string name entered
    Vertex u = vertices.get(s);

   //Enqueue the starting node and add it to the visited set
   visited.add(u.name);
   u.visited = true;
   u.distance = 0;
   q.add(u);


 while (! q.isEmpty() ) {

   Vertex current = q.remove();

       for (Edge e : current.getEdges()) {
          //HERE IS THE PROBLEM. It always says it's true.
        if(e.targetVertex.visited = false) {

            visited.add(e.targetVertex.name);
            q.add(e.targetVertex);
            e.targetVertex.visited=true;        
        } 

        current = e.targetVertex;  
   }

}
public void doBFS(字符串s){
//创建队列
队列q=新的LinkedList();
//创建arraylist以跟踪访问的顶点
ArrayList visited=新建ArrayList();
//使用输入的字符串名称检索起始顶点u
顶点u=顶点。获取(s);
//使起始节点排队并将其添加到访问集
已访问。添加(美国名称);
u、 访问=真实;
u、 距离=0;
q、 加(u);
而(!q.isEmpty()){
顶点电流=q.remove();
对于(边e:current.GetEdge()){
//问题是,它总是说这是真的。
如果(e.targetVertex.visitored=false){
已访问。添加(e.targetVertex.name);
q、 添加(如targetVertex);
e、 targetVertex.visitored=true;
} 
当前=e.targetVertex;
}
}
}

“顶点”类的开头:

 public class Vertex {
   public String name;
   private List<Edge> adjacent;
   public int posX = 0;
   public int posY = 0;
   public boolean visited = false;
   public double distance = Double.POSITIVE_INFINITY;

   /**
   * Construct a new vertex containing an adjacency list.
   * 
   * @param vertexName
   *          a unique identifier for this vertex.
   * @param x
   *          the x coordinate for this vertex
   * @param y
   *          the y coordinate for this vertex
   */
  public Vertex(String vertexName, int x, int y) {
    name = vertexName;
    adjacent = new LinkedList<Edge>();
    posX = x;
    posY = y;
    distance = Double.POSITIVE_INFINITY; 
    visited = false;
  }
公共类顶点{
公共字符串名称;
私人名单;
公共int posX=0;
公共整数posY=0;
公共布尔值=false;
公共双距离=双正_∞;
/**
*构造包含邻接列表的新顶点。
* 
*@param vertexName
*此顶点的唯一标识符。
*@param x
*此顶点的x坐标
*@param y
*此顶点的y坐标
*/
公共顶点(字符串vertexName,int x,int y){
名称=顶点名称;
相邻=新的LinkedList();
posX=x;
posY=y;
距离=双正_∞;
访问=假;
}
…是一项任务。使用

    if(e.targetVertex.visited == false) {
…或者只是

if(!e.targetVertex.visited) {
…是一项任务。使用

    if(e.targetVertex.visited == false) {
…或者只是

if(!e.targetVertex.visited) {

e.targetVertex.visited==false
?哇,我觉得自己是个白痴,没有注意到。谢谢!或者如果(!e.targetVertex.visited)的话,可能会更可读一点
你在使用IDE吗?它警告过你在那种情况下有什么不对劲吗?你忽略了吗?:)我在用VIM编写代码,我是Java新手,所以我可能应该使用eclipse或其他更有用的工具来捕捉类似的愚蠢错误。
e.targetVertex.visited==false
?哇,我感觉自己像个白痴,没有注意到这一点。谢谢你ou!或者如果(!e.targetVertex.visted)的话,
的可读性更高一些
您使用的是IDE吗?它是否警告您在这种情况下有什么问题?您是否忽略了它?:)我正在用VIM编写代码,我是Java新手,所以我可能应该使用eclipse或其他更有用的工具来捕捉像这样的愚蠢错误。epic…总是这样…哈哈…总是这样…哈哈