【问题标题】:Getting an error in my code how to fix it? [duplicate]在我的代码中出现错误如何解决? [复制]
【发布时间】:2018-10-11 10:07:49
【问题描述】:

我有以下代码:

public static void poistaKaikki32(LinkedList L1, Collection L2) {
        LinkedList<Integer> temp = new LinkedList<>();
        HashSet<Integer> L2Set = new HashSet<>(L2); 

        // first filter elements into temp
        while (L1.size() > 0) { // n loops
            int v = L1.removeFirst(); <--- getting error cannot convert object to int
            if (!L2Set.contains(v)) { 
                temp.addLast(v);      
            }
        }

        // add filtered values back to L1
        while (temp.size() > 0) {    
            L1.addLast(temp.removeFirst()); 
        }


    }

我不断收到关于 int v = L1.removeFirst(); 的错误。如果不使用演员表,我将如何解决这个问题。

【问题讨论】:

  • removeFirst() 的返回类型是什么?
  • 如果参数L1是一个包含Integers的LinkedList,则声明为LinkedList&lt;Integer&gt; L1;如果由于对调用代码的负面影响而无法执行此操作,则必须使用 (Integer) 演员表。
  • 还有:了解 java 命名约定。变量/参数名称采用驼峰命名法。并且:使用有意义的来告诉人类读者发生了什么。 L1 没有任何意义,什么也说不出来。
  • 是的,@luk2302,演员表不是最佳的;但是如果有很多东西用原始的Lists 调用这个东西怎么办?

标签: java methods collections linked-list


【解决方案1】:

方法的参数是原始类型,这就是为什么当你对其进行获取操作时,你会得到一个对象类型。为了使这项工作在使用获取操作的同时进行 TYPECAST 操作 Integer v = (Integer)L1.removeFirst();

或者将方法参数类型LinkedList L1改为LinkedList&lt;Integer&gt; L1

但最好的方法是第二个更改参数类型

【讨论】:

    【解决方案2】:

    请尝试

    Integer v = (Integer)L1.removeFirst();
    

    【讨论】:

    • 好吧,它通过基本上忽略它来“修复”编译器错误。这不是一个正确的答案。改为更改L1 的类型。
    • @luk2302 其实你是对的public static void poistaKaikki32(LinkedList&lt;Integer&gt; L1, Collection&lt;Integer&gt; L2) {
    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2020-02-19
    • 2020-10-03
    • 2013-10-09
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多