...

View Full Version : Unexpected Output from a 2D Array



b00mtastik
03-12-2012, 04:18 AM
Hey guys, B00mer here.

So, was just coding and messing around with 2 dimensional arrays to kinda get a better understanding of it and also to be able to manipulate it and do some other stuff with it. However, upon compiling and running the 2D array to output all its contents after it had already been populated during compile, it game me some crazy numbers, instead of the ones I was looking for. And I for the life of me cannot understand why. So I thought you guys might be able to help. The simple code is as follows:



public class nbyn {

public static void main(String[] args) {

//Array Box A
int [][] a = new int[][]{
{ '1', '2', '3' },
{ '4', '5', '6' },
{ '7', '8', '9' },
};

//Array Box B - Ignore this one for now, nothing happening with it
int [][] b = new int[][]{
{ '1', '2', '3' },
{ '4', '5', '6' },
{ '7', '8', '9' },
};

int i, j;
//traverse the array 'a' and output all its contents
for (i=0; i < a.length; i++) {
for (j=0; j < a[i].length; j++) {
System.out.print(" " + a[i][j]);
}
System.out.println("");
}
}
}
So the output I was expecting was:

1, 2, 3, 4, 5, 6, 7, 8, 9Instead I get this:


run:
49 50 51
52 53 54
55 56 57
BUILD SUCCESSFUL (total time: 0 seconds)
Any explanation of how this output came to being, and also a bit of help on what I NEED to do in order to get the output I want, would be amazingtastik.

Danke.

-B00mer

Fou-Lu
03-12-2012, 05:14 AM
Those int representations for chars. 1 - 9 is 49 - 57 inclusive.

alykins
03-12-2012, 02:37 PM
this ascii (http://www.asciitable.com/) chart might help you understand better- look at the red 1,2,3... etc and then look at the Dec value of it- you are getting the conversion of the char-> int ... I am surprised though that it did not error out on a bad type

Gox
03-12-2012, 05:27 PM
I believe you need to remove the single quotes in your array instantiation.

i.e.


int[] anArray = {
100, 200, 300,
400, 500, 600,
700, 800, 900, 1000
};

Fou-Lu
03-12-2012, 06:55 PM
It won't error out since its not technically a bad type. A char is just a byte, and a byte is a lower "quality" primitive than the int. So you can always stick a lower quality primitive into a "higher" datatype, and more often than not without an explicit conversion.
Effectively, if you can stuff a value into a variable without losing precision, it will attempt to implicitly cast the value to match it. Byte -> Short Int -> Int -> long Int -> float -> double, but you cannot go the other way. This is the same behaviour that C follows.



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum