• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Ron McLeod
  • Paul Clapham
  • Tim Cooke
  • Devaka Cooray
Sheriffs:
  • Liutauras Vilda
  • paul wheaton
  • Rob Spoor
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Tim Holloway
  • Piet Souris
  • Mikalai Zaikin
Bartenders:
  • Carey Brown
  • Roland Mueller

Array of Arrays?

 
Greenhorn
Posts: 17
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I am working on a question from a Java tutorial website(as I am trying to learn Java myself) could someone give me help on the following:
Whats Required:
Sequential program that receives as input a single Y x Z dimensional matrix (A) with a large amount of unsorted integer numbers(Created randomly).
The program then has to produce an N-dimensional array B containing the sum of the numbers in each A column(for example Bi = Ai1 + Ai2 + etc + AiN
(i = 1 .....M)
so the output I think would be as follows from what I understand from the question:
If the user entered 5,5:
3 2 2 4 8
1 4 2 3 7
2 4 7 2 6
2 5 1 7 9
1 2 8 3 4
9 17 20 19 34 << Columns added together
The only code I have came up with so far is(which as you can probably see is just the skeleton of the code):
import java.io.*;
public class Matrix
{
public static void main(String[ ] args)
{
Matrix theApp = new Matrix();
theApp.run();
}
private void run()
{
// Code to generate a number of random numbers (depending on user input)
// Adding the columns together and printing to screen grid
}
Could someone help me implement the missing code please.
Thanks for any help.
 
(instanceof Sidekick)
Posts: 8791
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I hope this answer is at the right level - I apologize if you're really well beyond this ...
I'm glad you said "array of arrays" as that's what Java really does. It's often close enough to say "multi-dimensional arrays" but Java does not require these things to be "rectangular". That is, it ain't necessarily so that every row is the same length. But let's keep things simple today and say they are.
Are you familiar with the common code for looping through an array? Let's say we wanted to sum up the numbers in a simple array.

The for loop declares an index called "i" initialized to zero. It says as long as i is less than the length of the array do the stuff in the braces then add one to i. "Less than the length" often trips up new folks. For our 5 slots, the index "i" is going to have values 0..4.
Now your example showed a 5x5 matrix. So the code is a little trickier:

The first "for" is familiar. The second one creates another index and compares it to b[i].length. This tells us that b[i] is an array, just as you said at the start with "array of arrays".
Finally, we have to get some interesting numbers. The load loop will look a lot the same:

Rows and columns are just in our heads. I iterated column then row which may seem very strange. You can play with that, too. Just decide which "dimension" is rows and which is columns. Let's change it around now and say the array is b[rownum][colnum] and you want users to enter a row at a time.

One potential gotcha in that last loop is that we assume all rows have the same number of columns. In your simple example, this will be true. In more complex examples, with a non-rectangular array of arrays, it might not be.
Hope that gives you something to play with. Get something going and let us know if you have more questions.
 
David Hunt
Greenhorn
Posts: 17
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks a lot for your help. I'm sure I will be back with more questions once I have got something going
 
David Hunt
Greenhorn
Posts: 17
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Ok I have done the following code, it asks the user for an integer then when it gets to 5(no of columns) it prints the a message with the total for that column(eg " Sum for column 4 = 23"). I would like to change it so it outputs the results at the end only and not after each column is entered. So could someone show me how this would be done as I cannot work out how to convert it. ie so after the user has entered each number when prompted it prints to screen a grid like below with the sum of each column underneath:
3 2 2 4 8
1 4 2 3 7
2 4 7 2 6
2 5 1 7 9
1 2 8 3 4
9 17 20 19 34
---------------------------------------------------------------------------
import java.io.*;
public class Matrix
{
public static void main(String[ ] args)
{
Matrix theApp = new Matrix();
theApp.run();
}
private void run()
{
int[][] b = new int[5][5];
for(int i = 0; i < b.length; i++ )
{
int sum = 0;
for (int j = 0; j < b[i].length; j++ )
{
sum += b[i][j] = getInt();
}
System.out.println("Sum for column " + i + " = " + sum );
}
}
private int getInt()
{
int num;
String inStr = null;

try
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter integer data: ");
inStr = in.readLine();
}
catch(IOException ioe)
{
System.out.println(ioe);
}
num = Integer.parseInt(inStr);
return num;
}
}
---------------------------------------------------------------------------
 
If I'd had more time, I would have written a shorter letter. -T.S. Eliot such a short, tiny ad:
We need your help - Coderanch server fundraiser
https://coderanch.com/wiki/782867/Coderanch-server-fundraiser
reply
    Bookmark Topic Watch Topic
  • New Topic