Estel Rash
Estel Rash

Reputation: 13

List.add() Class Expected

I'm taking a Java class in College. My instructor is actually a teacher for languages derived from C, so she can't figure out what's going on with this piece of code. I read on this page http://docs.oracle.com/javase/6/docs/api/java/util/List.html that I could use the syntax "list[].add(int index, element)" to add specific objects or calculations into specific indexes, which reduced the amount of coding needed. The program I'm looking to create is a random stat generator for D&D, for practice. The method giving the error is below:

//StatGenrator is used with ActionListener

private String StatGenerator ()
{
        int finalStat;
        String returnStat;

        //Creates an empty list.
        int[] nums={};

        //Adds a random number from 1-6 to each list element.
        for (int i; i > 4; i++)
            nums[].add(i, dice.random(6)+1); //Marks 'add' with "error: class expected"

        //Sorts the list by decending order, then drops the
        //lowest number by adding the three highest numbers 
        //in the list.            
        Arrays.sort(nums);
        finalStat = nums[1] + nums[2] + nums[3]; 

        //Converts the integer into a string to set into a 
        //texbox.
        returnStat = finalStat.toString();
        return returnStat;
}

My end goal is to use some kind of sorted list or method of removing the lowest value in a set. The point of this method is to generate 4 random numbers from 1-6, then drop the lowest and add the three highest together. The final number is going to be the text of a textbox, so it is converted to a string and returned. The remainder of the code works correctly, I am only having trouble with this method.

If anyone has any ideas, I'm all ears. I've researched a bit and found something about using ArrayList to make a new List object, but I'm not sure on the syntax for it. As a final note, I tried looking for this syntax in another question, but I couldn't find it anywhere on stackoverflow. Apologies if I missed something, somewhere.

Upvotes: 1

Views: 422

Answers (4)

Don
Don

Reputation: 1144

'int nums[]' is not a List, it's an array.

List<Integer> intList = new ArrayList<>();

creates a new ArrayList for example.

You can access Elements in the list directly with the following Syntax :

intList.get(0); // Get the first Element

You can sort Lists with the Collections class :

Collections.sort(intList);

Here are some informations about Collections in Java : http://docs.oracle.com/javase/tutorial/collections/

Upvotes: 4

John Kugelman
John Kugelman

Reputation: 361585

Arrays are fixed size, so you need to allocate space for all the slots at the start. Then to put numbers into the array assign to nums[i]. No add() method needed.

int[] nums = new int[4];

for (int i = 0; i < 4; i++)
    nums[i] = dice.random(6) + 1;

Arrays.sort(nums);
finalStat = nums[1] + nums[2] + nums[3]; 

Alternatively, if you really want a dynamically-sized array, use an ArrayList. An ArrayList can grow and shrink.

List<Integer> nums = new ArrayList<Integer>();

for (int i = 0; i < 4; i++)
    nums.add(dice.random(6) + 1);

Collections.sort(nums);
finalStat = nums.get(1) + nums.get(2) + nums.get(3); 

Notice how different the syntax is due to ArrayList being a class rather than a built-in type.

Upvotes: 3

PermGenError
PermGenError

Reputation: 46408

nums[].add(i, dice.random(6)+1); //Marks 'add' with "error: class expected"

You are trying to use add on an array. List is a dynamic array, but that doesn't mean that array == List. you should use List instead.

 List<Integer> nums=new ArrayList<Integer>();

//Adds a random number from 1-6 to each list element.
for (int i; i > 4; i++)
    nums.add(i, dice.random(6)+1); 

Upvotes: 2

Puce
Puce

Reputation: 38132

You're mixing arrays and lists.

Have a look at the tutorial:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

http://docs.oracle.com/javase/tutorial/collections/index.html

Upvotes: 0

Related Questions