当前位置: 首页 > 面试题库 >

ClassCastException:无法转换为java.lang.Integer

宇文梓
2023-03-14
问题内容

我知道在stackoverflow中已经对此提出了很多要求,但是我找不到适合我问题的答案。

在下面的以下代码中,我无法打印出每个项目,ArrayList<Integer>因为它说"Edge cannot be cast to java.lang.Integer"

我曾尝试使用来打印每个项目for(Integer item :p1)for (int item: p1)但都无法正常工作。

我认为可能是由于toString()Edge类中的方法导致的问题,但是如果我不使用它,toString()我将无法获得真实的键号(它将被打印为Edge@28a418fc或类似的形式)

感谢您之前的帮助

主班

public class Ranker7 {

    static Graph g;
    static Node n;
    static Edge e;
    static HashMap<Integer, Node> nodeMap; 
    int id;
    static double weight;
    static int year;
    static int type;

    Ranker7() {
            g = new Graph();
            nodeMap = new HashMap<Integer, Node>();
            n = new Node(id,year,type,weight);
    }

    public static void main (String[] args) throws Exception{

        long startTime = System.currentTimeMillis();

        /**Rule Mining**/
        Ranker7 Ranker = new Ranker7();
        Connection connect = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        PreparedStatement preparedStatement2 = null;
        ResultSet resultSet2 = null;
        HashMap nodeMap =  new HashMap();

        System.out.println("Processing...");
        Class.forName("com.mysql.jdbc.Driver");
        connect = DriverManager.getConnection("jdbc:mysql://localhost/arnetminer?"+"user=root&password=1234");
        preparedStatement = connect.prepareStatement("Select fr,t,ty from subedge");

        resultSet = preparedStatement.executeQuery();
        int i=0;

        while(resultSet.next()) {
           g.addEdgeForIndexing(resultSet.getInt(1),resultSet.getInt(2),resultSet.getInt(3));         
           i++;             
           System.out.println( "edges added to G = "+i);
        }

        System.out.println("Loaded " + g.nodeCount() + " nodes.");

        preparedStatement = connect.prepareStatement("Select node,year,type from subnode2");
        resultSet = preparedStatement.executeQuery();
        int h=0;
        while(resultSet.next()) {
               Node n = new Node(resultSet.getInt(1), resultSet.getInt(2),resultSet.getInt(3),weight);
               int key1=resultSet.getInt(1);
               nodeMap.put(key1,n);
               h++;             
        }

        System.out.println(nodeMap);
        System.out.println(nodeMap.size());

        Scanner sc = new Scanner(System.in);

        System.out.println("How many authors do you want to enter?");
        int num = sc.nextInt();
        int[] authorNames = new int[num];
        for(int a = 0; a < authorNames.length; a++){
            System.out.println("Enter author name:");
            authorNames[a] = sc.nextInt();
        }

        System.out.println("Year : ");
        int inputYear3 = sc.nextInt();

        ArrayList<Integer> p1 = new ArrayList<Integer>();
        /**Get the papers written by input author A-P**/    
        for(int b=0; b< authorNames.length;b++){
            int AuthorID1 = authorNames[b];
            p1 = g.getOutEdgesToP(AuthorID1);
        }

        for(int item : p1){ //the error of classcastexception is here
            System.out.println(item); 
        }

    }
}

边缘类

public class Edge {


    int from;
    int to;
    int type;
    private static int counter = 0;
    public Edge(int from, int to, int type) {
        this.from = from;
        this.to = to;
        this.type = type;
    //  System.out.println("edges added from " + from + " to " +  to + " with type "+ type);
    }

    public String toString(){
        String repr = Integer.toString(to);
        return repr;
    }
    public int getfrom(){
        return from;
    }

    public int getto(){
        return to;
    }

    public int getType(){
        return type;
    }

    public void setfrom(int from){
        this.from = from;
    }

    public void setto(int to){
        this.to = to;
    }

    public void setType(int type){
        this.type = type;
    }
}

图类

import java.lang.reflect.Field;
import java.util.*;

public class Graph {

    private HashSet<Integer>  nodeIDs;   
    public HashMap<Integer, String> nodeIDsWithTN;
    public HashMap<Integer, String> TNMap;  
    private HashMap<Integer, ArrayList<Integer>>  edges;
    private HashMap<Integer, ArrayList<Integer>>  reverse;
    private int numNodes;
    private int numEdges;
    private int numReverse;

    public Graph() {
        edges = new HashMap<Integer, ArrayList<Integer>>();
        reverse = new HashMap<Integer, ArrayList<Integer>>();
        nodeIDs = new HashSet<Integer>();
        nodeIDsWithTN = new HashMap<Integer, String>();
        TNMap = new HashMap<Integer, String>();
        new HashSet();
    }

    public void addEdgeForIndexing(int from, int to, int T) throws IllegalArgumentException, IllegalAccessException {

            Edge e = new Edge(from,to,T);
            nodeIDs.add(e.from);
            nodeIDs.add(e.to);

            ArrayList tmp = null;
            if (edges.containsKey(e.from))
              tmp = (ArrayList) edges.get(e.from);
            else {
              tmp = new ArrayList();
              edges.put(e.from,tmp);
            }
            tmp.add(e);

            ArrayList tmp2 = null;
            if (reverse.containsKey(e.to))
              tmp2 = (ArrayList) reverse.get(e.to);
            else {
              tmp2 = new ArrayList();
              reverse.put(e.to,tmp2);
            }
            tmp2.add(e);

    }

