无法将获取java.lang.Object转换为java.lang.Integer

无法将获取java.lang.Object转换为java.lang.Integer,java,linked-list,Java,Linked List,我正在用Java实现图形数据结构。 以下是我的实现: package Graph; import java.util.*; import java.io.*; public class Graphs { int size; LinkedList<Integer>[] ll; Graphs(int size) { this.size = size;

我正在用Java实现图形数据结构。 以下是我的实现:

    package Graph;

    import java.util.*;
    import java.io.*;

   public class Graphs
   {
       int size;
       LinkedList<Integer>[] ll;

       Graphs(int size)
       {
            this.size = size;

            ll = new LinkedList[size];

            for(int i=0; i<size; i++)
              ll[i] = new LinkedList<Integer>();

       }

       public static void print(LinkedList lli)
       {
            for(Integer i: lli)
                System.out.println(i);

            //for(int i=0; i<lli.size(); i++)
            //    System.out.println(lli.get(i));
       }

       public static void addEdge(Graphs graph, int up, int to)
       {
           graph.ll[to].add(up);
       }

      public static void main(String args[])
      {
          int V=5;
          Graphs graph = new Graphs(V);

          addEdge(graph,1,2);
          addEdge(graph,1,3);
          addEdge(graph,2,3);
          addEdge(graph,3,1);
          addEdge(graph,3,2);
          addEdge(graph,3,4);
          addEdge(graph,4,3);

          print(graph.ll[3]);      
      }

   }
包图;
导入java.util.*;
导入java.io.*;
公共类图
{
整数大小;
LinkedList[]ll;
图形(整数大小)
{
这个。大小=大小;
ll=新链接列表[大小];

对于(int i=0;i声明如下打印方法:

public static void print(LinkedList<Integer> lli)
公共静态无效打印(LinkedList lli)

然后它就会知道lli的内容是整数。

我复制了你的代码,直到我更改了它才编译

public static void print(LinkedList lli)
致:

公共静态无效打印(LinkedList lli)
从那里工作没有问题

另外,给变量起一个以大写字母开头的名称是违反命名惯例的。请看一下。页面上的最后一个要点说明:

如果您选择的名称仅由一个单词组成,请使用所有小写字母拼写该单词。如果该名称由多个单词组成,请将随后每个单词的第一个字母大写。名称gearRatio和currentGear是此约定的主要示例


您遇到的具体问题是打印功能:

public static void print(LinkedList lli){
        for(Integer i: lli)
            System.out.println(i);
}

<代码> LIKEDLISTAB/CODE >是一个原始类型,意味着您丢失了列表中存储了哪些对象的类型信息。作为一个一般规则,我非常惊讶您的代码编译,但只要说“代码>整数I:LLI< /CODE >,您就可以总结出<代码> LLI中的每个对象是一个<代码>整数ameter

LinkedList
不提供此类保证

为确保此操作正常,请将
LinkedList lli
更改为
LinkedList lli
。这意味着lli中的每个对象都是Integer的实例,因此迭代不会失败

当我试着运行你的代码时,我的IDE会提醒我这一行

ll = new LinkedList[size]
说:

未选中的赋值:“java.util.LinkedList[]”到“java.util.LinkedList[]”

这表明这里有可疑的事情发生

混合使用列表和数组会使泛型键入变得有点混乱-如果需要大小可变,只使用列表,或者如果不需要多维数组,则使用多维数组会更简单、更干净。对于您的情况,这就需要使用
ArrayList

我们可以通过解决一般问题来解决这些问题:

import java.util.*;
import java.io.*;

public class Graphs
{
  int size;
  ArrayList<LinkedList<Integer>> ll;

  Graphs(int size)
  {
    this.size = size;

    ll = new ArrayList<LinkedList<Integer>>();

    for(int i=0; i<size; i++)
      ll.add(new LinkedList<Integer>());

  }

  public static void print(LinkedList<Integer> lli)
  {
    for(Integer i: lli)
      System.out.println(i);

    //for(int i=0; i<lli.size(); i++)
    //    System.out.println(lli.get(i));
  }

  public static void addEdge(Graphs graph, int up, int to)
  {
    graph.ll.get(to).add(up);
  }

  public static void main(String args[])
  {
    int V=5;
    Graphs graph = new Graphs(V);

    addEdge(graph,1,2);
    addEdge(graph,1,3);
    addEdge(graph,2,3);
    addEdge(graph,3,1);
    addEdge(graph,3,2);
    addEdge(graph,3,4);
    addEdge(graph,4,3);

    print(graph.ll.get(3));
  }
}
import java.util.*;
导入java.io.*;
公共类图
{
整数大小;
ArrayList ll;
图形(整数大小)
{
这个。大小=大小;
ll=新的ArrayList();

对于(int i=0;iShouldn Graph中的构造不包含this.ll(类似于this.size)?请发布完整的错误堆栈问题没有解决。Thx很多。这确实有帮助:)虽然您对未检查的赋值是正确的,并且您的代码确实可以编译,但这并不是实际问题。将方法签名更改为
print(LinkedList lli)
就足够了。是的,现在我看到了。在任何情况下,完全解决泛型问题都可以解决它。更新
import java.util.*;
import java.io.*;

public class Graphs
{
  int size;
  ArrayList<LinkedList<Integer>> ll;

  Graphs(int size)
  {
    this.size = size;

    ll = new ArrayList<LinkedList<Integer>>();

    for(int i=0; i<size; i++)
      ll.add(new LinkedList<Integer>());

  }

  public static void print(LinkedList<Integer> lli)
  {
    for(Integer i: lli)
      System.out.println(i);

    //for(int i=0; i<lli.size(); i++)
    //    System.out.println(lli.get(i));
  }

  public static void addEdge(Graphs graph, int up, int to)
  {
    graph.ll.get(to).add(up);
  }

  public static void main(String args[])
  {
    int V=5;
    Graphs graph = new Graphs(V);

    addEdge(graph,1,2);
    addEdge(graph,1,3);
    addEdge(graph,2,3);
    addEdge(graph,3,1);
    addEdge(graph,3,2);
    addEdge(graph,3,4);
    addEdge(graph,4,3);

    print(graph.ll.get(3));
  }
}