views:

119

answers:

4

I have an int array that holds a single digit in each index so that once printed out, it displays a long number. Ex: digit = {1, 2, 3, 4, 5} would look like 12345.

I have a method that takes a string as parameter and puts the numbers it gets from the string into the digit array. It looks like this:

digit = new int [50];

for (int i = 0; i < myString.length(); i++)

{digit[i] = Character.digit(myString.charAt(i), 10)};

Now when I pass these two strings to the function:

String str1 = "1234567890123456789012345678901234567890";
String str2 = "0000123456789012345678901234567890123456";

I get

12345678901234567890123456789012345678900000000000

1234567890123456789012345678901234560000000000

Can somebody explain to me why those trailing zeros are there?

+3  A: 

Your array can contain 50 items. However, the strings you're passing in are less than 50 digits. Creating a new array will initialize every item in it with its default value. In this case, it's an integer so the default value is 0. That's why you're getting the trailing zeros.

It sounds like what you want is a collection instead of an array. I don't know what collection types Java has but in C#, most people use a List.

Daniel T.
There's no problem using an array, he just needs to initialise it to the length of the string.
Catchwa
Thank you that was helpful, not sure why I didn't see it before :)
birdonawire
+2  A: 

From Sun:

Each class variable, instance variable, or array component is initialized with a default value when it is created (§15.9, §15.10):

  • For type byte, the default value is zero, that is, the value of (byte)0.
  • For type short, the default value is zero, that is, the value of (short)0.
  • For type int, the default value is zero, that is, 0.
  • For type long, the default value is zero, that is, 0L.
  • For type float, the default value is positive zero, that is, 0.0f.
  • For type double, the default value is positive zero, that is, 0.0d.
  • For type char, the default value is the null character, that is, '\u0000'.
  • For type boolean, the default value is false.

All of the ints in the array are being initialized to 0 when you create it, but the ones at the end are not being overwritten (since the number you put into the array was less than 50 digits).

eldarerathis
+2  A: 

You need to make the digit array the same size as the string:

digit = new int [myString.length()];

Voilà.

Sean
A: 

The trailing zeros are there because when you create your int the entire array is initially just zeros (as eldarerathis has pointed out).

It's pretty easy to fix this. Just replace:

digit = new int [50];
with
digit = new int[myString.length()];
That way you create an int array equal to the number of digits you have and there won't be any uninitialised entries.

Catchwa
Easiest fix ever, thank you!
birdonawire