Win a copy of Learn Spring Security (video course) this week in the Spring forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Use of a static method with queues

 
Julian King
Greenhorn
Posts: 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi, I'm a Java newbie and I've been really stuck on this assignment in the Osborne Java 2 book. I really would appreciate any help, even a clue or two?
In this application there are classes specifying types of queue formed in arrays, these in themselves aren't a problem to me, but where I fall down a hole is the bit where I've been asked to write a static method to copy the contents from one queue to another.
So far I've got:
class Copy {
public static int[] a;
public static int[] b;
public static int[] StaticCopy() {
a = b;
return a;
}
}
This seems to compile but I get nothing but a null value from it, because obviously it's not referencing the instance variable arrays in the queue classes. Being static the method can only reference static variables, and yet the queue arrays are non-static. Also, in the main method I shouldn't have to create an object of class Copy should I because it's static. How can I reference the non-static queue arrays, which are each in their separate classes?
As you can see I'm a bit blurry on the whole concept and any nudge in the right direction would be much appreciated.
Thanks

 
Rob Ross
Bartender
Posts: 2205
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Can you post your complete code? You say your arrays are not static, and yet their declaration shows they are indeed static:
public static int[] a;
public static int[] b;
Another thing, your method isn't copying the array contents, it's merely assigning to reference variable a the same value as reference variable b. What this means is that after the assignment, both a and b are referring to the same array in memory.
For example, if the int[] has these values: {1,2,3} then the expressions a[1] and b[1] both refer to element 1 of the same array and have value = 2.
If you want to actually make a seperate copy of the arry you have to either implement your own method that:
1. creates a new int[] of the same size
2. loops over this new array, copying each element from the first array into the copy array.
You can also use the lava.lang.System method System.arrayCopy(). Check out the java docs on this method.
 
Dirk Schreckmann
Sheriff
Posts: 7023
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hello,

 
Dirk Schreckmann
Sheriff
Posts: 7023
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
And just to point out a few of the potential pitfalls of class Copy:
- the array lengths aren't really considered to be of concern (they very well may be - especially if they are of different lengths)
- maybe you'd rather have just one array as the parameter and use the static method to copy the elements into a new array that is returned
- if you are using arrays of Objects (not primitives) then the copying method would have to not just copy references to the elements from one array into the other, but (it'd probably be preferred to) copy new copied instances of the Objects from the input array
You might want to take a look at System.arraycopy for design considerations (but I don't recommend trying to find the source code in the JDK and JVM source files for how the platform specific details of it work - I tried and it ain't worth it).
Good Luck.
[ March 11, 2002: Message edited by: Dirk Schreckmann ]
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic