二元运算符的不良操作数类型%

问题描述:

我正在练习我的java并遇到一些问题。二元运算符的不良操作数类型%

我想学习从Arraylist中删除元素,所以我要消除这些可能性。

public static void arrayLists(){ 
     List<Integer> xlist = new ArrayList<Integer>(); 
     for (int x = 0; x < 10; x ++){ 
      xlist.add(x); 
     } 
     for (Iterator<Integer> pointer = xlist.iterator(); pointer.hasNext();){ 
      if (pointer % 2 == 1){ 
       pointer.remove(); 
      } 
     } 
    } 

为什么不编译? '二元运算符'的错误操作数类型'

我认为问题与列表元素是整数,而我将它们与int(s)进行比较。任何想法如何解决这个问题?

+0

指针类型Iterator'的'和'不Integer'。你需要首先提取整数值来调用% – Neo 2014-10-22 06:25:30

+0

@ Mhsmith21答案posted – 2014-10-22 06:27:53

它应该是:

 if (pointer.next() % 2 == 1){ 
      pointer.remove(); 
     } 

指针是Iterator,你不能对其执行%。您必须通过调用pointer.next()来获取Ierator当前位置处的整数。

替换:

if (pointer % 2 == 1) 

if (pointer.next() % 2 == 1) 

有在你的代码的一些错误,工作代码为: - 做

public static void arrayLists(){ 
    List<Integer> xlist = new ArrayList<Integer>(); 
    for (int x = 0; x < 10; x++){ //this is not a compiler error but avoid unnecassary spaces , x ++ should be x++ 
     xlist.add(x); 
     } 
    Iterator<Integer> pointer = xlist.iterator(); // write this out of the for loop statement, since we wont be needing it 
    while(pointer.hasNext()){ //its better to use while loop, since there is no increment for counter variable required, the iterator will do that job 
     if (pointer.next() % 2 == 1){ //get current element in iterator by using next() function, pointer.next() 
     pointer.remove(); 
     } 
    } 
} 

变化 - if (pointer.next() % 2 == 1).next实际上将返回对象 公共类的测试{

public static void main(String[] args) { 
     arrayLists(); 
    } 

    public static void arrayLists() { 
     List<Integer> xlist = new ArrayList<Integer>(); 
     for (int x = 0 ; x < 10 ; x++) { 
      xlist.add(x); 
     } 
     for (Iterator<Integer> pointer = xlist.iterator() ; pointer.hasNext() ;) { 
      if (pointer.next() % 2 == 1) { 
       pointer.remove(); 
      } 
     } 

     System.out.println(xlist); 
    } 

} 

输出

[0, 2, 4, 6, 8]