    public int nodeCount() {
        if(nodeIDs.size() > 0) 
            return nodeIDs.size();
            // else return numNodes;
        return numEdges;
    }

    public int countInEdges(Integer key) {
        if (!reverse.containsKey(key)) return 0;
            return ((ArrayList<?>) reverse.get(key)).size();
    }

    public int countOutEdges(Integer key) {
        if (!edges.containsKey(key)) return 0;
            return ((ArrayList<?>) edges.get(key)).size();
    }
/**
    public ArrayList<String> getInEdgesFromPtoA(String id) {
        if (!reverse.containsKey(id)) return null;  
            ArrayList<String> a = reverse.get(id);
            ArrayList<String> result = new ArrayList<String>();
                for(int j=0;j<a.size();j++){
                      if(a.get(j).startsWith("A")){
                          result.add(a.get(j));                           
                      }
                 }
        return result;
    }
**/

      public ArrayList<Integer> getOutEdges(Integer key) {
            if (!edges.containsKey(key)) 
                return null;

            ArrayList<Integer> value = edges.get(key);
            return value;
      }


      public ArrayList<Integer> getOutEdgesToP(int id) {
            if (!edges.containsKey(id)) {
                return null;
            }

            ArrayList<Integer> a = edges.get(id);           
            System.out.println ("Arraylist a: " + a); //if i print using this its okay. but i cant get each item in this ArrayList like below
            for(int item : a){ //the error of classcastexception is here
                System.out.println(item);
            }

            return a;
     }

    public Iterator<Integer> nodeIteratorInitial() {
        return nodeIDs.iterator();
    }
}

节点类

public class Node {

      int id;
      double weight;
      int year;
      int type;
      private static int counter = 0;

      public Node(int id,int year,int type,double weight) {
          this.id = id;
          this.year=year;
          this.weight = weight;
          this.type = type;
     }

      @Override
      public String toString() {
          // here you can create your own representation of the object
          String repr = "id:" + id + ", year:" + year + ", weight:" + weight + ", node type:" + type;
          return repr;
          }

    public double getWeight(){
            return weight;
      }

      public int getid() {
           return id;
      }

      public int getType() {
           return type;
      }

      public int getYear() {
           return year;
      }

      public void setWeight(double weight){
         this.weight=weight;
      }

      public void setid(int id){
          this.id=id;
      }

      public void setType() {
           this.type=type;
      }
}

问题答案:

private HashMap **> edges;

// ...later

Edge e = new Edge(from,to,T);

// ...later

else {
    tmp = new ArrayList();
    edges.put(e.from, **tmp** );
}
**tmp.add(e);**

最终,这是原始类型为何不好的经典示例。您有一个,ArrayList<Integer>然后放入Edge

不幸的是,由于我不了解您要执行的操作,因此我不知道如何告诉您如何解决它。



 类似资料:
  • 问题内容: 我有一个SOAP Web服务,正在尝试在应用程序内部调用。我正在使用cxf-codegen-plugin(3.1.10)从WSDL生成源。 使用生成的客户端,如果我在应用程序内调用Web服务,则效果很好。但是,我还针对导致问题的应用程序中的同一软件包使用了另一个JAXB实例。 例如,以下代码很好用: 但是,在此之前初始化一个新的JAXB实例会导致调用失败: 使用以下堆栈跟踪: 我试着接

  • 问题内容: 我正在使用spring通过bean创建对象。现在,我尝试使用aop创建相同的对象,并且我无法将$ Proxy强制转换为SaleRoom异常。 先前的xml是: 我使用以下代码创建销售: 这是新的xml: Aspect日志记录类: 我正在使用相同的代码通过aop创建bean。并且在线程“主”中得到异常java.lang.ClassCastException:$ Proxy11无法转换为a

  • 问题内容: 我使用maven-eclipse创建了一个新的Spring MVC项目,并引发以下错误: (我尝试了stackoverflow的一些解决方案,但这些解决方案在我的情况下不起作用。pom.xml出现了一些我找不到的问题。我为servlet- api添加了提供的作用域,并尝试了它也不起作用。) 我的pom.xml如下: 我的web.xml如下: 问题答案: 更改 至 具有以下说明: 这很像

  • 问题内容: 您好,我的代码正在抛出。StackTrace显示: 即@ ps.setDate(6,(Date)affiliate.getDate()); 在DAO 以下是我的servlet: 以下是我的DAO: 以下是我的DTO: 请在这方面帮助我 问题答案: 由于文档说,将在参数的需要类型的Date对象。但是您似乎在课堂上使用了对象。 这就是为什么你得到了。 要解决此问题,您需要将类中的对象类型更

  • 问题内容: 在我的应用程序中,我需要将arraylist转换为数组的字符串。但是,我得到一个错误: 在与我在一起的错误: 这是完整的代码: 问题答案: 尝试 注意:我建议将listofurls重命名为arrayOfURLs

  • 我有一个与这里类似的问题,DispatcherServlet不能强制转换为Servlet,这是在使用Eclipse运行一个新的Spring MVC项目时发生的。然而,所有的答案都暗示了一个使用Maven的解决方案,而我没有使用Maven。 我为这个问题找了一天,但没有解决办法。