Click to See Complete Forum and Search --> : Integer doesn't allow use of mod operation?


JavaBeanie
10-09-2005, 02:24 PM
My goal is to delete all even numbers in the ArrayList but i'm getting hung up on the mod operation-the error states that: operator % cannot be applied to java.lang.Integer,int:

import java.util.*;

class IteratorLab
{
public static void main(String [] args)
{
//Create ArrayList and add data
ArrayList numbers = new ArrayList();
numbers.add("3");
numbers.add("8");
numbers.add("4");
numbers.add("1");
numbers.add("9");
numbers.add("7");
numbers.add("2");
numbers.add("5");
numbers.add("6");

//Print numbersArrayList in original order
System.out.println( "Original Array List Contents: \n");
for (Iterator iter = numbers.iterator(); iter.hasNext();){
System.out.print((String)(iter.next()) + " ");
}
System.out.println();

for (Iterator iter = numbers.iterator(); iter.hasNext();)
{
Integer value = (Integer)iter.next();
if(value % 2 != 0) <----------here's where the trouble starts
iter.remove();
}
// Print out the remaining elements with another Iterator.
System.out.println("\nArrayList after removing all even numbers indexes: \n");
for (Iterator iter = numbers.iterator (); iter.hasNext (); ) {
System.out.print (iter.next () + " ");
}
System.out.println();
System.exit(0);
}

}

mr1yh1
10-09-2005, 05:39 PM
1-)Integer class is a wrapper class for int primitive.
it's objects, are not "numbers" for aritmetic operations.

Integer i = new Integer(3);
i.intValue() % 5; // equal 3

...
2-)
i surprised , you put String objects in ArrayList
later you cast String objects into Integer objects,
how this dont give an error ?

JavaBeanie
10-09-2005, 06:17 PM
I tried it like this:

for (Iterator iter = numbers.iterator(); iter.hasNext();)
{
Integer value = (Integer)iter.next();
if(value.intValue() % 2 != 0)
iter.remove();
}

and get a ClassCastException

mr1yh1
10-09-2005, 09:38 PM
yes, you try to cast to Integer from String, its not allowed.

you can fill ArrayList with Integer objects.
numbers.add( new Integer(3) );

insteed of Strings,
numbers.add("3");

JavaBeanie
10-10-2005, 09:07 AM
Actually - I cast it as a string and then to an Integer and everything works fine now:
I replaced:
Integer value = (Integer)iter.next();
With:
int value = new Integer((String)(iter.next())).intValue();

Java doesn't seem to have a problem with this, but would you call it a bad programming practice or is it acceptable?

mr1yh1
10-10-2005, 03:01 PM
int i = Integer.valueOf("3");// i = 3
simply this will work too.
...
in java there are primitives and objects.
int values are primive , Integers are objects .
everything is not an object, becos this decrease calculation speed.

ArrayList ( or any other Collection ) can only hold objects.
so we can not put int values into any Collection,
Integer objects are used for solving this problem. ( wrapping int values )

for me , you can do anything else for any particular problem, if it simplfies...