当前位置: 首页 > 知识库问答 >
问题:

方法main(String[])的代码超过了65535字节的限制

邓光赫
2023-03-14

所以我需要使用Java Dijkstra算法。我在这里找到了Dijkstra的一个有效例子。但在我的例子中,我有大约5000个顶点。我得到了一个错误:main方法(String[])的代码超过了65535字节的限制。在stackoverflow上有一些类似的主题,但我找不到如何解决这个问题的实现。有人能给我一些代码来解决这个问题吗。。

import java.util.PriorityQueue;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;

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 class Dijkstra
{
    public static void computePaths(Vertex source)
    {
        source.minDistance = 0.;
        PriorityQueue<Vertex> vertexQueue = new PriorityQueue<Vertex>();
    vertexQueue.add(source);

    while (!vertexQueue.isEmpty()) {
        Vertex u = vertexQueue.poll();

            // Visit each edge exiting u
            for (Edge e : u.adjacencies)
            {
                Vertex v = e.target;
                double weight = e.weight;
                double distanceThroughU = u.minDistance + weight;
        if (distanceThroughU < v.minDistance) {
            vertexQueue.remove(v);

            v.minDistance = distanceThroughU ;
            v.previous = u;
            vertexQueue.add(v);
        }
            }
        }
    }

    public static List<Vertex> getShortestPathTo(Vertex target)
    {
        List<Vertex> path = new ArrayList<Vertex>();
        for (Vertex vertex = target; vertex != null; vertex = vertex.previous)
            path.add(vertex);

        Collections.reverse(path);
        return path;
    }

    public static void main(String[] args)
    {
        // mark all the vertices 
        Vertex X1 = new Vertex("A");
        //...till Vertex X5000..

        // set the edges and weight
        X1.adjacencies = new Edge[]{ new Edge(X2, 8) };
        //...till X5000.adjacencies...    

        computePaths(X1); // run Dijkstra
        System.out.println("Distance to " + X5 + ": " + X5.minDistance);
        List<Vertex> path = getShortestPathTo(X5);
        System.out.println("Path: " + path);
    }
}

编辑

我试图从MySQL表中获取数据,但在声明vertex时遇到了问题。

String query = "SELECT * FROM coordinates";

Statement st = conn.createStatement();         
ResultSet rs = st.executeQuery(query);      
while (rs.next())
{
  int id = rs.getInt("id");
  String vert = Integer.toString(id);

  //Which approach will work?        
  Vertex vert = new Vertex(vert);          
}
st.close();  

共有1个答案

耿玄裳
2023-03-14

您是否在代码中硬编码图的定义?不要这样做。改为从数据文件中读取顶点和边。

 类似资料:
  • 我正在运行一个使用Apache Tomcat8.5和Java1.8的Struts2项目。 我被以下错误所困扰;我试过所有可能的解决办法,但找不到任何答案。 JasperException:无法为JSP编译类: 在生成的java文件[d:\newworkspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\catalina\loca

  • 问题内容: 我有以下代码: 尝试编译此错误消息: 问题答案: 在Java中,方法不能超过65535个字节。 因此,要解决此问题,请将您的方法分解为多个子方法。

  • 问题内容: 因此,我正在处理在Websphere 7(JDK 6)上运行的旧servlet代码。开发环境设置使用Tomcat 6(JDK 6)。 为什么它在Websphere 7上而不在Tomcat 6上可以工作? 这与应用程序服务器有关吗? 如果您的回答为“是”,则为“否”。2,除了分解代码或使用动态包含之外,您在Tomcat 6(JDK 6)上是否有解决方法? 该计划与将静态包含更改为动态包含

  • 与HTTP不同,websocket在从HTTP升级后保持长时间连接。 即使操作系统被调优为使用所有端口,总共仍然只有65536个端口。NGINX有可能超过这个限制吗? 一个潜在的解决方案是,但是它缺少文档--至少我没有找到除了下面这段

  • 我的问题是,当我上传一个文件超过我在脚本中设置的限制(5 MB)时,它会在网站顶部显示此警告: 警告:第0行未知中32485176字节的POST内容长度超过了20971520字节的限制 例如,在这里,我上传了一个文件超过(30 MB),但当我上传一个文件超过(5 MB),小于30(或没有那么大)它不显示警告,只显示我想要的代码错误: 我正在localhost,这个错误每次都出现,我知道如何通过修改

  • 问题内容: 用户在我的网站上上传图片时遇到了很多问题。 他们最多可以上传6张图片 最初,我不得不将php.ini中的值更改为: 我不得不更改为这个,因为出现了各种错误,例如内存不足,超出最大发布数等。 一切正常,直到我检查了包含以下内容的错误日志: 如果我将帖子的最大值改回前8M,则会收到如下消息: 有什么想法我要去哪里吗? 问题答案: 在某些32位系统上,PHP将采用类似或的内存设置,并且通过不