Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:for循环中的对象数组赋值_Java_Arrays_Object_Input_Variable Assignment - Fatal编程技术网

Java:for循环中的对象数组赋值

Java:for循环中的对象数组赋值,java,arrays,object,input,variable-assignment,Java,Arrays,Object,Input,Variable Assignment,我试图使用Dijkstra算法来寻找从一个特定顶点(v0)到其余顶点的最短路径。这一问题已经解决,并且与下面链接中的代码配合良好: 我在从用户输入分配for循环中的边缘数组时遇到了问题,而不是像这里这样硬编码 为每个顶点的边[]邻接指定新边有什么帮助吗?请记住,它可以是一条或多条边 class Vertex implements Comparable<Vertex> { public final String name; public Edge[] adjacenci

我试图使用Dijkstra算法来寻找从一个特定顶点(v0)到其余顶点的最短路径。这一问题已经解决,并且与下面链接中的代码配合良好:

我在从用户输入分配for循环中的边缘数组时遇到了问题,而不是像这里这样硬编码

为每个顶点的边[]邻接指定新边有什么帮助吗?请记住,它可以是一条或多条边

class Vertex implements Comparable<Vertex>
{
    public final String name;
    public Edge[] adjacencies;
    public double minDistance = Double.POSITIVE_INFINITY;
    public Vertex previous;
    public Vertex(String argName) { name = argName; }
    public String toString() { return name; }

    public int compareTo(Vertex other){
    return Double.compare(minDistance, other.minDistance);
    }
}


class Edge{
    public final Vertex target;
    public final double weight;

    public Edge(Vertex argTarget, double argWeight){
        target = argTarget; weight = argWeight; }
    }

public static void main(String[] args)
{
    Vertex v[] = new Vertex[3];
    Vertex v[0] = new Vertex("Harrisburg");
    Vertex v[1] = new Vertex("Baltimore");
    Vertex v[2] = new Vertex("Washington");

    v0.adjacencies = new Edge[]{ new Edge(v[1],  1),
                             new Edge(v[2],  3) };
    v1.adjacencies = new Edge[]{ new Edge(v[0], 1),
                             new Edge(v[2],  1),};
    v2.adjacencies = new Edge[]{ new Edge(v[0],  3),
                                 new Edge(v[1],  1)  };

    Vertex[] vertices = { v0, v1, v2};
       /*Three vertices with weight: V0 connects (V1,1),(V2,3)
                                     V1 connects (V0,1),(V2,1)
                                     V2 connects (V1,1),(V2,3)
       */  
    computePaths(v0);
    for (Vertex v : vertices){
    System.out.println("Distance to " + v + ": " + v.minDistance);
    List<Vertex> path = getShortestPathTo(v);
    System.out.println("Path: " + path);
    }
}
}
如何获取用户输入并生成边[],以将其传递给邻接?问题是它可能是0条边或多条边

任何帮助都将不胜感激
谢谢

在您的例子中,您正在分配v[i]。j的每个迭代的邻接。。。所以它的意思是line.length=8,那么v[i]。邻接被赋值2次。我认为这不是你的意图

    for (int j = 0; j < line.length; j++){  
       if(j % 4 == 0 ){ //Input: vertex weight vertex weight: 1 1 2 3
        int vert = Integer.parseInt(String.valueOf(line[j]));
        int w = Integer.parseInt(String.valueOf(line[j+2]));
        v[i].adjacencies = new Edge[] {new Edge(v[vert], w)};
    }
for(int j=0;j
您可以像这样更改代码

    Edge[] edges = new Edge[line.length/4];  
    for (int j = 0; j < line.length; j++){           
       if(j % 4 == 0 ){ //Input: vertex weight vertex weight: 1 1 2 3
        int vert = Integer.parseInt(String.valueOf(line[j]));
        int w = Integer.parseInt(String.valueOf(line[j+2]));
        edges[j/4] =  {new Edge(v[vert], w)};
    }
   v[i].adjacencies = edges;
Edge[]edges=新边[line.length/4];
对于(int j=0;j

它可能不是精确的代码,但您必须将循环分配到外部。

这非常有效!只有一件事是Edge[]Edge初始化应该是:Edge[]Edge=新Edge[(line.length+1)/4];非常感谢!您可能需要查看用于读取输入的
Scanner
类,它有一个从字符串读取数字的方法
nextInt
    for (int j = 0; j < line.length; j++){  
       if(j % 4 == 0 ){ //Input: vertex weight vertex weight: 1 1 2 3
        int vert = Integer.parseInt(String.valueOf(line[j]));
        int w = Integer.parseInt(String.valueOf(line[j+2]));
        v[i].adjacencies = new Edge[] {new Edge(v[vert], w)};
    }
    Edge[] edges = new Edge[line.length/4];  
    for (int j = 0; j < line.length; j++){           
       if(j % 4 == 0 ){ //Input: vertex weight vertex weight: 1 1 2 3
        int vert = Integer.parseInt(String.valueOf(line[j]));
        int w = Integer.parseInt(String.valueOf(line[j+2]));
        edges[j/4] =  {new Edge(v[vert], w)};
    }
   v[i].adjacencies = edges;