Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 379
  • Last Modified:

how to stop "array may not be initialized" warning


my class has an array of ints named "calls" and an int "calls_size" to keep track of it's size. I know this screams for a Vector but I think it is a pain in the butt using a vector for ints, too much screwing around with Object nonsense

anyway, this function should return an array of ints matching "calls" but with "calls_size" at the begining, so if calls==10,11,12 then results=3,10,11,12

it has been awhile since I have used java, especially with arrays, so I'm not sure if my whole open ended array idea will work, but at any rate, line 06 gives me a compilation error:  "variable results might not have been initialized".
I am quite aware of this fact and I don't care if it is initialized or not since I am manually tracking the size. This error stops compilation, however. Is there any way to demote the error to simply a warning? Any suggestions regarding my scheme would also be welcomed.

01 public int[] getCalls()
02 {
03    try
04    {
05        int[] results;
06        results[0] = calls_size;
07        for(int i = 1; i <= calls_size; i++)
08        {
09            results[i] = calls[i];
10        }
11        return results;
12   }
   ...snip ...

Thanks,
Ken Goudsward
0
kengoudsward
Asked:
kengoudsward
  • 5
2 Solutions
 
objectsCommented:
int[] results = new int[calls_size+1];
0
 
objectsCommented:
You have to declare the size of the array.
0
 
objectsCommented:
You can actually get the size of an array using:

myarray.length
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
objectsCommented:
To have a dynamic int array you could create a wrapper class around Vector, something like:

public class IntArray
{
   private Vector v = new Vector();

   public void add(int i)
   {
      v.add(new Integer(i));
   }

   public int get(int index)
   {
      Integer i = (Integer) v.get(index);
      return i.intValue();
   }

   ...
}
0
 
stevebeechCommented:
Ken,

Because the initialisation is inside the try{} block then the possibility occurs that it might not get initialised - not likely as its the first command in the block, and you're returning the result from within the block. But, what if you were returning from outside? Then you'd have a problem - the try block could fail and results would never have been initialised.
The simple solution (as Objects says) is simply to initialise the array to some value:

int[] results = new int[calls_size+1];

Steve

0
 
kengoudswardAuthor Commented:
Thanks guys,
can't test it today, but...
I like that wrapper class solution!
I will also try putting the array declaration before the 'try' block
0
 
objectsCommented:
> I will also try putting the array declaration before the 'try' block

That won't help. Even if you get rid of the compiler error you'll get a NPE at runtime.

http://www.objects.com.au
0

Featured Post

Ask an Anonymous Question!

Don't feel intimidated by what you don't know. Ask your question anonymously. It's easy! Learn more and upgrade.

  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now