Solved

how to stop "array may not be initialized" warning

Posted on 2003-12-01
7
366 Views
Last Modified: 2010-03-31

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
Comment
Question by:kengoudsward
  • 5
7 Comments
 
LVL 92

Expert Comment

by:objects
ID: 9855888
int[] results = new int[calls_size+1];
0
 
LVL 92

Expert Comment

by:objects
ID: 9855903
You have to declare the size of the array.
0
 
LVL 92

Expert Comment

by:objects
ID: 9856089
You can actually get the size of an array using:

myarray.length
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 92

Accepted Solution

by:
objects earned 150 total points
ID: 9856100
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
 

Assisted Solution

by:stevebeech
stevebeech earned 50 total points
ID: 9856937
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
 

Author Comment

by:kengoudsward
ID: 9862255
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
 
LVL 92

Expert Comment

by:objects
ID: 9862318
> 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For customizing the look of your lightweight component and making it look opaque like it was made of plastic.  This tip assumes your component to be of rectangular shape and completely opaque.   (CODE)
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now