gpt4 book ai didi

java - ClassCastException : cant be cast to java. lang.Integer

转载 作者:行者123 更新时间:2023-12-01 06:34:43 24 4
gpt4 key购买 nike

我知道这个问题在 stackoverflow 中被问了很多,但我找不到适合我的问题的答案。

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

我尝试使用 for(Integer item :p1) 打印每个项目还有for (int item: p1)但两者都不起作用。

我认为问题可能是因为 toString() Edge 类中的方法,但如果我不使用 toString()我无法获得真正的 key 号码(它将被打印为 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<Integer, <strong>ArrayList<Integer></strong>>  edges;

// ...later

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

// ...later

else {
tmp = new ArrayList();
edges.put(e.from,<strong>tmp</strong>);
}
<strong>tmp.add(e);</strong>

最终,这是 why raw types are bad 的经典示例。你有一个 ArrayList<Integer>然后你输入 Edge就在里面。

不幸的是,我不知道如何告诉你如何解决它,因为我不明白你想要做什么。

关于java - ClassCastException : cant be cast to java. lang.Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29666610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com